首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多重四元数乘法

多重四元数乘法
EN

Stack Overflow用户
提问于 2017-03-23 11:28:35
回答 1查看 2K关注 0票数 2
代码语言:javascript
复制
//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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-23 11:55:40

四元数不是交换的。因此,一旦你改变了乘以它们的顺序,你得到的值也会不同。

来自统一文献

用产品lhs进行旋转,相对于lhs旋转所产生的参考框架,rhs与应用这两种旋转顺序相同:lhs优先旋转,然后再进行rhs旋转。请注意,这意味着旋转不是可交换的,因此lhs *rhs不提供与rhs*lhs相同的旋转。

这两种乘法的顺序不一样。是的,您从q1开始,以q3结尾,但是从左到右的顺序不一样。

代码语言:javascript
复制
Vector3 v1 = (q1 * q2 * q3) * v;

在第一节中,您将得到q1 * q2的结果,然后乘以q3

代码语言:javascript
复制
Vector3 v2 = q3 * (q2 * (q1 * v));

在第二个例子中,您将得到q3,然后乘以q2 * (q1 * v)的结果

所以,正如你所看到的,在第二个方程中,你没有守恒原来的顺序,因为它们不是可交换的,你的结果将是不同的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42974739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档