2

告诉我我是否错了。

我开始使用四元数。使用 4 x 4 的旋转矩阵(在 OpenGL 中使用),我可以计算模型视图矩阵,将当前模型视图乘以旋转矩阵。旋转矩阵是从四元数推导出来的。

四元数是一个方向向量(甚至没有归一化)和一个旋转角度。产生的旋转取决于方向矢量模块和 w 四元数分量。

但是为什么我应该使用四元数而不是欧拉轴/角度符号呢?后者更易于可视化和管理......

我发现的所有信息都可以与这篇美丽的文章综合起来:

http://en.wikipedia.org/wiki/Rotation_representation

4

6 回答 6

4

与欧拉角不同,四元数不会受到万向节锁定的影响。

于 2009-12-20T00:16:21.577 回答
4

为什么最好使用四元数在文章中有解释。

  • 比 DCM 表示更紧凑,更不易受到舍入误差的影响
  • 随着方向的变化,四元数元素在 R4 中的单位球面上连续变化(用 S3 表示),避免不连续的跳跃(固有的三维参数化),这通常被称为万向节锁定。
  • 用四元数参数表示 DCM 不涉及三角函数
  • 使用四元数积组合表示为四元数的两个单独的旋转很简单
于 2009-12-20T00:17:47.970 回答
3

我不同意四元数更容易可视化,但使用它们的主要原因是在没有“矩阵蠕变”的情况下连接旋转很容易。

于 2009-12-20T00:28:16.123 回答
2

四元数通常用于计算简单性 - 在使用四元数时执行诸如组合转换之类的事情要容易得多(也更快)。要引用您链接的维基百科页面,

组合两个连续的旋转,每个旋转都由欧拉轴和角度表示,并不简单,实际上也不满足向量加法定律,这表明有限旋转根本不是真正的向量。最好使用方向余弦矩阵 (DCM)、张量或四元数表示法,计算乘积,然后转换回欧拉轴和角。

它们也不会遇到轴/角度形式常见的问题,万向节锁定

于 2009-12-20T00:14:24.627 回答
1

在您想要围绕可以轻松计算的特定轴旋转的场景中,四元数更易于可视化、管理和创建。确定单个旋转角度比将旋转分解为多个角度要容易得多。

对 OP 的更正:向量表示旋转轴,而不是方向,旋转分量是半角的余弦,而不是角度本身。

于 2009-12-20T00:13:30.553 回答
0
  • 如前所述,四元数不会受到gimble lock的影响。
  • 对于给定的旋转,只有一个归一化的四元数表示。
    • 可能有几个看似无关的轴/角度值会导致相同的旋转。
  • 四元数旋转可以很容易地组合起来。
    • 计算轴/角度表示法是非常复杂的,它是另外两个轴/角度旋转的累积。
  • 浮点数在表示 0.0 和 1.0 之间的值时具有更高的准确度。

简短的回答是轴/角度符号最初看起来是最合理的表示,但实际上四元数缓解了轴/角度符号带来的许多问题。

于 2009-12-20T00:41:55.387 回答