旋转矩阵、欧拉角和四元数是描述三维旋转的三种主要方法,各有其特点和应用场景。以下是它们的对比及转换关系的总结:
1. 旋转矩阵
-
定义:3×3正交矩阵,行列式为1,表示线性变换。
-
优点:
-
直观表示坐标变换。
-
可与其他变换(平移、缩放)组合为4×4齐次矩阵。
-
无奇异性(无万向节锁)。
-
-
缺点:
-
冗余参数(9个参数,仅3自由度),需正交化维护。
-
数值误差积累可能导致矩阵非正交。
-
-
示例:
- 绕Z轴旋转θ的矩阵:
- 绕Z轴旋转θ的矩阵:
2. 欧拉角
-
定义:三个角度(如yaw、pitch、roll),按特定顺序(如ZYX)绕轴旋转。
-
优点:
-
直观,易理解,适合用户输入。
-
仅需3个参数,存储高效。
-
-
缺点:
-
万向节锁:当某轴旋转90°时丢失自由度。
-
插值困难,旋转顺序影响结果。
-
-
示例:
- ZYX顺序:先绕Z轴(偏航),再绕Y轴(俯仰),最后绕X轴(翻滚)。
3. 四元数
-
定义:超复数形式 q=w+xi+yj+zk,单位四元数表示旋转。
-
优点:
-
无万向节锁,插值平滑(如Slerp)。
-
计算高效,组合旋转为四元数乘法。
-
避免冗余和数值误差。
-
-
缺点:
- 不够直观,需维护单位长度。
-
示例:
- 绕单位轴 u 旋转θ的四元数:
- 绕单位轴 u 旋转θ的四元数:
转换方法
欧拉角 ↔ 旋转矩阵
按欧拉角顺序(如ZYX)组合基本旋转矩阵:
分解矩阵元素求解角度时需注意奇异性(如俯仰角为±90°时)。
四元数 ↔ 旋转矩阵
四元数 q=(w,x,y,z) 对应矩阵:
四元数 ↔ 欧拉角
通常通过旋转矩阵中转,或按顺序组合单个轴旋转的四元数:
应用场景
-
欧拉角:用户界面、简单动画(直观调整角度)。
-
四元数:复杂旋转插值(如相机平滑转向)、避免万向节锁。
-
旋转矩阵:图形API(如OpenGL)、与其他变换组合。
总结
-
直观性:欧拉角 > 旋转矩阵 > 四元数。
-
计算效率:四元数 > 旋转矩阵 > 欧拉角。
-
稳定性:四元数 ≈ 旋转矩阵 > 欧拉角(万向节锁)。
根据需求选择:交互设计用欧拉角,引擎底层用四元数,图形管线用矩阵。