我是一名物理学家,并且一直在学习一些编程,并且遇到过很多人使用四元数进行旋转而不是以矩阵/向量形式编写东西。
在物理学中,我们不使用四元数有很好的理由(尽管偶尔会讲述关于汉密尔顿/吉布斯等的离奇故事)。物理学要求我们的描述具有良好的分析行为(这具有精确定义的含义,但在某些相当技术性的方面,远远超出了普通入门课程中所教的内容,因此我不会详细介绍)。事实证明,四元数没有这种好的行为,所以它们没有用,而向量/矩阵有,所以我们使用它们。
然而,仅限于刚性旋转和不使用任何解析结构的描述,3D 旋转可以等效地描述任何一种方式(或其他几种方式)。
通常,我们只需要一个点 X = (x, y, z) 到一个新点 X' = (x', y', z') 的映射,并受到 X 2 = X' 2的约束。有很多事情可以做到这一点。
天真的方法是只绘制这个定义的三角形并使用三角学,或者使用点 (x, y, z) 和向量 (x, y, z) 之间的同构以及函数 f(X) = X' 和矩阵 MX = X',或使用四元数,或使用其他方法将旧向量的分量沿新向量投影出 (x, y, z) T .(a,b,c) (x',y', z') 等。
从数学的角度来看,这些描述在这个设置中都是等价的(作为一个定理)。它们都具有相同数量的自由度、相同数量的约束等。
那么为什么四元数似乎比向量更受欢迎呢?
我看到的通常原因是没有万向节锁或数字问题。
没有万向节锁的说法似乎很奇怪,因为这只是欧拉角的问题。它也只是一个坐标问题(就像极坐标中 r=0 处的奇点(雅可比失去秩)),这意味着它只是一个局部问题,可以通过切换坐标,旋转出简并来解决,或使用两个重叠的坐标系。
我对数字问题不太确定,因为我不详细了解这两个(以及任何替代方案)将如何实现。我读过重新归一化四元数比对旋转矩阵进行归一化更容易,但这仅适用于一般矩阵;旋转有额外的约束,使其变得微不足道(这些约束内置在四元数的定义中)(事实上,这必须是真的,因为它们具有相同数量的自由度)。
那么在向量或其他替代方案上使用四元数的原因是什么?