Matrix 四元数与变换矩阵

Matrix 四元数与变换矩阵,matrix,rotation,quaternions,Matrix,Rotation,Quaternions,如果我错了,请告诉我 我开始用四元数了。使用旋转矩阵4x4(在OpenGL中使用),我可以计算模型视图矩阵乘以当前模型视图和旋转矩阵。旋转矩阵由四元数导出 四元数是一个方向向量(甚至没有归一化)和一个旋转角度。结果旋转取决于方向向量模块和w四元数分量 但是为什么我应该使用四元数而不是Euler轴/角度符号呢?后者更易于可视化和管理 我发现的所有信息都可以通过这篇精彩的文章进行综合: 四元数更易于可视化、管理和创建,因为您希望绕一个易于计算的特定轴旋转。确定单个旋转角度比将旋转分解为多个角度容易得

如果我错了,请告诉我

我开始用四元数了。使用旋转矩阵4x4(在OpenGL中使用),我可以计算模型视图矩阵乘以当前模型视图和旋转矩阵。旋转矩阵由四元数导出

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

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

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


四元数更易于可视化、管理和创建,因为您希望绕一个易于计算的特定轴旋转。确定单个旋转角度比将旋转分解为多个角度容易得多


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

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

结合两次连续旋转, 每个由一个Euler轴和 角度,不是直截了当的,而且 事实不符合法律 向量加法,这表明 有限旋转并不是真的 根本没有矢量。最好雇用 方向余弦矩阵(DCM),或 张量,或四元数表示法, 计算乘积,然后 转换回Euler轴和角度


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

与欧拉角度不同,四元数不会遇到问题。

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

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

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

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

简而言之,轴/角度表示法最初看起来是最合理的表示法,但实际上,四元数可以缓解轴/角度表示法带来的许多问题。

为什么您不认为它们更容易可视化?有什么比旋转轴和角度更容易呢?与我们更熟悉的欧拉角相比,四元数在查看数据时的实际表示方式不同,因此在解释数据或调试时更容易可视化。我想说四元数更容易可视化,因为它们给出了虚部的旋转轴。当可视化一组欧拉角的旋转轴时,我几乎必须在头部执行三个欧拉旋转,然后将对象的最终方向与原始方向进行比较,然后我可能会看到它旋转的单轴。“轴/角度”在这种情况下是不明确的。毕竟,四元数也是一个轴(旋转轴)和一个角(实际上是半个角的余弦)。