四元数乘法计算

您所在的位置:网站首页 3个矩阵乘法公式 四元数乘法计算

四元数乘法计算

2024-05-30 11:33| 来源: 网络整理| 查看: 265

关于两个四元数的乘法,网上查了一大堆,没一个说明白的。

我就想知道给我两个四元数,我该怎么算出来它们的乘积。

这么简单的需求都没法找到答案,实在对不起四元数的江湖地位。

要想计算四元数的乘法,首先需要知道四元数常见的表示方法:

其中复数式、矢量式和三角式基本是一回事,都是把四元数写成一个标量和一个向量的和的形式。指数式和矩阵式就是一种表示方法,涉及到数学意义和运算还是主要用前三种。

补充说明: 这里的i上面有箭头,不是复数i,而是一个普通的三维矢量。 三角式具有明确的几何意义,其中矢量i是三维空间中的旋转轴,2θ是旋转角,具体见本文的“四元数的用途”。 因此四元数cosθ/2+i*sinθ/2就表示“绕矢量i旋转θ角”,这样看起来几何意义更明确。 所以用θ/2,并不是一定要除以2,只是除了之后有更好的几何意义。 指数式类似于三角式(参考的复数的欧拉公式),本身只是一种表示方法,没什么具体的作用。 总结,四元数的任何表示方法都和复数没有关系,不要把矢量i和复数i弄混。 在矢量式表达方式中,i1,i2,i3是三个正交的单位矢量,也可以用i,j,k表示。

下面介绍不同四元数表示形式的乘法:

1.复数式

这个结果这么复杂,而且看起来毫无规律,当然不能死记硬背。

其实就是简单的展开相乘,注意涉及到i*j的时候按照叉乘右手定则判断,即i*j=k;遇到i*i的时候按照复数运算,或者说按照点乘取负计算,即i*i=-1

当然也可以按照下面的乘数表进行运算

×1ijk11ijkii-1k-jjj-k-1ikkj-i-1

例如,(2+i)(i+j)=2*i+2*j+i*i+i*j=2i+2j-1+k=-1+2i+2j+k

从上面可以看出,四元数的乘法既不是叉乘,也不是点乘,是叉乘和点乘的混合,涉及到正交向量相乘如i*j时是叉乘,涉及到相同向量相乘如i*i时,却是点乘取负,或者看作复数相乘。

因此四元数乘法和叉乘类似,没有乘法交换律,如i×j=k,但是j×i=-k。

用复数式计算四元数乘法十分繁琐,只适合手动计算较简单的四元数乘法。

2.矢量式

矢量式四元数相当于把复数式四元数中的q1*i+q2*j+q3*k看成一个整体的矢量q,这样乘法的表达形式会简洁很多,如下:

其实就是展开相乘,注意q和p矢量相乘的结果等于叉乘的结果减去点乘的结果。

为什么还会多出一项q和p的点乘呢?其实在上文复数式乘法中已经介绍了,i*i不是按照叉乘等于0,而是按照点乘取负进行计算,即i*i=-1。所以矢量式的四元数乘法中才会多出一项点乘。

矢量式的四元数乘法也适用于三角式相乘。

3.矩阵式

为了方便计算机运算四元数乘法,我们把复数式乘法的结果写成矩阵的形式,方便记忆和编程。但运算本质还是前两种。‘

上述两种矩阵都是反对称矩阵,保留的乘子分别是p和q,矩阵形式也略有不同。

还是要注意QP ≠ PQ 

四元数的用途

顺便提一下,四元数的实际意义还是用来表示向量旋转或者坐标系转换比较方便,这主要是利用四元数三角式的性质

或者

这就把向量旋转的坐标转换变成了四元数相乘。在此之前,向量旋转的坐标变换都是用方向余弦矩阵配合欧拉角实现的。其在四旋翼中的应用可以参考我的另一篇博文:四旋翼与四元数学习笔记

四元数的优势

可以看出,四元数的矢量部分直接对应了旋转轴,标量和矢量部分共同决定了旋转角,这是比欧拉角三个角表示旋转更为接近本质的方法。

相较于欧拉角求旋转向量坐标的方法,

1、四元数方法不需要进行求三角函数的运算,因此运算精度更高;

2、四元数也不存在欧拉角的框架自锁问题。

ps:框架自锁问题如下



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3