一、3D变换
这组三维坐标变换与可用于二维变换的坐标变换非常相似,并在表 2.2 中进行了总结。 与在 2D 中一样,这些变换形成了一组嵌套的组。
1、平移(Translation)
3D 平移可以写成或 其中 I 是 () 单位矩阵。
2、旋转+平移(Rotation + Translation)
也称为3D刚体运动或3D欧几里得变换或SE(3),它可以写成或,其中是且 的正交旋转矩阵。请注意,有时使用其中是旋转中心(通常是相机中心)来描述刚性运动会更方便。
参数化3D旋转是一项不简单的任务,在下面更详细地独立介绍。
3、缩放旋转(Scaled rotation)
3D相似度变换可以表示为其中是任意比例因子。 也可写成,这种变换保留了线和平面之间的角度。
4、仿射变换(Affine)
仿射变换写为,其中 A 是任意矩阵,即,,平行线和平面在仿射变换下保持平行。
5、透视变换(Projective)
3D透视变换也称单应性,在齐次坐标上运行,,其中是任意 齐次矩阵。与在 2D 中一样,必须对生成的齐次坐标 进行归一化以获得非齐次结果。 透视变换保留直线(即,它们在变换后保持直线)。
二、3D旋转
2D和3D坐标转换之间的最大区别在于3D旋转矩阵的参数化并不直接,因为存在几种不同的可能性。
3D 旋转与 2D 旋转不同。 在 3D 旋转中,我们必须指定旋转角度以及旋转轴。 我们可以围绕 X、Y 和 Z 轴执行 3D 旋转。 它们以矩阵形式表示如下:
下图解释了围绕各个轴的旋转
1、欧拉角
3D 中的旋转可以表示为三个角度,这些角度指定了三个连续应用于 X、Y 和 Z 轴的旋转。但您也可以将相同的旋转表示为连续应用于 Z、Y 和 X 轴的三个角度。这些角称为欧拉角或泰特-布赖恩角。在原始的欧拉角公式中,旋转是通过围绕 Z、X 和 Z 轴(或就此而言 YXY 或 ZYZ)的连续旋转来描述的。当旋转被指定为围绕三个不同轴(例如 XYZ)的旋转时,它们应该被称为 Tait-Bryan 角,但流行的术语仍然是欧拉角,因此我们也将它们称为欧拉角。
2、轴/角度(指数扭曲)
在三维旋转理论中,以Olinde Rodrigues命名的 Rodrigues 旋转公式是一种在给定轴和旋转角度的情况下在空间中旋转矢量的有效算法。通过扩展,这可用于转换所有三个基向量,以根据轴角表示计算SO(3)中的旋转矩阵,即所有旋转矩阵的组。换句话说,Rodrigues 公式提供了一种算法来计算来自so (3)的指数映射,即李代数的SO(3),到SO(3)没有实际计算完整的矩阵指数。
3、单位四元数
单位四元数表示与角度/轴表示密切相关。 单位四元数是单位长度的四向量,其分量可以简写为 或 。单位四元数存在于单位球面上,对映(相反符号)四元数 q 和 -q 表示相同的旋转。除了这种模糊性(双重覆盖),旋转的单位四元数表示是唯一的。此外,表示是连续的,即随着旋转矩阵不断变化,您可以找到连续的四元数表示,尽管四元数球上的路径可能会在返回“原点”之前一直环绕 . 由于下面给出的这些和其他原因,四元数是计算机图形中姿势和姿势插值的一种非常流行的表示(Shoemake 1985)。
4、那种表示更好?
3D旋转表示的选择部分取决于应用程序。轴/角度表示是最容易的,因此不需要对参数进行任何额外的约束(无需在每次更新后重新归一化)。 但如果角度以度数表示,则更容易理解姿势(例如,绕 x 轴扭转 90°),也更容易表达精确的旋转。 当角度为弧度时,对 的导数 可以很容易地计算。
另一方面,如果您想跟踪平稳移动的相机,四元数会更好,因为表示中没有不连续性。 在旋转之间进行插值和链接刚性变换也更容易。