四元数的作用
表达旋转。
旋转的表达方式有很多种,有欧拉角,旋转矩阵,轴角,四元数(unit quaternion),unit quaternion是一种表达旋转的方式。
不同的旋转表达方式概览
(1)欧拉角:
欧拉角使用最简单的x,y,z值来分别表示在x,y,z轴上的旋转角度,其取值为0-360(或者0-2pi),一般使用roll,pitch,yaw来表示这些分量的旋转值。
优缺点:
这里的旋转是针对世界坐标系说的,这意味着第一次的旋转不会影响第二、三次的转轴。
1)不易在任意方向的旋转轴插值; 2)万向节死锁;3)旋转的次序无法确定。
(2)轴角:
用一个以单位矢量定义的旋转角,再加上一个标量定义的旋转角来表示旋转。通常的表示[x,y,z,theta],前面三个表示轴,最后一个表示角度。
优缺点:
表示非常直观,也很紧凑。
轴角最大的一个局限就是不能进行简单的插值,此外,轴角形式的旋转不能直接施于点或矢量,必转换为矩阵或者四元素。
四元数与轴角转化
那么与此相对应的四元数
注意:
2.进行四元数运算
3.产生的 一定是纯四元数,也就是说它的第一项为0,有如下形式:
4. 中的后三项 就是 :
这样,就完成了一次四元数旋转运算。
同理,如果你有一个四元数:
那么,它对应一个以向量 为轴旋转 角度的旋转操作(右手法则的旋转)。
给定两个四元数p和q,分别代表旋转P和Q,则乘积pq表示两个旋转的合成(即旋转了Q之后再旋转P),并不是用加法。四元数的乘法定义如下,利用简单的分配律就是了:
q1 * q2 =
(w1*w2 - x1*x2 - y1*y2 - z1*z2) +
(w1*x2 + x1*w2 + y1*z2 - z1*y2) i +
(w1*y2 - x1*z2 + y1*w2 + z1*x2) j +
(w1*z2 + x1*y2 - y1*x2 + z1*w2) k
由于q = w + x i + y j + z k中可以分为纯量w与向量x i + y j + z k,所以为了方便表示,将q表示为(S, V),其中S表示纯量w,V表示向量x i + y j + z k,所以四元数乘法又可以表示为:
q1 * q2 = (S1 + V1)*(S2 + V2) = S1*S2 - V1.V2 + V1XV2 + S1*V2 + S2*V1
四元素转欧拉角
欧拉角转四元素
四元素转旋转矩阵
R(q)=⎡⎣⎢1−2(y2+z2)2(xy+zw)2(xz−yw)2(xy−zw)1−2(x2+z2)2(yz+xw)2(xz+yw)2(yz−xw)1−2(x2+y2)⎤⎦⎥
欧拉角转旋转矩阵
Reference:
如何形象地理解四元数? - 回答作者: Yang Eninala http://zhihu.com/question/23005815/answer/33971127 (想看更多?下载 @知乎 App:http://weibo.com/p/100404711598 )
http://blog.csdn.net/silangquan/article/details/39008903#comments