四元数用来表示坐标系的旋转,通常表达旋转关系采用的方式有欧拉角、轴角等。
1. 欧拉角使用最为广泛,一般使用roll,pitch,yaw来表示旋转值,即三个:R、P、Y值。代表经过三次按照顺序的旋转变换,
而不同的旋转顺序会导致最终结果不同,所以存在不同的定义方法。
欧拉角存在的问题有:
1)不易插值;
2)存在万向节死锁现象;
2. 轴角通常表示为[x,y,z,theta],前面三个表示旋转轴,最后一个表示角度。
轴角存在的问题有:
1)不能进行简单的插值;
2)轴角形式的旋转不能直接施于点或矢量,必转换为矩阵或者四元数。
下面进入正题,四元数的数学概念
形如 ai+bj+ck+d 的数,a、b、c、d是实数。
其中,i^2=j^2=k^2=-1,ij=k、ji=-k、jk=i、kj=-i、ki=j、ik=-j
表达旋转的概念
在表达旋转时,使用一个3维向量表示转轴和一个角度分量表示绕此转轴的旋转角度,即(x,y,z,w),其中:
w = cos(theta/2)
x = ax * sin(theta/2)
y = ay * sin(theta/2)
z = az * sin(theta/2)
其中(ax,ay,az)表示轴的矢量,theta表示绕此轴的旋转角度。
四元数还有一些乘法、求共轭、求模、求逆等性质,不加以赘述。
其中,单位四元数的概念:
用四元数旋转矢量
给定一个矢量v1,再给定一个旋转的单位四元数q,让v旋转q。
首先将v改写成四元数的形式v1 = (x, y ,z, 0), 接下来要旋转v须用q前乘以矢量v,再后乘以q-1。
用后面乘以共轭的q也是一样的,因为都是单位四元数。
对于旋转多个四元数,
四元数的球面线性插值
四元数的一大优点在于可以进行球面的线性插值,过度均匀。
四元数的各种转换
1. 四元数转欧拉角
2. 欧拉角转四元数
3. 四元数转旋转矩阵
内容部分转载于https://blog.csdn.net/shenshen211/article/details/78492055