什么是四元数?


50

什么是四元数,它们如何工作?另外,在2D平面上使用三个点可以获得什么优势?最后,什么时候使用四元数被认为是一种好习惯?



从历史上看,我认为四元数首先出现,然后点和叉积来自四元数。

2
我发现此动画文章非常有启发性
AShelly

在纯数学中,我相信四元数是3个复数,例如i²=j²=k²= ijk
Vinz243

四元数是平滑内插旋转的最佳方法。仅对旋转矩阵进行插值是行不通的,因为您不会总是得到旋转矩阵。插值欧拉角不会导致平滑旋转。因此,如计算机图形学或机器人技术所需要的那样,对动画进行动画处理,四元数是可行的方法。还有一个有用的,但不怎么常用的扩展,称为双重四元数,它使您可以表示变换和旋转
Tobias B

Answers:


43

数学上,四元数是具有4维的复数。但是在游戏开发中,四元数通常用于通过编码来描述3d空间中的旋转:

  1. 旋转轴(以3维向量的形式)
  2. 绕轴旋转多远

请注意,此信息是在四元数内部用正弦和余弦编码的,因此通常,您不应尝试显式设置或读取四元数的内部分量(xyzw)。这样很容易犯错误并获得无意义的结果。四元数数学库通常会提供对四元数进行运算的函数(例如,将其转换为Euler角或轴角或从Euler角或轴角转换为四元数),这确保了数学的正确性,并具有使代码易于阅读和理解的附带好处。

描述旋转的另一种方法是通过描述绕3个固定轴的x,y和z(又称Euler角)旋转多远,它只需要3个数字而不是4个,使用起来通常更直观。但是,欧拉角会遇到一个称为“ 万向节锁定”的问题:当您围绕一个轴旋转90°时,其他两个轴将变为等效。使用四元数时,不会发生此问题。

表达3d空间中旋转的另一种方法是使用4x4 变换矩阵。但是使用变换矩阵,您不仅可以旋转,而且可以缩放,平移和倾斜。如果只需要旋转,矩阵将是多余的,而四元数则是更快,更简单的解决方案。

此问题仅在3d空间中相关。在2D空间中,只有一个旋转轴。任何旋转都可以用单个浮点数或单个复数来表示,因此您没有这个问题。从理论上讲,您可以使用四元数在二维平面上表示旋转,其中轴指向(或指向)平面之外,但是通常这是多余的。


6
如果从四元数开始并以四元数结束,则万向节锁定在四元数中不是问题,当您具有可转换为欧拉角或向后倾斜的台阶时,万向节锁定会进入。
棘轮怪胎

2
四元数不是轴+角,它们是3个复数和一个小数位数。
晶体管

11
@ transistor09您认为你们都对吗?单位四元数的3分量虚部可以解释为沿旋转轴的单位矢量,由旋转角一半的正弦缩放。四元数单元的实部是旋转角一半的余弦。因此,您说得对,这不完全是一个角度轴格式,但确实可以将四元数的分量解释为一个轴,并可以将其测量为一个(非线性的)量度值。
DMGregory

2
您还可以提及四元数相对于旋转矩阵的优势:它们组合起来更快。当组合旋转时,与将矩阵相乘相比,将两个四元数相乘所需的操作更少。
恢复莫妮卡2015年

3
实际上,在2D空间中,复数是精确的模拟。将2D点与复数相乘,然后旋转它-实际上,它与通常的sin / cos旋转完全相同(如果您对复数的理解足够好,这将是显而易见的)。可以利用这一点,但是最后,2D图形今天并不需要花很多精力,因此除非您对使用复数感到非常自在(大多数人肯定不会使用复数),否则2D图形并不会给您带来太大的改进。 -事实证明,基于四元数的代码非常糟糕:D)。
a安2015年

13

这是添加到@Philipp的答案。

另外,在2D平面上使用三个点可以获得什么优势?

如果您只想平面上(即 z轴)旋转则实际上并不需要四元数。在这种情况下,您只需要偏航角,就可以利用绕着z轴连续旋转的事实。因此,您可以按任意顺序应用轮播。

如果您在非XY平面上旋转,则情况会有所不同。此旋转等效于围绕任意3D轴旋转。现在,您有两种选择:

  • 以3D旋转平面,使其与XY平面重合,然后偏航,然后向后变换,或者

  • 首先将旋转视为3D模式。

第二种选择更易于编码。正如@Philipp所说,四元数避免万向节锁定(如果避免中间RPY或轴/角度转换)。

最后,什么时候使用四元数被认为是一种好习惯?

每当进行3D旋转时,最好使用四元数。

例如:

  • Qt中。像slerp函数一样,使用Quats可以轻松在旋转之间进行插值。

  • ROS使用它们来转换机器人姿势。

  • 子弹动力学引擎中

  • 对于非常复杂的应用程序,请参见此处在经典3D力学中的用法。


只要有3D旋转,最好使用四元数。” 只是稍微过强。 几乎总是更好;在某些情况下,适当的替代方法是可行的。(作为不完美的一个例子,四元数的第n个根是多值的)
Yakk 2015年

1
四元数是一种商品,难以实施。如果您知道万向节锁,则可以在没有他们的情况下相处。
Hatoru Hansou 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.