人们为什么使用四元数?


15

我已经将它们用作黑匣子已有一段时间了,我只是在学习数学,但我想对此问题给出一些明确的答案。

到目前为止,我个人遇到的唯一好处是能够在两个角度之间进行SLERP-要用向量实现相同的效果,您需要进行一些麻烦的工作(本质上将0和2PI链接在一起)。


SLERP不只是两个角度之间的插值:它也可以很容易地用矩阵完成。它可以在两个任意方向之间插值,这在用矩阵完成时要复杂得多。
Calmarius

Answers:


23

四元数优雅地解决了一些问题:

  • 它们像轴角表示一样紧凑(4个标量值)
  • 它们很容易在矩阵表示之间来回转换
  • 插补从任何角度到终点都可以进行,不需要特殊的套管
  • 他们从不表现出万向节锁定

您可以使用其他表示法解决这些问题,但是四元数非常适合其算法的简单性和性能。


1
这正是我在寻找的东西!
SirYakalot

@Kai Interpolation works from any start to end angle without special casing,实际上是一个特例,当它们不在超球面的同一个半球上时,这实际上是您必须考虑的特例,因为总是有2个方向插值到目标,并且您要选择正确的人
Maik Semder'Feb

2
@Kai- They never exhibit gimbal lock不太正确。他们可以相乘q(Xaxis, 0) * q(YAxis, 90) * q(Zaxis, 20)。的确,它们可以用来避免万向节锁定,但是矩阵,轴角和其他也可以。因此,这不是四元数的唯一属性。实际上,您可以使用大多数旋转表示来实现,但是使用欧拉角。唯一真实的信息可能是“欧拉(Euler)受到万向节锁定的困扰”,但是它可以被许多其他旋转表示形式所利用,而不仅仅是四元数。
Maik Semder '02

四元数的性能通常在所有情况下都不会更好,例如,使用3x3矩阵旋转矢量要比使用四元数更快。是一篇有趣的论文。
Maik Semder '02

3

您提到的SLERP用法是四元数的更一般属性的特定情况:您可以在不同的旋转值之间平滑地插值。

内插欧拉角的旋转值时,您会看到怪异的运动,并且从逻辑上讲,没有任何方法可以内插轴角旋转的值(除了围绕同一轴的两个不同角度之外)。


+1。通过将这些角轴表示形式转换为夸脱,然后采用SLERP,可以在(w1,alpha1)和(w2,alpha2)之间进行内插。当然,可以通过Bezier / de Casteljau方案/样条方案来做这样的事情,并以这种方式使用键四元数的“多边形/集”,并提出复杂的旋转方法。由于SLERP和multiSLERP或其变体(NLERP,SQUAD)具有位于测地线/最短旋转路径上的中间旋转轴/角度对,因此这可能是四元数比其他表示更自然地做的唯一一件事。荣誉
teodron
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.