//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,这意味着双向旋转操作是different.Why?
发布于 2017-03-23 11:55:40
四元数不是交换的。因此,一旦你改变了乘以它们的顺序,你得到的值也会不同。
来自统一文献
用产品lhs进行旋转,相对于lhs旋转所产生的参考框架,rhs与应用这两种旋转顺序相同:lhs优先旋转,然后再进行rhs旋转。请注意,这意味着旋转不是可交换的,因此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)的结果
所以,正如你所看到的,在第二个方程中,你没有守恒原来的顺序,因为它们不是可交换的,你的结果将是不同的。
https://stackoverflow.com/questions/42974739
复制相似问题