我有这个源代码,可以旋转三个轴在X,Y和Z上对齐:
Quaternion<float> orientation = transform.getOrientation();
Vector3<Vector3<float>> axis(
orientation.rotate(Vector3<float>(1.0, 0.0, 0.0)),
orientation.rotate(Vector3<float>(0.0, 1.0, 0.0)),
orientation.rotate(Vector3<float>(0.0, 0.0, 1.0))
);从‘轴’变量,我想重建四元数。我有一个四元数构造函数,它允许我从一个轴和一个角度来构造它。
我该怎么做呢?提前谢谢你。
发布于 2015-02-11 02:24:48
维基百科上有一个很好的页面描述了Quaternions and spatial rotation。具体地说,“与矩阵表示法相互转换”一节。
一定要注意下面这一点,引用自该页面,“在将旋转矩阵转换为四元数时必须小心,因为当旋转矩阵的迹(对角线元素的和)为零或非常小时,几种简单的方法往往不稳定。”
通常,从旋转矩阵(实际上就是您构建的矩阵)转换为四元数不是一个好主意。旋转矩阵必须是一个特殊的正交矩阵,它是所有可能的3x3矩阵的一个非常小的子集。在计算矩阵时,您几乎总是会丢失一些精度,因此它不会是精确正交的。事实上,这也是四元数更适合于表示三维旋转的原因之一。一般来说,如果你能避免转换,只使用四元数,你会过得更好。
该页面上有一个算法,它提供了一个稳定的方法,可能足以满足您的目的。但从个人经验来看,我可以告诉你,在大多数情况下,你应该预料到在操作中会失去一些精度。
https://stackoverflow.com/questions/28135576
复制相似问题