上一章节讨论了矩阵的基本性质,其中提到了线性变换。什么是线性变换呢。在数学上如果满足下式,则矩阵对一个向量的变幻是线性的。
一般情况下线性变换为形如:F(a) = aM。根据之前向量和矩阵的性质,显然此式满足如上两个条件。是线性的。
零向量的任意线性变换结果仍是零向量。
显然上述性质不存在位置偏移的情况,所以线性变化不涉及位移,在下面的变化中任意轴都默认经过坐标系原点。
下面介绍一些矩阵的基本线性变换。
一、旋转
我们从2D坐标系中开始分析。
根据前面的章节我们知道反向构建线性变换的矩阵只需获得旋转后的基向量即可。所以我们只需计算出旋转后的基向量即可获得2D坐标系的旋转矩阵。
在给出3D坐标系旋转矩阵之前我们需要先约定旋转方向的正负。在左手坐标系中我们通过左手法则定义正方向的朝向。同样在右手坐标系中我们用右手法则定义正方向的朝向。
在左手坐标系中,我们举起左手。大拇指指向旋转轴的正方形。四指弯曲的方向即旋转的正方向。在右手坐标系中举起右手即可。左右手坐标系作为对方向的约定,但并不影响底层的计算,结果是完全一致的。
在3D坐标系中,如果我们仅绕x轴或y轴或z轴旋转,类比之前2D坐标系旋转矩阵的推导,很容易获得其旋转矩阵。(注:如之前所说遵循unity的常规约定使用列向量,矩阵以列为主。使用左手坐标系且矩阵以列向为主)
绕x轴:
绕y轴:
绕z轴:
接下来讨论更为广泛的在3D坐标系中绕任意轴旋转的旋转矩阵,任意轴认为经过原点:
另外两个基向量带入即可。我们可以分别得到: