games101学习笔记01-向量与矩阵变换p3,p4
目录
一、向量
1.1点乘
表示 运算 几何意义 (向量方向远近、判断前后、投影距离)
1.2叉乘
表示 运算 几何意义 (判断内外,求法线)
二、矩阵变换
2.1二维矩阵变换
线性变换 平移变换 仿射变换
2.2齐次坐标下的二维矩阵变换
为什么用齐次坐标 齐次坐标下的二维矩阵变换 组合变换
2.3齐次坐标下的三维矩阵变换
三维旋转与欧拉角 万向节死锁
一、向量
1.1向量点乘
表示:a·b=|a|*|b|*cosθ,也等于x1x2+y1y2+z1z2;
另外,也可以用矩阵的形式表示向量点乘。

运算:点乘满足交换律结合律。
几何意义:
(1)求两个向量夹角cos,用两个方向向量的点乘可以直接得到cos。告诉我们两个向量方向接近或远离。cos越接近1两个向量越接近,越接近-1越远离。
如下的兰伯特光照模型就利用了这一点。通过物体表面法向量与光的反方向的远近,来计算某点的亮度。

(图片来自b站技术美术百人计划)
(2)投影:投影可以用来分解向量(一般点乘要分解方向上的单位向量)
(3)判断向前或向后。(跟方向点乘,大于0向前小于0向后)
1.2向量叉乘
表示:|axb|=|a||b|sinθ,方向符合右手定则
矩阵表示:

可以用矩阵表示。
右手坐标系:x x y=z;左手坐标系:x x y = -z。
下图为右手坐标系下的叉乘关系。

运算:叉乘不满足交换律,交换需加负号。
几何意义:
(1)求法线。任取平面两不平行向量求叉乘得法线
(2)判断左和右、内与外。在右手坐标系中,如果axb是正,那么b在a左侧。在右图中,如果ap、bp、cp分别在ab、bc、ca的左侧,就是在内部。

用向量点乘与叉乘,建坐标系并将向量p分解在三个轴上如下:

矩阵x向量永远是矩阵在左向量在右,而向量都是列向量。
二、矩阵变换
2.1二维矩阵变换
线性变换,包括旋转rotate、切变shear、缩放scale、翻转reflection等。在一般二维坐标中的线性变换的形式如下:

具体的变换矩阵将在介绍齐次坐标中给出。
值得一提的是,对旋转变换而言,矩阵的逆等于矩阵的转置,相当于移动-θ。也就是将下图中的θ替换成-θ。

平移变换
用向量加法实现。
仿射变换affine
即包含线性变换也包含平移变换。

然而,又要进行矩阵乘法又要进行向量相加,这种方式并不俭约。于是引入齐次坐标。
2.2齐次坐标下的二维矩阵变换
齐次坐标:比一般的坐标多出一个维度,(x,y)->(x,y,w)。w=1表示坐标,w=0表示向量。
为什么引入齐次坐标:无论线性变换还是矩阵变换都能用矩阵乘法完成,而且可以有效区分坐标和向量。
齐次坐标下的2D变换如下:

对比两种坐标的仿射变换:

逆变换:变换的逆操作,变换矩阵为原变换矩阵的逆。

对组合变换而言, 要用平移变换保证线性变换的中心在原点或者轴上,然后线性变换,然后再进行适当的平移变换。
组合变换交换顺序并不相等。
2.3齐次坐标下的三维矩阵变换
齐次坐标:

齐次坐标的仿射变换

三维变换与二维变换大同小异,只有旋转变换上稍有变化。 接下来只记录旋转的内容。
三维旋转
绕坐标轴旋转的变换矩阵如下:

旋转矩阵为正交矩阵:旋转的逆等于旋转的转置。
通过这三种变换,用以下的方式,理论上可以摆出任何的角度,如下图。这三个角称作欧拉角。


绕任意过原点轴旋转:

只要加上平移变换,就可以绕空间中任意轴旋转了。
万向节死锁:
在unity中也有欧拉角的概念,但是一般都转化成四元数进行处理。原因是使用欧拉角的万向节可能会产生死锁。
万向节旋转时,因为特殊的物理结构,最里层的轴旋转会带着外面的两层一起旋转,中层的轴旋转会带着外面的一层旋转。因此根据绕轴旋转的顺序不同而产生不同结果。

当最里和最外层不动,中间层旋转90度时,中间和最里层的平面会重合(如下图),也就是说,直接少了一个旋转方向。就是万向节死锁。
