四元数的基本概念
四元数是简单的超复数。 复数是由实数加上虚数单位 i 组成,其中i^2 = -1。 相似地,四元数都是由实数加上三个虚数单位 i、j、k 组成,每个四元数都是 1、i、j 和 k 的线性组合,即是四元数一般可表示为a + bi+ cj + dk,其中a、b、c 、d是实数。
运算关系如下: i^2 = j^2 = k^2 = -1, i^0 = j^0 = k^0 = 1,ij=k,ji=-k,jk=i,kj=-i,ki=j、ik=-j
四元数与旋转
四元数可以表达物体绕任意向量轴的旋转,并且和欧拉角度旋转与旋转矩阵的方法相比,其效率更高,操作也更灵活。
四元数的i、j、k的旋转几何意义如下:i旋转代表X轴与Y轴相交平面中X轴正向向Y轴正向的旋转,j旋转代表Z轴与X轴相交平面中Z轴正向向X轴正向的旋转,k旋转代表Y轴与Z轴相交平面中Y轴正向向Z轴正向的旋转,-i、-j、-k分别代表i、j、k旋转的反向旋转。
欧拉旋转需要计算3个旋转分量的作用之和,如下图(a),即沿Z轴的航线(Heading)角度,沿X轴的俯仰(Pitch)角度,以及沿Y轴的横滚(Roll)角度;而四元数只需要对旋转轴V和旋转角度进行设置,如下图(b)。
四元数旋转与欧拉旋转的对应关系:Heading角度与i旋转对应,Roll角度与j旋转对应,Pitch角度与k旋转对应
我们下面使用q = ((x, y, z),w) = (v, w),其中v是向量,w是实数,这样的式子来表示一个四元数。
首先,定义一个旋转轴为向量v=(vx, vy, vz),旋转角度为θ(右手法则的旋转);然后即可计算得到一个四元数q:
四元数的叠加效果:
定义四元数q1:旋转轴为v1,旋转角度为θ1;定义四元数q2:旋转轴为v2,旋转角度为θ2;定义四元数q3:旋转轴为v3,旋转角度为θ3;则旋转叠加效果为q,其中q=q1*q2*q3。
四元数的运算
定义两个四元数:
四元数加法:p + q
跟复数、向量和矩阵一样,两个四元数之和需要将不同的元素加起来。
四元数乘法:pq
两个四元数之间的非可换乘积通常被格拉斯曼(Hermann Grassmann)称为积,它的完整型态是︰
由于四元数乘法的非可换性,pq并不等于qp。格拉斯曼积常用在描述许多其他代数函数。qp乘积的向量部分是:
四元数点积: p · q
点积也叫做欧几里德内积,四元数的点积等同于一个四维向量的点积。点积的值是p中每个元素的数值与q中相应元素的数值的乘积的和。这是四元数之间的可换积,并返回一个标量。
点积可以用格拉斯曼积的形式表示:
这个积对于从四元数分离出一个元素有用。例如,i项可以从p中这样提出来:
四元数外积:Outer(p,q)
欧几里德外积并不常用; 然而因为外积和内积的格拉斯曼积形式的相似性,它们总是一同被提及:
四元数偶积:Even(p,q)
四元数偶积也不常用,但是它也会被提到,因为它和奇积的相似性。它是纯对称的积;因此,它是完全可交换的。
叉积:p × q
四元数叉积也称为奇积。它和向量叉积等价,并且只返回一个向量值:
四元数转置:p−1
四元数的转置通过
被定义。它定义在上面的定义一节,位于属性之下(注意变量记法的差异)。其建构方式相同于复倒数(complex inverse)之构造:
一个四元数的自身点积是个纯量。四元数除以一个纯量等效于乘上此纯量的倒数,而使四元数的每个元素皆除以此一除数。
四元数除法:p−1q
四元数的不可换性导致了
和
的不同。这意味着除非p是一个标量,否则不能使用q/p这一符号。
四元数纯量部:Scalar(p)
四元数的标量部分可以用前面所述的点积来分离出来:
四元数向量部:Vector(p)
四元数的向量部分可以用外积提取出来,就象用点积分离标量那样:
四元数模:|p|
四元数符号数:sgn(p)
一复数之符号数乃得出单位圆上,一个方向与原复数相同之复数。四元数的符号数亦产生单位四元数:
四元数辐角:arg(p)
幅角函数可找出一4-向量四元数偏离单位纯量(即:1)之角度。此函数输出一个纯量角度。
参考链接:
https://baike.baidu.com/item/%E5%9B%9B%E5%85%83%E6%95%B0/5795379?fr=aladdin
https://www.cnblogs.com/TIANHUAHUA/p/8031606.html
https://blog.csdn.net/allenjiao/article/details/83828021