你好
“四元数”和“欧拉角”方法各有什么优点和缺点?
- 哪个更快?
- 哪个需要更少的计算量?
- 哪个更准确(在舍入误差方面)?
你好
“四元数”和“欧拉角”方法各有什么优点和缺点?
- 哪个更快?
- 哪个需要更少的计算量?
- 哪个更准确(在舍入误差方面)?
欧拉角更容易被人理解,也适合将旋转分解为独立自由度(例如运动关节等),但缺点是存在歧义和万向节锁定。在实践中,我更喜欢四元数,因为它们更容易计算(对于计算机而言,不是对于人类)且更高效。旋转欧拉角需要进行三次旋转并将它们相乘,而四元数只需要进行一次旋转,并且已经编码了正弦和余弦,所以从四元数到矩阵的转换非常高效。
从Christian Rau的回答中进一步扩展一下:
Euler角度规范存在歧义:哪个角度应用于哪个轴?使用约定(偏航、俯仰、翻滚)的代码将无法与假定(翻滚、俯仰、偏航)的代码互操作,并且从代码中看不出使用了哪种解释。
四元数不会受到这种歧义的影响,因为它们只表示单个旋转,具有明确定义的轴。
正如其他答案指出的那样,四元数在许多方面都比欧拉角有优势。但是,欧拉角确实比四元数具有一个优点:
欧拉角可以告诉您旋转的方向和大小。当您将欧拉角转换为四元数时,该信息就丢失了。例如,欧拉旋转(-270°,0,0)和(1170°,0,0)产生相同的四元数(-0.7071,0,0,-0.7071)。
Euler角度更快。
Euler角度需要更少的计算工作。
四元数绝对更准确。
在Euler角度中存在一个称为万向节锁定的问题。当两个轴对齐时会发生这种情况。 另一方面,四元数更加灵活,并解决了这个问题,因为它更加面向轴。然而,理解起来比较复杂。
好吧,为了更容易理解四元数。让我们将四个组件分成两个部分:一个角度和与轴原点相连的x、y、z点,称为P。 (x,y,z)-P线表示一个新的轴。 角度表示轴和真实方向之间的角度。 要想可视化这个答案,您需要查看这个5分钟的视频。 https://eater.net/quaternions/video/intro