zhouqijie

一、旋转表达方式

1、欧拉角

欧拉角的优势是轻量直观(3个浮点数)。

欧拉角仅对于单轴旋转容易插值,但是任意方向旋转则不能轻易插值。

如果一个物体是按xyz顺序旋转的并且初始方向就是已经绕y旋转了90度,就会出现万向节死锁。三轴中的两个轴完全对齐,旋转x和旋转z轴等效,丧失了一个自由度。

旋转先后次序和旋转方式对结果是有差别的。并且区分动态欧拉角和静态欧拉角。

2、矩阵

矩阵是最有效的旋转表达方式。独一无二地表示任何旋转且不受万向节死锁影响。

4x4矩阵更是可以用来表示仿射变换。

3、轴角

轴角的优点也是直观轻量直观。

4、四元数

使用四元数优势很多。

  1. 能串接多个旋转。
  2. 能轻易地进行插值。
  3. 比较轻量只需四个浮点数。

*5、SQT变换

SQT变换即四元数结合缩放因子和平移矢量。(SQT = [ s q t ])

SQT是4x4仿射矩阵的替代形式,只需要10个浮点数存储,并且方便插值。

*6、对偶四元数

对偶四元数也可以完整表示旋转平移缩放。对偶四元数和四元数的区别是对偶四元数的4个分量不是实数而是对偶数。

*二、旋转和自由度

自由度是指物体有多少个相互的独立的可变状态。无约束的3D物体拥有三个平移自由度和三个旋转自由度。

自由度$N_{DOF} = N_{参数} - N_{约束}$

欧拉角:3参数

四元数:4参数 - 1约束

(约束:四元数限制为单位长度)

轴角:4参数 - 1约束

(约束:轴矢量限制为单位长度)

3x3矩阵:9参数 - 6约束

(约束:三个列向量和三个行向量都为单位长度)

三、旋转表达方式的转换总结

欧拉角转换矩阵:

轴角转换矩阵:

四元数转换矩阵: