三维空间的旋转表示

Reference

https://zh.wikipedia.org/wiki/%E6%AC%A7%E6%8B%89%E8%A7%92

https://www.cnblogs.com/driftingclouds/p/6540222.html

https://zh.wikipedia.org/zh-cn/%E9%99%80%E8%9E%BA%E5%84%80

游戏引擎架构 第四章

旋转表示方式

欧拉角

欧拉角由三个标量值组成: 偏航角, 俯仰角, 滚动角. 矢量形式为$\begin{bmatrix} \theta_\alpha & \theta_\beta & \theta_\gamma \end{bmatrix}$.

参考下图。設定xyz-軸為參考系的參考軸。稱xy-平面與XY-平面的相交為交點線,用英文字母(N)代表。zxz順規的歐拉角可以靜態地這樣定義:

  • α是x-軸與交點線的夾角,$[0,2\pi]$
  • β是z-軸與Z-軸的夾角,$[0,2\pi]$
  • γ 是交點線與X-軸的夾角。$[0,\pi]$

1543568588629

200px-Euler2a

优点

  • 只有三个标量, 而且都很容易视觉化
  • 围绕单轴的旋转也很容易插值, 只需要分别对某个标量插值即可

缺点

  • 对任意旋转不方便插值
  • 欧拉角会有万向节死锁(gimbal lock)的状况. 比如旋转$\frac{\pi}{2}$时, 三主轴的一个会与另一个主轴完全对齐. 比如绕x轴旋转$\frac{\pi}{2}$, y轴与z轴完全对齐, 就不能再单独绕原来的y轴旋转了, 因为绕y轴和绕z轴的旋转实际上完全等效.
  • 先绕那根轴旋转有差别

偏航角, 俯仰角, 滚动角

1543569640011

  • 沿着机身右方轴进行旋转,称为pitch,中文叫俯仰
  • 沿着机头上方轴进行旋转,称为Yaw,中文叫偏航
  • 沿着机头前方轴进行旋转,称为Roll,中文叫桶滚

陀螺仪工作原理

陀螺仪(英文:gyroscope),是基于角动量守恒的理论(指系统所受合外力矩为零时系统的角动量保持不变)设计出来的。陀螺仪主要是由一个位于轴心且可旋转的转子构成。 陀螺仪一旦开始旋转,由于转子的角动量,陀螺仪有抗拒方向改变的趋向。

Gyroscope_operation

这三个Gimbal环用不同的颜色做了标记,底部三个轴向,RGB分别对应XYZ。
假设现在这个陀螺仪被放在一艘船上,船头的方向沿着+Z轴,也就是右前方。

  • 现在假设,船体发生了摇晃,是沿着前方进行旋转的摇晃,也就是桶滚。由于转子和旋转轴具有较大的惯性,只要没有直接施加扭矩,就会保持原有的姿态。由于上图中绿色的活动的连接头处是可以灵活转动的,此时将发生相对旋转,从而出现以下的情形:
    桶滚平衡
  • 再次假设,船体发生了pitch摇晃,也就是俯仰。同样,由于存在相应方向的可以相对旋转的连接头(红色连接头),转子和旋转轴将仍然保持平衡,如下图:
    俯仰平衡
  • 最后假设,船体发生了yaw摇晃,也就是偏航,此时船体在发生水平旋转。相对旋转发生在蓝色连接头。如下图:
    偏航平衡

最终,在船体发生Pitch、Yaw、Roll的情况下,陀螺仪都可以通过自身的调节,而让转子和旋转轴保持平衡。

  • 红色连接头:可以给予一个相对俯仰的自由度。
  • 绿色连接头:可以给予一个相对桶滚的自由度。
  • 蓝色连接头:可以给予一个相对偏航的自由度。

陀螺仪的万向节死锁

4039616-97978e4b06dd8ac8

如果一个环先旋转了90度, 会导致陀螺中间的转子无法平衡. 这是因为原本三个环给予了旋转三个自由度, 而图中红色连接头提供了相对俯仰的自由度, 绿色和蓝色提供了两个相对偏航的自由度, 桶滚自由度丢失了.

欧拉角的万向节死锁

借用陀螺仪的万向节死锁理解, 可以将三个角度的旋转分别视为三个连接点的旋转角度, 我们发现, 假如如上图, 先红色连接点旋转90度, 之后绿色和蓝色的连接点, 它们两者中任何一个的旋转, 都会使另一个连接点旋转相同的角度, 这样就失去了一个自由度, 而且两个角度的旋转也是等价的.

$3\times 3$矩阵

优点

  • 不受万向节死锁影响, 而且可以独一无二表示任意旋转
  • 矩阵的逆(对于旋转矩阵, 是它的转置矩阵)就是旋转的逆

缺点

  • 不直观
  • 难以插值
  • 大量储存空间

轴角

轴角(axis-angle)由一个由单位矢量定义的旋转轴和一个标量定义的旋转角构成. 形式为$\begin{bmatrix} \mathbf a & \theta \end{bmatrix}$. 在右手(左手)坐标系中, 正旋方向由右手(左手)法则定义.

优点

  • 直观
  • 紧凑

缺点

  • 难以插值
  • 难以直接施于点和矢量

四元数

参考另一篇文章

优点

  • 四元数乘法能串接旋转
  • 四元数能直接施于点和矢量
  • 可以进行旋转插值(LERF or SLERF)

SQT变换

四元数只能表示旋转, 而$4\times 4$矩阵可以表示任意仿射变换(旋转, 平移, 缩放). 当四元数结合平移矢量缩放因子(对统一缩放而言是个标量, 对非统一缩放而言则是一个矢量), 就能得到一个$4\times 4$仿射矩阵的可行代替形式. 我们称之为SQT变换, 因为其包含缩放因子(scale), 旋转四元数(quaternion)和平移矢量(translation).

优点

  • 体积小
  • 容易插值
    • 缩放因子: LERF
    • 平移矢量: LERF
    • 四元数: LERF or SLERF

对偶四元数

还有一个数学对象可完整表示涉及旋转, 平移, 缩放的变换, 称为对偶四元数(dual quaternion). 它和普通四元数的区别在于四个分量为对偶数(dual number).

旋转与自由度

自由度(degree of freedom, DOF)是一个物理学的概念, 是指物体有多少个互相独立的可变状态(位置和定向). 一个三维物体在平移上有三个DOF, 在旋转上也有三个DOF.

我们注意到上面有那么多种旋转的表示方式, 但是它们的参数个数确不尽相同. 这是因为约束(constraint). 每一种表达方式都会对其参数加上一个或一个以上的约束, 这些约束标明参数间是非独立的. (改变某个参数会导致其他参数的改变, 以维持约束的正确性)

我们来看看每种旋转表达方式的参数, 自由度和约束的关系

  • 欧拉角: 3个参数-0个约束=3个DOF
  • 轴角: 4个参数-1个约束=3个DOF(轴矢量单位长度)
  • 四元数: 4个参数-1个约束=3个DOF(单位长度)
  • $3\times 3$矩阵: 9个参数-6个约束=3个DOF(行矢量和列矢量约束为单位长度)
文章目录
  1. 1. Reference
  2. 2. 旋转表示方式
    1. 2.1. 欧拉角
      1. 2.1.1. 偏航角, 俯仰角, 滚动角
      2. 2.1.2. 陀螺仪工作原理
      3. 2.1.3. 陀螺仪的万向节死锁
      4. 2.1.4. 欧拉角的万向节死锁
    2. 2.2. $3\times 3$矩阵
    3. 2.3. 轴角
    4. 2.4. 四元数
    5. 2.5. SQT变换
    6. 2.6. 对偶四元数
  3. 3. 旋转与自由度
|