【发布时间】:2012-06-11 04:43:12
【问题描述】:
旋转向量通过直接存储旋转轴和角度大小来表示旋转。
四元数似乎更多地用于表示旋转。为什么在计算机图形学中四元数比旋转向量更受欢迎?
【问题讨论】:
旋转向量通过直接存储旋转轴和角度大小来表示旋转。
四元数似乎更多地用于表示旋转。为什么在计算机图形学中四元数比旋转向量更受欢迎?
【问题讨论】:
四元数更容易计算,当然对于计算机而言(作为人类,你不应该为 3D 旋转而烦恼):
当你想在向量表示中连接两个旋转时你会怎么做?您必须将它们转换为四元数或矩阵形式(使用昂贵的三角函数)才能做到这一点(并且可能再次返回),而四元数可以通过使用经典的四元数乘法有效地连接。
如果您想使用矢量格式的旋转来旋转点/矢量,或者将其作为矩阵发送到 GL/D3D,您会怎么做?您将其转换为矩阵(再次使用昂贵的三角函数)。另一方面,四元数可以非常有效地转换为矩阵,因为它已经编码了所需的正弦和余弦。
所以矩阵和四元数是更合适的旋转表示。这两个四元数更加紧凑,并且它们也很容易转换为轴角表示(然后再转换回来),尽管使用三角函数。因此,如果您需要外围设备的轴角信息(只有我们人类有时需要实际的旋转轴和角度,计算机并不真正关心)您仍然可以使用它,但对于内部表示和计算,四元数或矩阵是更好的选择。
如果四元数的“3 维复数”解释一开始看起来有点沉重,请不要理会它们的确切数学基础。刚开始了解它们是如何工作的以及如何使用它们。实用上它们只是一种轴角表示,但具有隐式编码的正弦和余弦,这是高效转换和计算所必需的。
【讨论】:
有关使用四元数以及有时优于向量的潜在原因的详细说明,请参阅this very intersting article。在this lengthy but insightful thread,你会发现关于四元数有用性的反对意见。
TL;DR - 作者的观点是我们实际上并不需要四元数,但由于它们错综复杂的性质,它们似乎对程序员非常有吸引力。使用四元数表达的所有操作都可以使用向量来表达。不过,这种观点颇具争议。
【讨论】: