两个四元数之间的“差异”

28

我在使用Ogre工具,但是遇到了一个通用的四元数问题。

我有一个物体,最初应用了一个旋转四元数Q1。后来,我想让它看起来就像最初将对象按不同的四元数Q2进行了旋转。

我应该如何计算四元数,以便将已经通过Q1旋转的对象与Q2的初始/默认方向相对齐?我在研究(s)lerping算法,但我不确定这是否仅适用于定位而非旋转?


3
是否考虑将某些答案标记为正确答案?同时看一下数学溢出...(顺便说一句,四元数也让我十分疯狂,而且很抱歉我无法回答。) - John Nicholas
2个回答

38

听起来你想要Q1乘以Q2的逆运算。通过Q1的逆变换可以将物体旋转回到其原始框架(即初始方向,正如你所说),然后通过Q2的变换将其旋转到新方向。

请注意,四元数的标准定义应用的是从右到左的乘法顺序,因此你需要计算为Q = Q2*Q1^{-1}。


26
这样想一想:
QTransition * QInitial = QFinal

通过将两边乘以QInitial的逆(逆为四元数共轭),解出QTransition。
QTransition = QFinal * QInitial^{-1}

这就是那么简单。

这是重新提起一个旧话题,但为什么这是正确的呢?我可以通过代码验证它,但矩阵旋转似乎是相反的。例如,如果我想要移除MInitial,我会从左边用MInitial^-1乘以两边,因为MInitial^-1*MInitial = Midentity。 - Johan Holtby
1
四元数的“乘法”和矩阵乘法不同,它的顺序也不一样。在网上我找不到可靠的解释,但我知道这个问题在Kuipers的《Quaternions and Rotation Sequences》一书中有详细阐述。(http://www.amazon.com/Quaternions-Rotation-Sequences-Applications-Aerospace/dp/0691102988) - 我并不是说你应该购买那本书来证明这一点 (尽管那是一本好书),但我就是从那里了解到矩阵和四元数运算顺序的不同。 - fbl
1
@Scott,我不确定我理解了你的意思。我绝对同意四元数乘法不是可交换的,但是四元数(与矩阵不同)从左到右工作,而不是从右到左。你能详细说明一下你的担忧吗?这个答案已经保持了11年,获得了24个赞同,并且与Jim的被接受的答案相匹配。此外,考虑到可能只有50个人真正关心四元数,我认为24个赞同已经很不错了 :) - fbl
@Scott 我写了一点Python来确认这个问题,从我所知道的来看,在这种情况下,无论你是在前面还是在后面乘以它,数值上都没有区别。qi * qt * conj(qi) 的结果与 conj(qi) * qi * qt 完全相同。实际上,它们都返回 qt。话虽如此,你的观点也是有道理的。一般来说,在等式的一侧左边乘以一个数,而在另一侧右边乘以一个数,是不能保持等式相等的。如果我指定你在等式的右侧两边都乘以 qi^-1,这样会让我的解释更清晰吗? - fbl
@fbl qi * qt * conj(qi) 通常不会返回qt,请尝试更多的测试用例。如果您选择“好”的数字进行测试,那么很容易找到这样的例子。 (还要注意,对于单位四元数,q ^ -1仅等于conj(q),但这就是我们在此处使用的内容,因此没问题)。无论如何,您需要修复的只是将答案中的第一行更改为QTransition * QInitial = QFinal。 - Scott
显示剩余4条评论

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