3D数学基础
1.向量
1.1 定义
向量是有大小和方向的有向线段,向量没有位置,只有大小和方向
1.2 向量运算
1.2.1 向量的模
表示该向量距离原点的距离
1.2.2 单位向量
使该向量的方向不变,大小变为1
1.2.3 向量的点乘
表示向量a的模与向量b在向量a上的投影的乘积,其结果是一个标量,可以用来判断向量a与向量b是否在同一侧,还能计算这两个向量之间的夹角
如果a与b点乘的结果大于0,表示a与b之间的夹角在0到90度之间,a与b在同一方向
如果a与b点乘的结果等于0,表示a与b之间的夹角为90度,a与b垂直
如果a与b点乘的结果小于0,表示a与b之间的夹角在90到180度之间,a与b在相反方向
应用场景:把自己想象成一个剑士,你的周围都是怪物,如果你想去打与自己在同一侧而且距离最近的怪,这时就可以遍历自己周围所有的怪物,然后分别计算点乘和距离,找出点乘的结果大于0并且距离最小的怪物,再计算出你与该怪物的夹角,旋转过去,面向它,开始杀戮吧
1.2.4 向量的叉积
获取一个与向量a和向量b所在平面垂直的向量
向量a和向量b叉积的模:
表示以b的模为底、a的模乘以sinθ为高的平行四边形的面积
应用场景:我首先想到的是3D里面的法线,也不知道对不对,以后玩OpenGL的时候再说
2. 矩阵
2.1 线性变换
a为一个行向量,M为一个变换矩阵,那么行向量a可以经过矩阵M的变换以后得到一个新的行向量,在3D中,如果该变换矩阵为旋转矩阵,则意味着对原来的物体进行了旋转操作,如果该矩阵为缩放矩阵,则意味对原物体进行了缩放操作等等
2.2 变换矩阵
2.2.1 旋转矩阵
二维平面旋转矩阵:
三维空间旋转矩阵(左手坐标系):
绕x轴旋转:
绕y轴旋转:
绕z轴旋转:
2.2.2 缩放矩阵
二维平面缩放矩阵:
三维空间缩放矩阵:
2.2.3 正交投影矩阵
二维平面正交投影矩阵:
投影到x轴:
投影到y轴:
三维空间正交投影矩阵:
投影到xy平面:
投影到xz平面:
投影到yz平面:
2.2.4 镜像矩阵
二维平面镜像矩阵(任意轴):
三维空间镜像矩阵(任意平面):
2.2.5 切变矩阵
二维平面切变矩阵:
x轴方向发生切变(y值不变,影响x的值),s为切变量:
y轴方向发生切变(x值不变,影响y的值),s为切变量:
三维空间切变矩阵:
xy平面发生切变(z值不变,影响x和y的值),s和t分别为不同轴向上的切变量:
xz平面发生切变(y值不变,影响x和z的值),s和t分别为不同轴向上的切变量:
yz平面发生切变(x值不变,影响y和z的值),s和t分别为不同轴向上的切变量:
2.3 行列式的几何意义
二阶方阵行列式:表示这两个二维向量(水平方向)所围成的平行四边形的面积
三阶方阵行列式:表示这三个三维向量(水平方向)所围成的立方体的体积
2.4 矩阵的逆的几何意义
某个矩阵进行旋转、缩放等线性变换之后,如果对变换结果不满意,此时可以使用矩阵的逆进行撤销操作,使其回到最初的状态
2.5 齐次矩阵
如果我们给行向量增加一列,给变换矩阵增加一行和一列,然后再相乘,如下所示:
由结果可以看出,尽管我们把行向量和变换矩阵都给扩大了一维,但是对最终的变换结果没有任何影响,利用这一性质,我们只需稍作修改就能在进行变换的同时进行平移,如下所示:
平移矩阵:
3. 欧拉角
3.1 欧拉角的组成
heading角(yaw角):绕y轴旋转的旋转角(左手坐标系)
pitch角:绕x轴旋转的旋转角(左手坐标系)
bank角(roll角):绕z轴旋转的旋转角(左手坐标系)
3.2 万向锁
一旦选择pitch角为正负90度,就被限制在只能绕垂直轴旋转
4. 四元数
绕任意轴旋转的四元数表示方法:
网友评论