旋转矩阵

问题描述:

我有2个旋转矩阵之间的插值(让我们称之为A和B),其中:旋转矩阵

A = 1 0 0 
    0 0 -1 
    0 1 0 

B = -1 0 0 
    0 0 -1 
    0 -1 0 

这基本上是在相机打转看旋转在它后面。 显然,我不能直接插入矩阵中的值,因为它看起来很奇怪。 我曾尝试将矩阵转换为欧拉角,产生2组X,Y,Z角度,并尝试根据X,Y,Z角度的每个分量之间的最小距离确定使用哪个角度。这肯定会导致我想要的旋转类型,但我想不出一种体面的方式来确定在哪个角度之间进行插值,因为有时导致最小误差的角度集导致围绕错误轴/轴的旋转。 我也试过四元数,但基本上给了我相同的结果。任何人都可以将我指向正确的方向吗?

使用四元数(SLERP)。旋转矩阵和欧拉角都不适合插值。

请参阅45:05 here (David Sachs, Google Tech Talk)

我的个人意见是,使用四元数这种类型的事情更有意义。这就是说,你可以做到这一点,而不使用四元数。

需要注意的一点是,“差异化”矩阵,即,这需要“方向” A为“方向” B矩阵可以通过T = A.tranpose() * B计算(考虑你是乘在右边)。一旦你有了旋转矩阵T,你可以转换为轴角表示(例如参见http://en.wikipedia.org/wiki/Axis-angle_representation)。

最后,由于要知道的旋转轴这需要AB,可以线性插入从零角度先前从T计算的角度。

这相当于使用SLERP。