//q1、q2 and q3 can be any quaternions only if q1 != q2 != q3
Quaternion q1 = Quaternion.Euler(10, 10, 10);
Quaternion q2 = Quaternion.Euler(20, 20, 20);
Quaternion q3 = Quaternion.Euler(20, 30, 30);
Vector3 v = Vector3.one;
Vector3 v1 = (q1 * q2 * q3) * v;
Vector3 v2 = q3 * (q2 * (q1 * v));
Debug.LogFormat("{0} {1}", v1.ToString("F3"), v2.ToString("F3"));
输出结果表明v1!= v2,这意味着双向旋转操作不同。为什么?
答案 0 :(得分:2)
四元数不是可交换的。因此,只要您更改它们的乘法顺序,您获得的值也会有所不同。
按产品旋转lhs * rhs与应用两者相同 顺序旋转:首先是lhs然后是rhs,相对于 由lhs旋转产生的参考系。请注意,这意味着 旋转不是可交换的,所以lhs * rhs不会给出相同的结果 旋转为rhs * lhs。
两次乘法的顺序不一样。是的,您从q1
开始并以q3
结束,但从左到右的顺序并不相同。
Vector3 v1 = (q1 * q2 * q3) * v;
首先,您将获得q1 * q2
的结果,然后将其乘以q3
Vector3 v2 = q3 * (q2 * (q1 * v));
在第二个中,您将q3
,然后将其乘以q2 * (q1 * v)
的结果
因为你可以看到你没有保留第二个等式中的原始顺序,并且因为它们不是可交换的,所以你的结果会有所不同。