我是物理学家,已经学习了一些编程知识,并且遇到了很多使用四元数旋转而不是以矩阵/矢量形式编写事物的人。
在物理学中,我们不使用四元数是有很好的理由的(尽管偶尔会有关于Hamilton / Gibbs / etc的怪诞故事)。物理要求我们的描述必须具有良好的分析行为(这具有精确定义的含义,但是以某种相当技术性的方式,远远超出了普通入门班所教的内容,因此我将不做任何详细介绍)。事实证明,四元数没有这种良好的行为,因此它们无用,向量/矩阵也有,因此我们使用它们。
但是,由于限于刚性旋转和不使用任何分析结构的描述,因此可以等效地描述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处的奇点(雅可比松散秩)一样),这意味着它只是一个局部问题,可以通过切换坐标,从简并转出来解决,或使用两个重叠的坐标系。
我不太确定数值问题,因为我不知道如何同时实现这两种方法(以及其他方法)。我已经读过,对四元数进行重新归一化比对旋转矩阵进行归一化更容易,但这仅适用于一般矩阵。旋转具有附加的约束,可以使此变得微不足道(这些约束内置于四元数的定义中)(实际上,这必须成立,因为它们具有相同数量的自由度)。
那么在向量或其他替代方案上使用四元数的原因是什么呢?