Math 四元数与数值稳定性
我正在学习单位四元数以及如何使用它们来表示和合成旋转。维基百科说它们比矩阵表示法在数值上更稳定,但没有给出参考。有人能向我解释一下(最好是通过一些数学推理)为什么使用单位四元数来处理旋转(例如,对于OpenGL应用程序)比使用旋转矩阵在数值上更稳定?这仅仅是因为避免了万向节锁吗?不确定这是否符合您的口味,但我还是要试一试:旋转矩阵的问题在于它包含冗余信息。您有9个值,用于编码仅具有3个自由度的变换 由于这种冗余,矩阵中的9个值存在约束,以形成有效的旋转矩阵。矩阵必须是正交的,这意味着行向量必须是正交的(每个向量的长度为1,每对向量的标量积为0) 在更新旋转矩阵时,通常通过将其与增量旋转矩阵连接,会引入数值错误。这些错误随着每次更新而累积。除非您对此做些什么,否则行向量将越来越远离正交。一旦矩阵距离正交足够远,它就可以开始明显地使其应用到的几何体变形(倾斜、缩放等)Math 四元数与数值稳定性,math,rotation,quaternions,rotational-matrices,numerical-stability,Math,Rotation,Quaternions,Rotational Matrices,Numerical Stability,我正在学习单位四元数以及如何使用它们来表示和合成旋转。维基百科说它们比矩阵表示法在数值上更稳定,但没有给出参考。有人能向我解释一下(最好是通过一些数学推理)为什么使用单位四元数来处理旋转(例如,对于OpenGL应用程序)比使用旋转矩阵在数值上更稳定?这仅仅是因为避免了万向节锁吗?不确定这是否符合您的口味,但我还是要试一试:旋转矩阵的问题在于它包含冗余信息。您有9个值,用于编码仅具有3个自由度的变换 由于这种冗余,矩阵中的9个值存在约束,以形成有效的旋转矩阵。矩阵必须是正交的,这意味着行向量必须是
使用旋转矩阵时,可以通过定期对行向量进行正交规格化来避免这些问题。这只需要一些简单的向量运算,所以没什么大不了的。维基百科的文章有偏见。
更新:我忘了提到:万向节锁在这里不起作用;四元数和旋转矩阵都不受此影响
一些旁注。尽管四元数比旋转矩阵更紧凑,但使用四元数将减少整个应用程序中的数值计算,这一点并不明确,请参见:
不过,老实说,这不太可能对你的应用产生重大影响,而且数值稳定性背后的理论也变得相当复杂。如果你真的对这一领域感兴趣,我可以推荐Higham的数值算法的准确性和稳定性。使用单位四元数可能比矩阵更不稳定 一,。 如果你转换单位四元数并假设它是单位(而不是按平方大小加权系数),你会得到显著的误差。如果你从断开的矩阵转换回四元数,反之亦然,你会很快达到不稳定的旋转
注:许多操作的执行速度比使用单位更快,例如从矩阵转换。我有一个应用程序,其中有一个“car”跟随样条线。我计算样条线的导数以定义正向向量,然后计算左向量和上向量以创建方向矩阵。然后我将其分解为四元数 当我将这些四元数转换为an中的关键帧时