FA:Formulas and Algorithm
描述三维空间中刚体旋转的三种常见方式:轴角表示(Axis-Angle)、固定角(Fixed Angles) 和 欧拉角(Euler Angles),虽然最终都用于表达同一个旋转操作,但它们的定义方式、几何意义、优缺点和应用场景各不相同。下面详细解释这三种方法的定义、优缺点及对比。

一、三种旋转表示方式的定义

1. 轴角表示(Axis-Angle)

定义:

用一个单位向量 n⃗=(nx,ny,nz), n=(nx​,ny​,nz​) 表示旋转轴,
用一个标量 θ 表示绕该轴逆时针旋转的角度(单位:弧度)。
合起来表示为一个三维向量:r⃗=θ⋅n⃗, r=θ⋅n,称为旋转向量(Rotation Vector)。

📌 例如:r⃗=(0,0,π),r=(0,0,π) 表示绕 z 轴旋转 180°。

几何意义:

任意三维旋转都可以等效为“绕某一根通过原点的轴旋转某个角度”——这是欧拉定理(Euler’s Rotation Theorem) 的结论。

2. 固定角(Fixed Angles / Space-fixed / Extrinisic Rotations)

定义:

将一个旋转分解为相对于固定坐标系(如世界坐标系)三个坐标轴的连续旋转。
旋转顺序很重要,例如常见的 ZYX 顺序:

  • 绕固定的 Z 轴旋转 yaw(偏航);
  • 绕固定的 Y 轴旋转 pitch(俯仰);
  • 绕固定的 X 轴旋转 roll(滚转)。

📌 注意:每次旋转都相对于原始的、不动的坐标系进行。

几何意义:

类似于“先整体绕地球北极转,再绕东-西轴抬头低头,最后绕前-后轴翻滚”。

3. 欧拉角(Euler Angles / Body-fixed / Intrinsic Rotations)

定义:

将一个旋转分解为相对于物体自身坐标系(随动坐标系)三个轴的连续旋转。
常见顺序如 ZYZ、ZYX 等。以 ZYX 为例:

  • 绕物体当前 Z 轴旋转 yaw;
  • 绕物体旋转后的新 Y 轴旋转 pitch;
  • 绕物体再旋转后的新 X 轴旋转 roll。

📌 每次旋转后,坐标轴也随之改变。

几何意义:

更贴近实际运动,比如飞机:先偏航 → 此时机身坐标系已变 → 再俯仰 → 坐标系再变 → 最后滚转。

💡 关键区别:
  • 固定角:绕固定坐标系轴旋转(extrinsic)。
  • 欧拉角:绕物体自身坐标系轴旋转(intrinsic)。
  • 轴角:一次绕某个轴旋转,不涉及顺序。

二、优缺点对比

特性 轴角(Axis-Angle) 固定角(Fixed Angles) 欧拉角(Euler Angles)
定义简洁性 高(一根轴+一个角) 中等(需指定顺序) 中等(需指定顺序)
几何直观性 数学直观(适合理论) 较强(相对于世界) 强(贴近物理运动)
❌ 万向锁(Gimbal Lock) ❌ 无 ✅ 有(如 pitch=±90°) ✅ 有(如 pitch=±90°)
插值能力 ⭐⭐⭐⭐☆(可转为四元数做SLERP) ⭐⭐☆☆☆(线性插值不自然) ⭐⭐☆☆☆(易出问题)
奇异性 仅在 θ=0 时轴方向不确定 在特定角度出现奇异 在特定角度出现奇异
转换到旋转矩阵/四元数 容易(Rodrigues 公式) 可转换,但依赖顺序 可转换,但依赖顺序
存储效率 高(3个数) 高(3个数) 高(3个数)
用户友好性 低(不易理解) 中(工程人员可用) 高(广泛用于航空、UI)
唯一性 多数情况下唯一(θ ∈ [0, π]) 不唯一(不同顺序结果不同) 不唯一(存在多组解)

1. 轴角(Axis-Angle)

优点:

  • 符合欧拉定理,物理意义明确。
  • 无万向锁问题。
  • 是构造四元数和使用 Rodrigues 公式 计算旋转矩阵的基础。
  • 适合旋转插值(通过四元数实现 SLERP)。

缺点:

  • 直观性差,普通人难以理解“绕 (0.7, 0.7, 0) 轴转 45°”是什么意思。
  • 当旋转角为 0 时,旋转轴方向任意(退化情况)。
  • 不能直接用于复合旋转(需转为矩阵或四元数)。

2. 固定角(Fixed Angles)

优点:

  • 所有旋转基于世界坐标系,便于与全局参考系对齐。
  • 在机器人路径规划、相机标定中便于描述“从世界坐标到物体坐标”的变换。
  • 避免了“随动轴”的复杂性。

缺点:

  • 存在万向锁(如绕 Y 轴转 90° 后,Z 和 X 轴对齐)。
  • 插值时可能出现非预期路径。
  • 与实际物体运动过程不完全一致(现实中物体通常是绕自身轴旋转)。

3. 欧拉角(Euler Angles)

优点:

  • 高度直观,广泛用于航空、航天、游戏开发(yaw-pitch-roll)。
  • 用户界面友好,易于调试和输入。
  • 分解清晰,便于分步控制(如控制无人机偏航角归零)。

缺点:

  • 存在万向锁:当第二个旋转角为 ±90° 时,第一个和第三个轴对齐,丢失一个自由度。
  • 旋转顺序依赖性强:ZYX ≠ XYZ,不同顺序结果不同。
  • 插值困难:直接线性插值会导致路径扭曲或抖动。
  • 万向表示不唯一:同一旋转可能对应多组欧拉角(如 0° 和 360°)。

四、实际应用建议

应用场景 推荐表示方式 原因
动画插值、姿态平滑过渡 轴角 → 四元数 支持 SLERP,路径最短且平滑
机器人运动学、视觉SLAM 轴角 或 四元数 无奇异性,便于数学处理
飞机/无人机姿态显示 欧拉角(RPY) 符合飞行员/工程师习惯
3D建模软件UI 欧拉角 用户易于理解和操作
从传感器读取姿态 ⚠️ 欧拉角(注意万向锁) 但内部计算建议转为四元数
构造旋转矩阵 轴角(Rodrigues)或 欧拉角 都可,轴角更紧凑

五、总结

方法 核心思想 是否有万向锁 是否适合插值 是否直观
轴角 一次绕轴旋转 ❌ 无 ✅ 适合(配合四元数) ❌ 抽象
固定角 绕固定坐标系三轴旋转 ✅ 有 ❌ 不适合 ✅ 较直观
欧拉角 绕物体自身坐标系三轴旋转 ✅ 有 ❌ 不适合 ✅ 很直观
🎯 最佳实践:

    存储和计算用四元数或轴角(避免奇异性);
    显示和交互用欧拉角(提高可读性);
    避免直接对欧拉角做线性插值。
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐