使用四元数方向保持相对位置

时间:2015-05-21 23:56:36

标签: math quaternions

假设我有一个对象(A),其位置存储为3位数向量,方向存储为四元数。

我有第二个对象(B)具有相同的信息。

无论出于何种原因,物体B突然焊接到物体A.它现在被卡住了,并且应该完全相对于物体A移动。

如果物体B粘在物体A的一个角上,而物体A旋转,物体B应该处于同一个角落中相同的相对位置和方向。

为了说明我的要求,它应该是这样的:

Image

到目前为止,我已经设法获取对象B的位置并通过对象A的位置/方向的倒数进行变换,存储准确的相对位置 - 然后当对象A旋转时,我只是按对象A的位置变换相对位置/方向,并将对象B传送到该位置。这使对象B保持在A的角落,如预期的那样......但是,这不会旋转对象B以匹配对象A ...我应该如何使用四元数来跟踪相对方向或矩阵(欧拉角只是最坏的情况,因为计算成本很高)。

编辑:我之前只有一个四元数,后面有一个四元数。没有关于旋转本身的细节。

此外,旋转是任意且自由的,它可以同时围绕任何轴或多个轴。

2 个答案:

答案 0 :(得分:1)

经过大量的谷歌搜索和实验后,我得到了最完美的答案:忽视原创想法,获得矩阵!

B.Matrix * Invert(A.Matrix)存储为relative标记,然后进行恢复,只需用relative * A.MATRIX替换B&#39}。

这样就可以完美地调整旋转和位置。

我不知道如何对四元数做同样的事情,但是当我们有矩阵时谁在乎呢!

答案 1 :(得分:0)

您希望实现here所述的算法。

您需要围绕任意轴旋转B - 与您旋转A相同的轴。我假设你有一个旋转A的轴。如果不是,您可以使用A的中心点和平行于旋转法线的直线计算一个。