使用矩阵,欧拉角和/或四元数进行旋转表示的优缺点是什么?

矩阵和欧拉角可能受到万向节锁的影响,但是使用一个而不是另一个的其他一些论点呢?

你认为DirectX有什么好感?

你在日常的C ++ / C / DirectX编程中使用了什么?

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

您可能想要考虑四元数。 它们需要四个存储参数,所以它们不是很重。 它们避免了万向节锁定,可以进行插值以实现平滑旋转。 有一点可以解释为四元数的缺点是它们可能对某些人来说不太直观。 矩阵变换和欧拉角有一种非常直观的滚转 – 俯仰或旋转 – 旋转 – 章动。 四元数更类似于关于某个末端结果轴的单个旋转,这个或那个方式。

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

Euler Angles受到奇点的影响,很难处理。 矩阵表示与此处的许多答案相反,没有这个问题。 方向的矩阵表示可能会遇到累积误差,因为您只使用9个数字来表示只有3个自由度的东西。 四元数在数学上非常有趣,但在一天结束时它们实际上是在进行4×4矩阵乘法运算。

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

矩阵表示可以包括缩放信息,并且可以扩展到4×4以包括位置信息和方向。 您可以使用矩阵变换来变换位置和方向向量,这是使用其他两个变换无法实现的。

使用4×4矩阵,您可以非常简单地完成大量的工作。 四元数和欧拉角只是做方向。 是的,只是那件事。 我想我对此问题的偏好/偏见相当明确:-)

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

到目前为止,四元数是最难掌握的,但是一旦你理解了它们的含义,你就会发现它们非常容易使用。 我认为它们是更好的解决方案,然后Euler Angles / Matrix转换,因为它们处理的问题是其他2个解决方案没有。 “Gimball锁”。