8

矩阵和欧拉角可能会受到万向节锁定的影响,但是使用其中一个而不是另一个的其他论据是什么?

你认为 DirectX 有什么好处?

您在日常 C++/C/DirectX 编程中使用什么?

4

4 回答 4

12

欧拉角只需要三个参数,而不是存储一个矩阵(或三个,但这听起来太过分了)。但是,当您应用欧拉旋转时,您最终可能会得到相当于三个矩阵乘法的结果来创建转换。如果您只使用矩阵,则可能不会产生如此昂贵的成本(取决于矩阵的构造方式)。除了 Gimbal Lock 之外,在插入旋转的矩阵表示时,还存在取消效果问题,您需要小心。

您可能需要考虑四元数。它们需要四个存储参数,因此它们不是很重。它们避免了万向节锁定,并且可以进行插值以渲染平滑旋转。可以解释为四元数缺点的一件事是,它们对某些人来说可能不是很直观。矩阵变换和欧拉角具有一种非常直观的滚动-偏航-俯仰或自旋-进动-章动。四元数更类似于围绕某个最终结果轴以这种或那种方式伸出的单次旋转。

在某些情况下,有人可能会更喜欢一种方法而不是其他方法,因此这些只是做出决定时要考虑的一些事项。

于 2010-02-04T09:11:28.430 回答
4

欧拉角有奇点,难以处理。与这里的许多答案相反,矩阵表示没有这个问题。方向的矩阵表示可能会受到累积误差的影响,因为您使用 9 个数字来表示只有 3 个自由度的东西。四元数在数学上非常有趣,但归根结底,它们实际上是在进行 4x4 矩阵乘法。

四元数也可以看作是一个 3vec,它代表一个旋转轴,它的长度与围绕该轴的旋转角度有关(sin 平方?)。计算第 4 个参数以使 4vec 的长度等于 1。这种解释可以转换为等效的方向矩阵。

矩阵表示可以包括缩放信息,并且可以扩展到 4x4 以包括位置信息和方向。您可以使用矩阵变换来变换位置和方向向量,而使用其他两个变换是不可能的。

您可以使用 4x4 矩阵非常简单地完成大量工作。四元数和欧拉角只是做方向。是的,就这一点。我想我在这个问题上的偏好/偏见相当清楚:-)

于 2010-02-04T15:12:40.803 回答
0

它与directx并没有真正的关系。您可以使用任何一种方法,但可以说四元数更容易处理动画数据。否则,您没有单一的标准方法来处理它,因此它使跨程序解释数据变得更加困难。

于 2010-02-04T09:06:34.953 回答
0

四元数是迄今为止最难掌握的,但一旦你了解了它们的含义,你会发现它们非常容易使用。我认为它们是比 Euler Angles/Matrix 变换更好的解决方案,因为它们处理的问题是其他 2 个解决方案所没有的。“万向锁”。

于 2010-02-04T09:13:52.623 回答