欧拉角(Euler)和四元数(Quaternion)

欧拉角-Euler

欧拉角是三个角度参数,它们描述了一个物体围绕三个主轴X、Y和Z顺序旋转的情况。三个角分别对应于偏航(Yaw)、俯仰(Pitch)和翻滚(Roll)。

  • 偏航(Yaw):绕Y轴的旋转,通常表示对象的左右转向。
  • 俯仰(Pitch):绕X轴的旋转,通常表示对象的上下倾斜。
  • 翻滚(Roll):绕Z轴的旋转,通常表示对象的侧倾。

使用欧拉角进行旋转操作比较直观,并且容易理解。然而,它们有一个著名的问题,即万向锁(Gimbal Lock),这是由于旋转顺序导致旋转自由度的丧失所引起的现象。

四元数- Quaternion

四元数是一种复数的扩展,用于在三维空间中表示旋转。

四元数有四个分量:一个实部和三个虚部,通常写为 w, x, y, z 或 x, y, z, w 的形式。

与欧拉角相比,四元数有几个优点:

  • 不受万向锁的影响:四元数可以避免万向锁的问题,因此在动画插值时更加稳定。
  • 更适合插值:四元数之间的插值(如球面线性插值,SLERP)更为平滑且计算效率更高,在实现平滑动画和相机运动时特别有用。
  • 计算更高效:四元数在某些情况下比使用3x3矩阵或者4x4矩阵的旋转表示更节省内存和计算资源。

在四元数中,w 是实部,而 x、y 和 z 分量构成了四元数的虚部。四元数通常表示为
一般式

复制代码
 q = w + xi + yj + zk
 i²=j²=k²=ijk=−1

其中 ( i )、( j ) 和 ( k ) 是四元数代数中的基本单位。
有序对

复制代码
q=[s, v]或[s,xi+yj+zk]s,x,y,z∈R
我们可以理解为s表示的实部,向量 v 表示的就是三维空间

四元数用于三维空间中的旋转,其优点包括避免万向锁(Gimbal Lock)和提供平滑的插值(比如球面线性插值,SLERP)。在旋转的上下文中,四元数的 w 分量和虚部分量 x、y 和 z 一起工作来定义旋转的轴和角度。实际上,一个单位四元数(长度或范数为1的四元数)可以表示为:

q = \\cos(\\frac{\\theta}{2}) + (xi + yj + zk) \\sin(\\frac{\\theta}{2})

这里,( x, y, z ) 定义了旋转轴的方向,而 ( \theta ) 是围绕该轴的旋转角度。w 分量,即 ( \cos(\frac{\theta}{2}) ),提供了关于旋转角度大小的信息。当四元数的范数为1时,它被称为单位四元数,才能表示空间中的旋转。

在图形和游戏编程中,四元数不直接与可视对象的属性对应,而是通过内部计算来影响对象的方向。因此,w 分量通常由程序员以外的人看不到,但它在幕后进行旋转运算时非常重要。

关系

在实际编程实践中,开发者可能会以欧拉角的形式指定旋转,但内部系统会将它们转换成四元数来进行计算。例如,在Three.js中,每个Object3D对象都有两个属性:.rotation(一个包含欧拉角的Euler对象)和.quaternion(一个Quaternion对象)。当你设置.rotation时,其内部会同步更新.quaternion,反之亦然。这样,你可以使用最直观的方式来设定旋转,同时保留四元数的所有计算优势。

在Three.js等框架中,通常使用四元数来处理旋转,以避免万向锁并利用四元数进行插值和其他旋转相关的操作。当你直接设置一个对象的.rotation属性时,内部实际上是在更新四元数(.quaternion),从而完成旋转的设置。

相关推荐
Navigator_Z2 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode
CCblandy2 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
YangYang9YangYan3 小时前
2027供应链计划校招:数学与应用数学专业如何把预测模型讲成业务决策?
人工智能·sql·算法
jsjzsl24 小时前
递归自改进系统(RSI)的本质是自发对称破缺:智能爆炸有界—— AI研发切记盲目投入
人工智能·python·算法
程序员清风4 小时前
最短路径算法:BFS、Dijkstra 与 Floyd
java·算法·宽度优先
梦帮科技4 小时前
Kali Linux Scapy 畸形报文构造学——深度解剖非法 TCP Flags 与反常序列号
linux·爬虫·神经网络·算法·数学建模·系统架构·模拟退火算法
171320330计算机毕设编程5 小时前
计算机毕业设计 基于YOLO改进算法的车辆特征识别系统设计与实现--lw
java·大数据·python·sql·算法
姜鱼问生5 小时前
Nginx gzip 压缩:一个配置让页面加载快 3 倍
后端·算法·架构
不会就选b5 小时前
算法日常・每日刷题--<动态规划>23
算法·动态规划