四元数的作用
表达旋转。
旋转的表达方式有很多种,有欧拉角,旋转矩阵,轴角,四元数(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],前面三个表示轴,最后一个表示角度。
优缺点:
表示非常直观,也很紧凑。
轴角最大的一个局限就是不能进行简单的插值,此外,轴角形式的旋转不能直接施于点或矢量,必转换为矩阵或者四元素。
四元数与轴角转化
![v=(vx,vy,vz)](https://i-blog.csdnimg.cn/blog_migrate/fa8133ee3b39a68b56f2ebd23f327036.png)
![\theta](https://i-blog.csdnimg.cn/blog_migrate/38913e25408fcfcf20f3857911fe46e7.png)
那么与此相对应的四元数
注意:
![w=(wx,wy,wz)](https://i-blog.csdnimg.cn/blog_migrate/77c543b1b16fec7446117e1cc9deab6e.png)
![w^{'}](https://i-blog.csdnimg.cn/blog_migrate/1aeba49e940fcf350175cd324f72cbdd.png)
![qw=(0,wx,wy,wz)=0+wx*i+wy*j+wz*k](https://i-blog.csdnimg.cn/blog_migrate/3d8a01bba007b07f24277504d46dde96.png)
2.进行四元数运算
![qw^{'} =q*qw*q^{-1}](https://i-blog.csdnimg.cn/blog_migrate/ae38e73f33b223a594c89f0b8886212b.png%3Dq%2Aqw%2Aq%5E%7B-1%7D++)
3.产生的
![qw^{'}](https://i-blog.csdnimg.cn/blog_migrate/ae38e73f33b223a594c89f0b8886212b.png)
![qw^{'} =(0,wx^{'},wy^{'},wz^{'})=0+wx^{'}*i+wy^{'}*j+wz^{'}*k](https://i-blog.csdnimg.cn/blog_migrate/ae38e73f33b223a594c89f0b8886212b.png%3D%280%2Cwx%5E%7B%27%7D%2Cwy%5E%7B%27%7D%2Cwz%5E%7B%27%7D%29%3D0%2Bwx%5E%7B%27%7D%2Ai%2Bwy%5E%7B%27%7D%2Aj%2Bwz%5E%7B%27%7D%2Ak)
4.
![qw^{'}](https://i-blog.csdnimg.cn/blog_migrate/e5c3f5a76cb38ff05d002df437bd7d28.png)
![(wx^{'},wy^{'},wz^{'})](https://i-blog.csdnimg.cn/blog_migrate/002907a043e7cf66c81d5d4c0e16944a.png)
![w^{'}](https://i-blog.csdnimg.cn/blog_migrate/1aeba49e940fcf350175cd324f72cbdd.png)
![w^{'} =(wx^{'},wy^{'},wz^{'})](https://i-blog.csdnimg.cn/blog_migrate/1aeba49e940fcf350175cd324f72cbdd.png%3D%28wx%5E%7B%27%7D%2Cwy%5E%7B%27%7D%2Cwz%5E%7B%27%7D%29)
这样,就完成了一次四元数旋转运算。
同理,如果你有一个四元数:
那么,它对应一个以向量
![v=(vx,vy,vz)](https://i-blog.csdnimg.cn/blog_migrate/fa8133ee3b39a68b56f2ebd23f327036.png)
![\theta](https://i-blog.csdnimg.cn/blog_migrate/38913e25408fcfcf20f3857911fe46e7.png)
给定两个四元数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