Appearance
4.4.2 中旋转的表示
空间旋转是绕着一个轴 (所谓旋转轴) 实现的. 旋转轴通过原点, 由 (在轴上的) 方向向量
等式
意味着向量
并且 (4.130a) 等价于
注 有必要将空间变换与下列变换加以区分:
a) 几何变换, 即当几何对象相对于一个固定的坐标系被变换;
b) 坐标变换, 即对象固定, 同时坐标系相对于对象被变换 (参见第 307 页3.5.4).
现在几何变换是用四元数处理的.
4.4.2.1 物体绕坐标轴的旋转
在笛卡儿坐标系中轴是由基向量定向的. 绕
物体的旋转与坐标系的旋转 (参见第 285 页 3.5.3.3, 3.) 间的关系是
注 齐次坐标中旋转矩阵的表示在第 314 页 3.5.4.5 中给出.
4.4.2.2 卡丹角
每个绕通过原点的轴的旋转
第一次旋转是绕
轴,旋转角为 , 第二次旋转是绕
轴,旋转角为 , 第三次旋转是绕
轴,旋转角为 .
角 称作卡丹角. 于是旋转矩阵是
优点
非常通用的旋转表示,
清晰的结构. 缺点
旋转的顺序是重要的, 即一般地,
表示不唯一,因为
. 对连续实施的旋转不适用 (如动画).
可能发生常平架锁定 (一个轴旋转
成为另一个轴). 常平架锁定情形:绕
轴旋转 ,
可见失去了一个自由度. 在实际应用中, 这可能引起难以预料的运动.
注 应该了解的是: 卡丹角有时被称为欧拉角, 但在文献中它们的定义可能是不同的 (参见第 289 页 3.5.3.6).
4.4.2.3 欧拉角
欧拉角
第一次旋转是绕
轴,旋转角为 , 第二次旋转是绕
轴的象,旋转角为 , 第三次旋转是绕
轴的象,旋转角为 .
旋转矩阵是
(4.134b)
4.4.2.4 绕任意零点轴的旋转
绕标准化向量
(1) 按照 (4.135a) 应用
(2) 按照 (4.135b) 应用
(3) 应用
旋转
(4)
(5)
最后, 合成矩阵是
(4.135g)
矩阵
在这些公式中向量
其中
优点
是计算机绘图学中的 “标准表示”,
不必确定卡丹角,
不会发生常平架锁定.
缺点
- 不适用于动画 (即旋转的插值).
4.4.2.5 旋转和四元数
如果将 (4.135f) 中的单位向量
(4.137a)
其中
特别地,旋转矩阵的行是向量
推论:
旋转矩阵可以借助四元数
确定. 在四元数乘法的意义下,并且将
等同于纯四元数集 ,对于旋转向量 , 有 .
对于每个单位四元数
并且共轭四元数对应于逆旋转:
绕轴
刻画这个旋转的四元数是
还有
可类似地确定另外两列:
4.4.2.6 四元数和卡丹角
用卡丹角给出的旋转矩阵 (参见第 395 页 (4.133a, 4.133b)) 恰为单位四元数
(4.140b)
比较矩阵元素可得
一般地, 解并不唯一, 这是典型的三角问题. 然而, 可以通过定义域的讨论得到角的唯一性.
反之, 从旋转矩阵容易得到单位四元数:
因为
其他分量是
设旋转矩阵如下:
(1) 确定卡丹角: 依据上述公式
(2)确定产生这个旋转的单位四元数:
所以
(最小可能的) 角是
(3) 确定
注 在计算 (4.141e) 中的分量时,当
如果
计算法则 由这些事实可推出下列计算法则:
- 如果
,并且 ,那么 的绝对值最大,所以
- 如果
,并且 ,那么 的绝对值最大,所以
- 如果
,并且 ,那么 的绝对值最大,所以
因为卡丹角定义绕对应轴的旋转, 所以我们可以发现下列表中给出的配置关系. 于是旋转
对应于单位四元数
旋转 | 卡丹角 | 绕轴 | 四元数 |
- 如果已知卡丹角是
,那么刻画这个旋转的四元数可用下列方式确定:
最终结果与 399 页给出的是一致的:
4.4.2.7 算法的有效性
为估计算法的有效性, 我们定义标准运算, 而更复杂的运算都源于这些运算. 关于与其他方法细致而复杂的比较, 可见 [4.26].
令
- M: 乘法的次数,
- S: 引入标准函数的次数,如三角函数,是由相当次数的乘法、除法和加法的
合成.
运算 | A | M | D | S | C | |
四元数化为矩阵 | 12 | 12 | ||||
矩阵化为四元数 | 6 | 5 | 1 | 1 | 1 | |
矩阵化为四元数 | 6 | 5 | 1 | 1 | 3 |
向量的旋转 | A | M | 注 |
用旋转矩阵 | 6 | 9 | |
用单位四元数 | 24 | 32 | 正规四元数乘法 |
用单位四元数 | 17 | 24 | 快速四元数乘法 |
用单位四元数 | 18 | 21 | 转换为旋转矩阵 |
旋转 | A | M | 注 |
用旋转矩阵 | |||
用单位四元数 | 24n | 32n | 正规四元数乘法 |
用单位四元数 | 17n | 24n | 快速四元数乘法 |
用单位四元数 | 转换为旋转矩阵 |
两个旋转的合成 | A | M |
用旋转矩阵 | 18 | 27 |
用单位四元数 | 12 | 16 |
总结 仅当旋转是一个接一个地进行, 基于四元数的算法才较快. 这主要出现在动画片的计算机绘图 (即旋转的逼近) 中.