跳转到内容

游戏开发指南/理论/数学/四元数

50% developed
来自维基教科书,开放世界中的开放书籍

四元数用于绕多个旋转轴旋转几何体和点。它们存在于四个维度中,因此具有四个部分:w、x、yz。由于 x、yz 相互关联且类似,人们有时使用另一个字母来代表所有三个,v 是常见的表示。要表示它们,您应该将它们存储在 4 维 向量 中,如下所示:. 四元数用作 欧拉角 的替代方案。

四元数的优点[1]

  • 没有万向节锁死
  • 插值平滑且直接
  • 计算简单

四元数的基本创建

[编辑 | 编辑源代码]

因此,如果您选择了一些您想围绕其旋转几何体的单位长度 3D 向量 () 以及您想旋转几何体的度数 (),然后创建一个旋转四元数 ().

通常有两种形式来表示四元数,简写和长写。在简写表示法中,它以 wv (x、yz 的组合) 表示。

这可以使用 w、x、yz 在长写表示法中表示

其中[2]

如果四元数没有旋转,那么它的值为[3]

[编辑 | 编辑源代码]

这 4 个分量(**w, x, y** 和 **z**)可以分解成一个实数和三个虚数

其中 是虚数,使得 。由此,您可以得出以下结论


四元数的逆

[编辑 | 编辑源代码]

求逆一个四元数,只需将xyz 分量乘以-1

四元数的乘法

[编辑 | 编辑源代码]

当将两个四元数相乘时,顺序很重要)。

乘积定义为[4]


Clipboard

待办事项
添加并理解语句:(rotationQuaternion*pointQuaternion)*conjugateQuaternion

研究:

[此处可见]


球面线性插值 (SLERP)

[编辑 | 编辑源代码]

这是在两个四元数之间逐步插值的方法,例如获得两个四元数之间的中点(或其他点)。

四元数的上标表示法

[编辑 | 编辑源代码]

在进行 SLERP 之前,您需要理解四元数的指数表示法。

如果您有一个四元数 a,并且您使用指数表示法将其提升到 t 次方,这意味着它将按指数 t 缩放四元数内部的角度。由于这仅仅是缩放所有角度,因此这意味着四元数的大小 () 仍然是 1

指数表示法的简短表示法

[编辑 | 编辑源代码]

指数表示法的长表示法

[编辑 | 编辑源代码]

SLERP 方程

[编辑 | 编辑源代码]

如果您的第一个四元数是 q,第二个四元数是 r,并且您想找到它们之间的一个点 (p),它位于从 qrt 百分比处,其中 0 ≤ t ≤ 1。

最终方程定义为[5]

[编辑 | 编辑源代码]

YouTube

维基百科页面

维基教科书

参考文献

[编辑 | 编辑源代码]
华夏公益教科书