通过偏移量旋转四元数?

4
我正在尝试给四元数的旋转增加一个偏移量,根据Unity文档,两个四元数相乘相当于按顺序进行旋转。目前我正在尝试以下方法:如果偏移四元数是(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)

实际上,乘以(1,0,0,0)没有任何作用。请注意,用于表示旋转的所有四元数的大小应为1(平方和 = 1)。您的“q”值也有一点偏差(其大小约为0.99)。 - greggo
2个回答

4
在这里问题不在于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)

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

Quaternion result = q * rotationZero;

Quaternion.identity文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接