计算两个四元数之间的旋转增量(作为另一个四元)



我有一些由四元数表示的初始旋转r0和一些实际旋转r(也是一个四元数)。我想得到表示旋转增量的四元数。

例如,如果r0代表30st OX旋转,而r50st OX,则rDelta应包含表示20st OX旋转的四元数。

如何计算rDelta

我的猜测是:

rDelta = r0.getConjugated() * r

rDelta = r.getConjugated() * r0

但也许这些都没有。

所以您想在rx * r0 == r1所在的位置找到rx

rx * r0 * conj(r0) == r1 * conj(r0)
rx == r1 * conj(r0)

你所需要知道的是,围绕q = q2 * q1的旋转等价于先围绕q1然后围绕q2的旋转。如果要从初始旋转r0转到最终旋转r1,只需替换:r1 = rx * r0,其中rxr0r1之间缺少的步骤。

四元数q(R2/R1)表示R2相对于R1 的旋转

四元数q(R3/R1)表示R3相对于R1 的旋转

您希望R3相对于R2 进行轮换

q(R3/R2) = q(R3/R1) * q(R1/R2) = q(R3/R1) * conjugate(q(R2/R1)),其中*是四元数的乘积

这取决于如何应用rDelta(从右或左)

1)r=r0*rDelta;r=r0*conj(r0)*r;rDelta==conj(r0)*r;

2)r=rDelta*r0;r=r*conj(r0)*r0;rDelta==r*conj(r0);

我可能错了,但如果我没记错,假设你在Unity中,并按从右到左的顺序应用Q(因为它是左撇子?),那么为了得到"从";Q1";至";Q2,你首先求Q1的倒数,然后将Q2应用于它的结果,这就得到了delta。从第一季度到第二季度需要轮换多少。

    Quaternion r0 = Quaternion.Euler(10, 0, 0);
    Quaternion r = Quaternion.Euler(20, 0, 0);
    Quaternion rDelta = r * Quaternion.Inverse(r0);

见鬼,我甚至不知道四元数共轭是什么!我认为对于齐次矩阵,它们和逆矩阵是一样的?是的,只是查了一下。

这里也有答案:https://gamedev.stackexchange.com/questions/143430/relative-quaternion-rotation-delta-rotation-produces-unstable-results

相关内容

  • 没有找到相关文章

最新更新