四元数和变换矩阵

3
告诉我如果我错了。
我开始使用四元数。使用一个4 x 4的旋转矩阵(在OpenGL中使用),我可以通过将当前的模型视图与旋转矩阵相乘来计算模型视图矩阵。旋转矩阵是由四元数推导出来的。
四元数是一个方向向量(甚至不需要归一化)和一个旋转角度。结果旋转取决于方向向量模块和w四元数分量。
但是,为什么我应该使用四元数而不是欧拉轴/角度表示法?后者更容易可视化和管理……
我找到的所有信息都可以用这篇美丽的文章综合起来:

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

6个回答

4

与欧拉角不同,四元数不会出现gimbal lock的问题。


4

本文解释了为什么使用四元数更好。

  • 比DCM表示更紧凑,且不易受舍入误差影响
  • 四元数元素随着方向的变化在R4中连续变化,(由S3表示),避免了不连续的跳跃(三维参数化固有的缺陷),这通常被称为万向节锁定。
  • 以四元数参数表示DCM不涉及三角函数
  • 使用四元数乘积简单地组合两个表示旋转的单独旋转

3

我不同意四元数更容易可视化的说法,但使用它们的主要原因是可以轻松地连接旋转而不会出现“矩阵蔓延”。


为什么你认为它们不容易可视化呢?有什么比旋转轴和角度更容易的呢? - RickNZ
4
当查看数据时,四元数的实际表示与我们更熟悉且更易于可视化解释数据或调试的欧拉角不同。 - Kristopher Ives
1
我会说四元数更容易可视化,因为它们在虚部中给出了旋转轴。当我要可视化一组欧拉角的旋转轴时,我基本上必须在脑海中执行三个欧拉旋转,然后将物体的最终方向与原始方向进行比较,也许这样我才能看到它围绕的单一轴。 - SuperElectric

2
四元数通常用于计算简便性 - 当使用四元数时,进行合成变换等操作更加容易(而且更快)。引用您提供的维基百科页面, “结合两个连续的旋转,每个旋转由欧拉轴和角度表示,不是很简单,并且实际上不满足向量加法定律,这表明有限旋转根本不是向量。最好使用方向余弦矩阵(DCM),或张量,或四元数符号进行计算,然后将其转换回欧拉轴和角度。” 此外,它们也没有遭受轴/角度形式常见问题gimbal lock

1

四元数在需要绕特定轴旋转的场景中更易于可视化、管理和创建,因为这个轴可以很容易地计算出来。确定单个旋转角度比将旋转分解成多个角度要容易得多。

对原帖进行更正:向量表示旋转轴而非方向,旋转分量是半角的余弦而非角度本身。


0
  • 如前所述,四元数不会受到吉布斯锁的影响。
  • 对于给定的旋转,存在唯一的规范化四元数表示。
    • 可能有几个看似无关的轴/角值会导致相同的旋转。
  • 四元数旋转可以很容易地组合起来。
    • 计算两个其他轴/角旋转累积的轴/角表示法非常复杂。
  • 浮点数在表示0.0到1.0之间的值时具有更高的精确度。

简而言之,轴/角表示法在开始时可能似乎是最合理的表示方法,但实际上,四元数解决了轴/角表示法提出的许多问题。


在这个上下文中,“轴/角度”是含糊不清的。毕竟,四元数也是一个轴(旋转轴)和一个角度(实际上是半角的余弦)。 - RickNZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接