四元数乘法(叉乘)
四元数能根据复数乘法解释来相乘,如下:
这导出了四元数乘法的标准定义,下面以两种四元数记法给出,见公式10.9:
不用为四元数叉乘使用乘号,"行"或 "列"四元数也没有什么区别。
四元数叉乘满足结合律,但不满足交换律,如公式10.10所示:
现在看看两个四元数叉乘的模:
展开合并同类项:
最后应用四元数模的定义得到公式 10.11:
因此,四元数乘积的模等于模的乘积。这个结论非常重要,因为它保证了两个单位四元数相乘的结果还是单位四元数。
四元数乘积的逆等于各个四元数的逆以相反的顺序相乘,如公式10.12所示:
现在到了四元数非常有用的性质。让我们"扩展"一个标准3D点(x, y, z)到四元数空间,通过定义四元数p=[0, (x, y, z)]即可(当然,在一般情况下,p不会是单位四元数)。设q为我们讨论的旋转四元数形式[cos(θ/2), nsin(θ/2)],n为旋转轴,单位向量;θ为旋转角。你会惊奇地发现,执行下面的乘法可以使3D点p绕n旋转:
已经证明,四元数乘法和3D向量旋转的对应关系,更多的是理论上的意义,不是实践上的。实际上,它几乎和把四元数转换到矩阵形式然后再用矩阵乘以向量所用的时间一样。
让我们看多次旋转的情况,将点p用一个四元数a旋转然后再用另一个四元数b旋转:
注意,先进行a旋转再进行b旋转等价于执行乘积ba代表的单一旋转。因此,四元数乘法能用来连接多次旋转,这和矩阵乘法的效果一样。根据四元数乘法的标准定义,这个旋转是以从右向左的顺序发生的。这非常不幸,因为它迫使我们以 "由里向外"的顺序连接多次旋转,这和以矩阵形式作同样的运算是不同的(至少在使用行向量时是不同的)。
针对公式10.9所导致的"顺序颠倒"问题,我们将违背标准定义,以相反的运算顺序来定义四元数乘法。注意,仅仅向量叉乘部分受到了影响,见公式10.13:
这并没有改变四元数的基本性质和用v、θ的几何解释,仍然能用四元数乘法来直接旋转向量,唯一不同的是,根据我们的定义,将四元数放在向量右边,而把它的逆放在向量的左边:
能看到下面这个表达了多个旋转连接的等式,它是自左向右的,与旋转发生的顺序一致:
对于我们来说,让四元数代表角位移的"高级"能力,使其易于使用,这比坚持正式标准更加重要。我们的目的在于理解四元数的本质和它提供给我们的操作,设计一个类将直接引出这些操作,在需要的地方使用这个类,永远不需要再去摆弄里面的数。
四元数的"差"
利用四元数的乘法和逆,就能够计算两个四元数的"差"。"差"被定义为一个方位到另一个方位的角位移。换句话说,给定方位a和b,能够计算从a旋转到b的角位移d。用四元数等式更加紧凑地表示为:ad=b。
两边同时左乘a-1:
现在,我们就有了求得代表一个方位到另一个方位角位移的四元数的方法。
数学上,两个四元数之间的角度"差"更类似于"除",而不是真正的"差"(减法)。
四元数点乘
四元数也有点乘运算,它的记法、定义和向量点乘非常类似,如公式10.14所示:
注意,和向量点乘一样,其结果是标量。对于单位四元数a和b,有-1 ≤ a . b ≤ 1。通常我们只关心 a . b 的绝对值,因为a . b = -(a . -b),所以b和-b代表相同的角位移。
四元数点乘的几何解释类似于向量点乘的几何解释,四元数点乘 a . b 的绝对值越大,a和b代表的角位移越"相似"。