四元数和变换矩阵

时间:2009-12-20 00:08:33

标签: matrix rotation quaternions

告诉我,如果我错了。

我开始使用四元数。使用旋转矩阵4 x 4(在OpenGL中使用),我可以计算模型视图矩阵,将当前模型视图与旋转矩阵相乘。旋转矩阵来自四元数。

四元数是方向向量(甚至未标准化)和旋转角度。结果旋转取决于方向矢量模块和w四元数组件。

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

我发现的所有信息都可以通过这篇美丽的文章进行综合:

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

6 个答案:

答案 0 :(得分:4)

与欧拉角不同,四元数不会受gimbal lock的影响。

答案 1 :(得分:4)

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

  • 比DCM表示更紧凑,更不容易出现舍入错误
  • 随着方向的变化,四元数元素在R4中的单位球体上连续变化(由S3表示),避免不连续的跳跃(三维参数化固有),这通常被称为万向节锁定。
  • 根据四元数参数表达DCM不涉及三角函数
  • 使用四元数产品组合表示为四元数的两个单独旋转很简单

答案 2 :(得分:2)

四元数通常用于计算简单性 - 使用四元数时组合变换等操作更容易(也更快)。引用您链接的维基百科页面,

  

结合两次连续旋转,   每个由欧拉轴和   角度,并不简单,并且在   事实并不符合法律   矢量加法,这表明   有限的旋转并不是真的   载体。最好雇用   方向余弦矩阵(DCM),或   张量或四元数符号,   计算产品,然后   转换回欧拉轴和角度。

它们也不会遇到轴/角度形式常见的问题gimbal lock

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

  • 如上所述,四元数不会受gimble lock的影响。
  • 对于给定的旋转,只有一个标准化的四元数表示。
    • 可能有几个看似无关的轴/角度值导致相同的旋转。
  • 四元数旋转可以很容易地组合。
    • 计算轴/角度符号是非常复杂的,这是两个其他轴/角度旋转的累积。
  • 浮点数在表示0.0到1.0之间的值时具有更高的准确度。

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