将四元数旋转一个偏移量?

问题描述 投票:2回答:2

[我正在尝试为四元数的旋转增加偏移量,根据Unity documentation将两个四元数相乘与按顺序进行两个旋转相同。

这是我现在正在尝试的内容:

如果偏移四元数是(0,0,0,0)乘以第一个四元数,则不会产生任何效果。但是,在我的测试中,将任何四元数乘以(0,0,0,0)会得出(0,0,0,0),所以这不能正常工作。

    Quaternion q = new Quaternion (-0.7f, 0f, 0f, -0.7f);
    Quaternion rotationZero = new Quaternion (0f, 0f, 0f, 0f); // offset

    Quaternion result = q * rotationZero;

    print (result); // (0.0, 0.0, 0.0, 0.0)
unity3d quaternions
2个回答
2
投票

这里不是C#或Unity中的问题,您使用的值导致输出值为(0.0, 0.0, 0.0, 0.0)。可以在数学上解释如下。

四元数的形式为

q = q0 + iq1 + jq2 + kq3r = r0 + ir1 + jr2 + kr3

四元数乘积的形式为

t= q×r = t0 + it1 + jt2 + kt3,哪里

t0 = (r0q0−r1q1−r2q2−r3q3) t1 = (r0q1+r1q0−r2q3+r3q2) t2 = (r0q2+r1q3+r2q0−r3q1) t3 = (r0q3−r1q2+r2q1+r3q0)


0
投票
Quaternion q = new Quaternion (-0.7f, 0f, 0f, -0.7f);
Quaternion rotationZero = Quaternion.identity; // offset

Quaternion result = q * rotationZero;

Quaternion.identity docs

© www.soinside.com 2019 - 2024. All rights reserved.