三维矩阵变换
你可以使用一个4×4的矩阵将任何点变换到另一个点。下面的例子中,我们用一个矩阵对点$(x, y, z)$进行变化,产生了一个新的点$(x’, y’, z’)$:
最常用的变换包括:平移(translation),旋转(rotation)和缩放(scaling)。你可以将这些变换合并起来,组成一个矩阵,同时进行几种变换。
平移
将一个点$(x, y, z)$平移到另一个点$(x’, y’, z’)$:
旋转
将一个点$(x, y, z)$沿$x-$轴进行旋转,得到了一个新的点$(x’, y’, z’)$:
沿$y-$轴进行旋转:
沿$z-$轴进行旋转:
缩放
矩阵旋转
欧拉角旋转
偏航角:yaw
偏航角yaw
是绕$z$轴逆时针旋转$\alpha$,对应的旋转矩阵是
俯仰角: pitch
俯仰角pitch
是绕$y$轴逆时针旋转$\beta$,对应的旋转矩阵是
滚转角: roll
滚转角roll
是绕$x$轴逆时针旋转$\gamma$,对应的旋转矩阵是
刚体变换
这三个旋转矩阵合起来便可以表达一个刚体变换[[3]][Yaw, pitch, and roll rotations]
四元数旋转
四元数、欧拉角、旋转矩阵的优点和缺点
- 矩阵旋转
- 优点:
- 旋转轴可以是任意向量;
- 缺点:
- 旋转其实只需要知道一个向量+一个角度,一共4个值的信息,但矩阵法却使用了16个元素;
- 而且在做乘法操作时也会增加计算量,造成了空间和时间上的一些浪费;
- 优点:
- 欧拉旋转
- 优点:
- 很容易理解,形象直观;
- 表示更方便,只需要3个值(分别对应x、y、z轴的旋转角度);但按我的理解,它还是转换到了3个3*3的矩阵做变换,效率不如四元数;
- 缺点:
- 优点:
- 四元数旋转
- 优点:
- 可以避免万向节锁现象;
- 只需要一个4维的四元数就可以执行绕任意过原点的向量的旋转,方便快捷,在某些实现下比旋转矩阵效率更高;
- 可以提供平滑插值。
- 缺点:
- 比欧拉旋转稍微复杂了一点点,因为多了一个维度;
- 理解更困难,不直观;
- 优点: