我正在尝试为四元数的旋转添加偏移量,根据Unity documentation乘以两个四元数与按顺序进行两次旋转相同。
这就是我现在正在尝试的事情:
如果偏移量Quaternion为(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)
答案 0 :(得分:2)
问题不在于C#或在Unity中,您使用的值会导致输出值为(0.0, 0.0, 0.0, 0.0)
。它可以在数学上解释如下。
四元数的形式为
q = q0 + iq1 + jq2 + kq3
和
r = 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 :(得分:1)
Quaternion q = new Quaternion (-0.7f, 0f, 0f, -0.7f);
Quaternion rotationZero = Quaternion.identity; // offset
Quaternion result = q * rotationZero;