- 博客(182)
- 资源 (9)
- 收藏
- 关注
原创 空间变换与计算_04_4x4矩阵
六自由度:在了解了3x3矩阵能够代三维空间的表旋转后,下面介绍4x4矩阵中每行每列所代表三维空间的含义。在虚拟现实、3D游戏中,仅仅能够三个自由度地旋转是不够的,在通常认识的三维空间中,自由物体总共有六个自由度:沿XYZ三个坐标轴的移动、绕XYZ三轴的旋转。3x3矩阵能够到表空间旋转信息,因此,我们还需要移动位置信息。通常,位置信息可以使用point代表,因此,理论上,我们可以使用point中的xyz代表物体的空间位置,用3x3的矩阵道标物体的姿态,就能够将物体的空间六自由度完全表述清楚。...
2020-11-25 17:39:58
6994
原创 空间变换与计算_03_四元数
四元数介绍:单位四元数(Unit quaternion)可以用于表示三维空间里的旋转]。它与常用的另外两种表示方式(三维正交矩阵和欧拉角)是等价的,但是避免了欧拉角表示法中的万向锁问题。比起三维正交矩阵表示,四元数表示能够更方便地给出旋转的转轴与旋转角。Quaternion:四元数可以表示成:(w, x, y, z),其中w位实数,x, y, z为复数,在三维空间中,四元数可以表示空间旋转,这时:w和x,y,z的平方和一定为1,且,w = cos(a/2),vec = sin(a/2)(x*i
2020-11-25 17:39:21
1312
原创 线性代数的本质_06_向量是什么、线性代数是什么
什么是向量:回到第一节所说的,什么是向量,是空间中的箭头?仅仅是一个实数序列?还是计算机中的表。在数学中,或许我们理解为实数序列比较合适,当维度变得更高时,向量就会变得越大,实数个数就会越多,如图:如果我们纯粹从空间上来理解,当超过三维的时候,我们就很难想象出这样的向量是什么样的,我们无法想象出真正的四维空间是什么样的。在软件工程实际的使用中,一般也只会用到四维及以下的空间变换,为什么...
2020-03-05 18:56:58
402
原创 线性代数的本质_05_基变换,特征向量、特征值
基变换:在之前的博客中,实际上已经提到过基变换,知识没提这个名字,就是将矩阵看做是一个变换即可,变换是从单位矩阵变换到这个变换矩阵的。例如,习惯上,来我们会把正右定义为x轴,上定义为y轴,且【1,0】代表x基向量,【0,1】代表y基向量,如果另一套标准不是这样定义的呢?假设某个国家习惯定义上为x轴,左为y轴,【1,0】代表x基向量,【0,1】代表y基向量,那么就需要一个变换,将坐标系转化成一套...
2020-03-05 18:56:38
648
原创 线性代数的本质_04_点积与叉积
点积:点积的计算非常简单,两个相同长度的数组点积等于对应位置元素乘积之和。在线性代数中,点积的计算是比较靠前的内容,而且我们知道两个向量点积除以两个向量的模的乘积等于向量夹角的余弦值,点积的先后顺序也并不影响结果,这是非常重要的。在几何上,a.b和b.a却是不一样的,如下:看似两个完全不同的过程,结果是一样的,从几何上看,也能看出一样,cos(a)一样。这个和之前的矩阵的值有区...
2020-03-05 18:56:25
563
原创 线性代数的本质_03_行列式、逆矩阵、列空间和零空间
行列式:回顾之前的空间变换,在数学上体现在行列式的乘法,有的空间变换会拉伸空间,有的会压缩,甚至,有的变换会将某个象限压缩,另外的象限拉伸,那么这些空间被拉伸了多少呢?。在线性代数中,行列式的计算是比较容易的,就是左上角到右下角元素乘积之和减去右上角左下角元素乘积之和,计算出来的值可正可负,那么这个值在空间中代表什么呢?结合上面两个问题,看下图:不难看出,原来所有面积为1的方格被变...
2020-03-05 18:55:58
415
原创 线性代数的本质_02_矩阵运算与线性变换复合
线性变换:变换,本质上就是函数,将输入的东西通过变换得到输出,中间的变换和以前学习的函数是一个意思(f(x)),在线性代数中,输入通常为向量,输出通常为这个向量的变换。儿变换一词更有运动的含义在里面,那么向量是如何运动的,下面还是以二维直角坐标系为例:可以想象,一个向量,通过一个变换,移动到另一个地方,这实际就是一个空间变换的过程,这个变换(函数)实际上是对空间的更改。例如,将直角空间变...
2020-03-05 18:55:17
492
原创 线性代数的本质_01_向量、张成空间与基
向量:向量究竟是什么?在线性代数中,最根源最基本的就是向量,在不同行业不同场景中,向量的解释是不一样的。在物理学中,向量可以看成空间中的箭头,有大小和方向,例如,用来表示作用力,速度等,向量只有大小和方向,可以任意移动,没有位置。在三维空间中,如下图一样:在计算机专业,向量就是数组,或者可以理解为数字列表,例如:房屋面积和房屋价格一起组成的表,电脑品牌,型号,cpu配置,显卡配置等...
2020-03-05 18:55:04
1052
1
原创 线性代数与空间变换_00
前言:相信大家都学过线性代数这门课程,线性代数是学习任何技术学科都需要掌握的科目之一,如果不熟悉线性代数,要想学习其他自然科学是非常困难的,各类计算机计算中,例如无人机集群的控制,显卡计算的图形变换,虚拟现实技术,再者各类3D游戏引擎,都需要大量的线性代数知识的支撑才能实现。此外,物理学、机械工程,统计学均会大量用到线性代数。然而,线性代数却是门及其难懂的学科,行列式、矩阵、变换、秩、向量...
2020-03-05 18:54:50
446
原创 VTK011_vtk-图像基础处理_下
7、灰色图转彩色图像(查表映射):灰色图转化成彩色图,实际上是将灰色图的不同黑白程度对应到不同的其他颜色,是一种颜色一一对应的方法,在实际中,有的图片保存也有这种方式,里面保存了一张表,像素点保存的是索引值。#include <vtkSmartPointer.h>#include <vtkJPEGReader.h>#include <vtkImageLu...
2020-03-05 18:48:50
415
原创 VTK010_vtk-图像基础处理_上
1、图像融合:图像融合,将两张图片进行融合在一起,体现为每张图片都有不同的透明度。#include <vtkSmartPointer.h>#include <vtkJPEGReader.h>//#include <vtkImageCast.h>#include <vtkImageData.h>#include <vtkIma...
2020-03-05 18:48:38
206
原创 VTK009_vtk-图片图形图像
图像数据实例:图像实例 1(绘制图像):#include <iostream>#include <vtkSmartPointer.h>#include <vtkRenderWindow.h>#include <vtkRenderWindowInteractor.h>#include <vtkInteractorStyleTr...
2020-03-05 18:48:26
172
原创 VTK008_vtk-数据结构及转换
VTK数据结构:vtk可视化管线和渲染引擎是vtk最重要的两部分,具体而言,前者是用于读取数据处理数据,后者则是渲染数据,显示模型,在这之间,离不开vtk的数据结构。可以认为数据结构是连接vtk可视化管线和vtk渲染引擎的桥梁。vtk数据都是vtkDataObject的子类,通常,我们不会直接使用vtkDataObject来实例化一个vtk数据,一般都是通过指定的数据读取类直接读取文件的数...
2020-03-05 18:48:14
256
原创 VTK_测距&随机数&变换&投影
vtk测距:点-点:#include <iostream>#include <vtkMath.h>int main(int argc, char* argv[]){ // 创建两个空间点 double p0[3] = { 0.0, 0.0, 0.0 }; double p1[3] = { 1.0, 1.0, 1.0 }; // 平方距离 doub...
2020-03-05 18:48:00
416
原创 VTK007_vtk-可视化管线
VTK可视化管线:vtk渲染引擎实现图形图像的渲染,通过了很多步骤,在之前的程序中,我们使用了例如vtkCamera、vtkLight、vtkConeSource、vtkPropMapper等,都是与vtk渲染相关,vtk渲染引擎与vtk可视化管线是vtk中非常重要的两个模块。vtk渲染管线实际上就是用于获取数据,处理数据,在将数据给vtk渲染引擎渲染,最终显示。在vtk中,有很多已有的数...
2020-03-05 18:47:47
235
原创 VTK006_vtk-窗口共用&坐标系统
窗口共用: 窗口共用,实际上就是一个窗口中放入很多个Render,他们使用一个窗口,使用一个交互器,在之前的代码片段中,已有对这方面的简介。 窗口共用有很多地方,例如:“刺激战场”游戏里面一个组队时,可以分别对每个人物模型进行旋转,就可以通过多个Render来实现,当然实际上它并不一定这样实现的。下面代码中,创建四个模型,地球、圆柱、球体、立方体,他们位于不同的Rend...
2020-03-05 18:47:30
277
原创 VTK005_vtk-相机
相机介绍: 首先,这里的相机并不是我们生活中常说的相机,但也有类似的地方,在计算机图形学中,相机的位置焦点等参数实际上对应生活中人眼的位置和所看的点。无论是OpenGL还是VTK中,都有相机,当前使用的相机将决定我们看到的事物。 很多做三维设计的朋友都会知道,设计完成后,可以创建多个相机用于作品展示,我们选择相机,实际上也就是选择的我们眼睛的位置,从不同的空间位置查看作...
2020-03-05 18:47:16
249
原创 VTK004_vtk-灯光
VTK灯光:灯光介绍: 在生活中,我们能看见东西是因为有光照,光照分为很多类型,不同的光照会导致我们看见事物(看见的影像)也不同。同样的,光照是3D渲染中必备的因数之一(相机、事物也是)。 VTK中的灯光与现实的灯光类似,在生活中,光源形式千变万化,例如太阳光,可以看成是一个平行光源,手电筒可以看成聚光(锥形光),普通灯泡可以看成点光源。在vtk中,光源为vtkLi...
2020-03-05 18:46:55
403
原创 VTK003_vtk-交互&属性
VTK基础交互: VTK交互使用vtkRenderWindowInteractor,它将负责某个vtkRenderWindow窗口的监听,包括鼠标、键盘、时钟等消息,通过vtk中的Command/Observer设计模式进行处理。vtkRenderWindowInteractor会自动创建一个默认的vtkInteraactorStyle类对象(交互器样式)进行消息的处理,完成用户交互...
2020-03-05 18:46:33
403
原创 VTK002_vtk-HelloWorld
VTK_常用类: VTK中,有非常多的类,在实现HelloWorld程序中,主要使用几个类: 1、vtkRenderWindow: vtkRenderWindow继承与vtkWindow,也有子类,vtkRenderWindow用于创建一个窗口,这个窗口将承载vtk渲染器,呈现的窗口是图形用户界面中的一个窗口。窗口需要设置大小,添加渲染器等。...
2020-03-05 18:45:44
376
原创 VTK001_vtk-初识
VTK: VTK(Visualization ToolKit)是一个开源的可视化工具包,提供了3D计算机图形,图像处理和可视化软件系统。VTK支持多种可视化算法,包括标量、矢量、张量、纹理和体积算法,以及高级建模技术(隐式建模、多边形缩减、网格平滑、切割等),VTK是跨平台的,可以在windows,linux,mac,unix上运行。 VTK使用C++语言开...
2020-03-05 18:45:14
226
原创 OpenGL_003绘制第一个图形
OpenGL对象: 顶点数组对象:Vertex Array Object (VAO) 顶点缓冲对象:Vertex Buffer Object (VBO) 索引缓冲对象:Element Buffer Object (EBO)图形渲染管线: 在OpenGL中,任何事物都是存在于三维空间,但是显示在屏幕上,缺必须为二维像素点,OpenGL中一部分功能就在于此,将...
2020-03-05 18:43:58
265
原创 PoEdu_反汇编004_加法求值
加法求值: 这里,主要对int,long,short,float,double五个类型做加法求值,并且,加法分为三种情况:常量+常量,长量+变量,变量+变量。 通过观察反汇编当中的加法,来了解揭发求值过程的特性。测试代码如下:#include <iostream>int main(int argc, char* args[]){ // 常量 + 常量 //...
2018-07-07 23:49:37
896
原创 PoEdu_反汇编003_数据类型
数据类型: C/C++语言中,数据类型有很多,常用的:int、long、short、char以及他们的unsigned型。我们熟知,int、long都是占用32位(4字节)。short占16位(2字节)。int和long的范围为0x00000000~0x7FFFFFFF、0x80000000~0xFFFFFFFF。对应的unsigned型范围为:0x00000000~0xFFFFFFFF...
2018-07-07 18:14:13
234
原创 PoEdu_反汇编002_寄存器
寄存器: 上次,我们知道了eax、ebx、ecx、edx等,都是寄存器,寄存器实际上就是CPU中具有存储作用,存储速度极高的一个小内存(可以这么理解)。 硬盘,内存,高速缓存,寄存器,都是用于存储,是计算机中的四大存储单元,从左到右存储速度越来越高,价格也越来越贵,硬盘适合长时间大量存储,但速度较慢。内存速度相对较快,主要负责运行时保存数据。高速缓存主要是用于对内存中的数据进行...
2018-07-07 16:36:45
220
原创 PoEdu_反汇编001_初识
反汇编介绍: 反汇编,就是将目标代码转化为汇编代码的过程,也可以认为是把机器语言转化为汇编语言代码,底层语言转高程语言的意思,反汇编常用语软件破解(例如找到其注册机制,进行许可证破解)、外挂技术、病毒分析、漏洞分析等。 学习反汇编,对软件调试、漏洞分析、操作系统内核学习及理解高级语言代码都有很大的帮助。反汇编是一门本身简单,然而实际使用又非常复杂的课程。 学习反汇编,...
2018-07-06 22:07:13
369
原创 OpenGL_002创建窗口
创建窗口:工程配置: 我是用的是VS2013,根据情况配置一个Win32空项目,并配置glad和glfw的库目录。创建main.cpp#include <iostream>#include "glad/glad.h"#include "GLFW/glfw3.h"#pragma comment(lib, "opengl32.lib")#pragma comment(lib...
2018-03-31 14:59:04
237
原创 OpenGL_001入门
OpenGL是什么: 1:OpenGL包含了一系列可以操作图形,图像函数,然而,OpenGL并不是一个API。 2:OpenGL严格规定了每个函数如何执行,以及他们输出的值,其内部每个函数的实现是由OpenGL库的开发者决定的,OpenGL规范并没有规定实现细节,具体的OpenGL库允许实用不同的实现,只要功能与规范相匹配即可。 3:实际上,OpenGL库的开发者通常是显卡的生产...
2018-03-31 14:00:15
272
原创 Python字符串操作
Python字符串操作:1:去左右字符: 1:函数:strip,lstrip,rstrip 2:程序示例:#去掉首尾字符str = " strip 去空格 "str1 = str.strip()print(str1)#输出‘strip 去空格’str = " lstrip, rstrip "str2 = str.lstrip()str3 =
2017-12-05 19:39:27
586
原创 20171123Python07_循环和函数
循环和函数:1:循环练习:#登录系统''' 1:有三次登陆机会 2:登录失败会提示'''count = 3while count > 0: user = input('请输入用户名:') password = input('请输入密码:') count -= 1 if(user == 'admin' and password == 'ad
2017-12-04 18:46:00
192
原创 20171120WindowsPrj09_01Socket
Socket介绍:1:对于Socket,编程很简单,难点在于Socket里面的一些东西,里面涉及的一些概念。Socket概念: 1:TCP/IP:各种各样的电脑运行不同的操作系统,里面使用的信息是千变万化的,TCP/IP相当于一种统一,是一种协议族,里面包含了IP协议、ICMP协议、TCP协议、FTP协议,HTTP协议、POP3协议……,所有的电脑设备都会这些协议,都按照这些协议
2017-11-29 22:06:42
178
原创 MD5算法
MD5算法: 在网络传输中,为了保证传输信息的安全,通常会有信息摘要,信息摘要通常是通过一些算法来生成的,MD5算法就是其中一种。要了解MD5算法,我们需要从了解信息摘要的意义开始。信息摘要: 在网络数据安全传输中,信息摘要可以防止信息被篡改,例如:微信,支付宝,QQ的支付,信息被篡改的后果可想而知,因此,会有信息摘要确保传过来的数据是原始数据,没有被更改过。 信
2017-11-09 21:44:07
1662
1
原创 BitMap算法
Bit-Map算法简介:1:Bit-Map算法又名位图算法,其原理是,使用下标代替数值或特定的意义,使用这个位为0或者1代表特性是否存在。2:Bit-Map算法具有效率高,节省空间的特点,适用于对大量数据进行去重,查询等。应用举例: 例如,我们存储了一些整形数据:2,8,4,6,9,我们需要查询是否存储了3,那么,按普通的思路,我们需要将所有数据遍历一次,看是否有需要查找
2017-11-07 20:59:49
4453
1
原创 20171012WindowsPrj08_04IAT Hook封装
IAT Hook:IAT Hook注意点:1:在之前说的,在自己挂钩的函数(MyMessageBoxW)中,执行完自己的代码后,调用return MessageBoxW,这样会形成Hook的递归,导致程序一直在这里Hook。解决这个问题:在挂钩的时候,先将USER32.dll映射内存位置的MessageBoxW的地址记录下来,在调用MyMessageBoxW后,return的地方再接着记录
2017-10-12 21:09:33
265
原创 20171011WindowsPrj08_03IAT Hook
IAT Hook: IAT:就是一张函数导入表,DLL的加载分为动态加载和静态加载,静态加载是不需要指定DLL,它包含在PE结构中,里面指出了这个EXE需要使用哪些DLL名,DLL里面的那些函数。下面为PE结构表:如果看不清,可以将图片另存到自己电脑,然后打开看。PE结构:1:每个E和XE和DLL文件都有自己的PE头,里面包含了DOS头和PE头,PE头里面包含了NT头和O
2017-10-11 22:51:39
345
原创 20171003WindowsPrj08_01消息钩子
DLL:1:DLL(动态链接库)和常见的EXE是一样的,他们都是PE结构,DLL也是PE结构的,单是两者在使用上会有不同,DLL常为EXE的一个补充体,DLL的运行也需要内存,和EXE是一样的。在Windows,有部分的EXE也可以被加载,OCX(控件)等格式也是。2:使用DLL有如下优点: 1:扩展了应用程序的特性 2:简化了项目管理:项目设计的时候,简化项目管理
2017-10-03 22:09:49
196
原创 20170910WindowsPrj07_内存映射
内存映射: 内存映射实在大文件处理的时候使用的,其原理是将大文件直接拷贝到内存里面,然后直接访问,这样会比较快,如果文件太大,内存里面装不下,就一部分一部分地加载,读取,操作等等。直接文件操作:1:Win32API里面并没有读取一行的函数,因此,要读取一行,只能按照一定的逻辑自己做。因此,效率会比较低:#include "stdafx.h"#include #include
2017-09-10 17:51:48
253
VS工程无用文件删除器
2018-07-11
C/C++自动添加lib文件
2018-07-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人