假设我有一个对象(A),其位置存储为3位数向量,方向存储为四元数。
我有第二个对象(B)具有相同的信息。
无论出于何种原因,物体B突然焊接到物体A.它现在被卡住了,并且应该完全相对于物体A移动。
如果物体B粘在物体A的一个角上,而物体A旋转,物体B应该处于同一个角落中相同的相对位置和方向。
为了说明我的要求,它应该是这样的:
到目前为止,我已经设法获取对象B的位置并通过对象A的位置/方向的倒数进行变换,存储准确的相对位置 - 然后当对象A旋转时,我只是按对象A的位置变换相对位置/方向,并将对象B传送到该位置。这使对象B保持在A的角落,如预期的那样......但是,这不会旋转对象B以匹配对象A ...我应该如何使用四元数来跟踪相对方向或矩阵(欧拉角只是最坏的情况,因为计算成本很高)。
编辑:我之前只有一个四元数,后面有一个四元数。没有关于旋转本身的细节。
此外,旋转是任意且自由的,它可以同时围绕任何轴或多个轴。
答案 0 :(得分:1)
经过大量的谷歌搜索和实验后,我得到了最完美的答案:忽视原创想法,获得矩阵!
B.Matrix * Invert(A.Matrix)
存储为relative
标记,然后进行恢复,只需用relative * A.MATRIX
替换B&#39}。
这样就可以完美地调整旋转和位置。
我不知道如何对四元数做同样的事情,但是当我们有矩阵时谁在乎呢!
答案 1 :(得分:0)
您希望实现here所述的算法。
您需要围绕任意轴旋转B - 与您旋转A相同的轴。我假设你有一个旋转A的轴。如果不是,您可以使用A的中心点和平行于旋转法线的直线计算一个。