【问题标题】:Rotation vectors vs quaternions旋转向量与四元数
【发布时间】:2012-06-11 04:43:12
【问题描述】:

旋转向量通过直接存储旋转轴和角度大小来表示旋转。

四元数似乎更多地用于表示旋转。为什么在计算机图形学中四元数比旋转向量更受欢迎?

【问题讨论】:

标签: graphics matrix rotation


【解决方案1】:

四元数更容易计算,当然对于计算机而言(作为人类,你不应该为 3D 旋转而烦恼):

  • 当你想在向量表示中连接两个旋转时你会怎么做?您必须将它们转换为四元数或矩阵形式(使用昂贵的三角函数)才能做到这一点(并且可能再次返回),而四元数可以通过使用经典的四元数乘法有效地连接。

  • 如果您想使用矢量格式的旋转来旋转点/矢量,或者将其作为矩阵发送到 GL/D3D,您会怎么做?您将其转换为矩阵(再次使用昂贵的三角函数)。另一方面,四元数可以非常有效地转换为矩阵,因为它已经编码了所需的正弦和余弦。

所以矩阵和四元数是更合适的旋转表示。这两个四元数更加紧凑,并且它们也很容易转换为轴角表示(然后再转换回来),尽管使用三角函数。因此,如果您需要外围设备的轴角信息(只有我们人类有时需要实际的旋转轴和角度,计算机并不真正关心)您仍然可以使用它,但对于内部表示和计算,四元数或矩阵是更好的选择。

如果四元数的“3 维复数”解释一开始看起来有点沉重,请不要理会它们的确切数学基础。刚开始了解它们是如何工作的以及如何使用它们。实用上它们只是一种轴角表示,但具有隐式编码的正弦和余弦,这是高效转换和计算所必需的。

【讨论】:

    【解决方案2】:

    有关使用四元数以及有时优于向量的潜在原因的详细说明,请参阅this very intersting article。在this lengthy but insightful thread,你会发现关于四元数有用性的反对意见。

    TL;DR - 作者的观点是我们实际上并不需要四元数,但由于它们错综复杂的性质,它们似乎对程序员非常有吸引力。使用四元数表达的所有操作都可以使用向量来表达。不过,这种观点颇具争议。

    【讨论】:

    • 好吧,这篇文章必须持保留态度,忽略三角函数的低效率以及 3D 中的旋转计算不应该被人类理解这一事实。当然也可以使用矩阵,但轴角表示远不如两者,因为它只在人机外围设备上需要(如果需要的话)。
    猜你喜欢
    • 2013-03-30
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多