
欧拉角
- 欧拉角 是将旋转分解成三个相互垂直的分量,分别操作。三个分量分别是 heading、pitch、bank(指的是惯性到物体坐标系)。还有一种常用的名字 roll、pitch、yaw,与heading、pitch、bank顺序相反(物体到惯性坐标系),
- 先后次序不重要
- 欧拉角 优缺点
- 优点
- 使用容易
- 简洁的表达式
- 任意三个数都合法
- 缺点
- 给定方位的表达式不唯一(360周期倍结果一致,数值不同。pitch135度
等价于heading 180,pitch45, 再bank 180),著名
万向锁(至今没有简单的解决方案) - 两个角度间的插值困难()
- 给定方位的表达式不唯一(360周期倍结果一致,数值不同。pitch135度
等价于heading 180,pitch45, 再bank 180),著名
- 优点
- 限制 heading和bank在(-180, +180)之间, pitch 在(-90, 90)
四元数
各种方法比较
任务/性质 矩阵 欧拉角 四元数 在坐标系间旋转点 能 不能(需要转换到矩阵) 不能(需要转换到矩阵) 连接或增量旋转 能,比四元数慢,还需要小心矩阵蠕变的情况 不能 能,比矩阵快 插值 不能 能,遭遇万向锁和其他问题 Slerp 提供平滑插值 难易程度 难 易 难 储存 9个数 3个数 4个数 变换唯一性 唯一 不唯一,多种或者无数种 不唯一,有两种,他们相互为负 可能导致非法 矩阵蠕变 合法 可能出现误差累计,从而产生非法四元数 各种方法之间的转换
欧拉角到矩阵
H、P、B分别为heading、pitch、bank的旋转矩阵,他们分别绕 y,x,z左手法则旋转。设 heading、pitch、bank 旋转角分量分别是 h、p、b则 旋转矩阵为 反向操作,
欧拉角——> 矩阵
- 惯性——>物体
\[ H = R_y(-h)= \begin{bmatrix} \cos(-h)& 0& -\sin(-h)\\ 0& 1& 0\\ \sin(-h)& 0& \cos(-h) \end{bmatrix}= \begin{bmatrix} \cos(h)& 0& \sin(h)\\ 0& 1& 0\\ -\sin(h)& 0& \cos(h) \end{bmatrix} \]
\[ P = R_x(-p)= \begin{bmatrix} 1& 0& 0\\ 0& \cos(-p)& \sin(-p)\\ 0&-\sin(-p)& \cos(-p) \end{bmatrix}= \begin{bmatrix} 0& 1& 0\\ 0&\cos(p)& -\sin(p)\\ 0& \sin(p)& \cos(p) \end{bmatrix} \]
\[ B = R_z(-b)= \begin{bmatrix} \cos(-b)& \sin(-b)&0\\ -\sin(-b)& \cos(-b)&0\\ 0& 0& 1 \end{bmatrix}= \begin{bmatrix} \cos(b)& -\sin(b)&0\\ \sin(b)& \cos(b)&0\\ 0& 0& 1 \end{bmatrix} \]
\[ M_{惯性\rightarrow物体} = HPB =\begin{bmatrix} \cos(h)& 0& \sin(h)\\ 0& 1& 0\\ -\sin(h)& 0& \cos(h) \end{bmatrix}\begin{bmatrix} 0& 1& 0\\ 0&\cos(p)& -\sin(p)\\ 0& \sin(p)& \cos(p) \end{bmatrix}\begin{bmatrix} \cos(b)& -\sin(b)&0\\ \sin(b)& \cos(b)&0\\ 0& 0& 1 \end{bmatrix} \]
\[ =\begin{bmatrix} \cos(h)\cos(b) + \sin(h)\sin(p)\sin(b)& -\cos(h)\sin(b) + \sin(h)\sin(p)\sin(b)& \sin(h)\cos(p)\\ \sin(b)\cos(p) & \cos(b)\sin(p) & -\sin(p)\\ \sin(h)\cos(b) + \cos(h)\sin(p)\sin(b)& \sin(b)\sin(h) + \cos(h)\cos(p)\cos(b)& \cos(h)\cos(p)\\ \end{bmatrix} \]
物体——>惯性
矩阵 ——> 欧拉角
四元数 ——> 矩阵
矩阵 ——> 四元数
欧拉角 ——> 四元数
四元数 ——> 欧拉角
代码实现 EulerAngles、Quaternion、RotationMatrix、Matrix4x3
- todo