1. 程式人生 > >四元數做旋轉過程的具體證明

四元數做旋轉過程的具體證明

文章目錄

背景

一般情況下我們都會使用矩陣做旋轉變換,繞某個軸或者繞任意向量,這都有在 做過介紹,雖然直接用矩陣旋轉這種方法很直觀,但是使用矩陣會遇到兩個問題:

  • 永珍節鎖
  • 矩陣旋轉過程的差值不平滑
永珍節鎖

旋轉過程中,會有一個自由度消失

現有旋轉矩陣 E(h,p,r)=[e00e01e02e10e11e12e20e21e22]=Rz(r)Rx(p)Ry(h) \mathbf{E}(h,p,r)= \begin{bmatrix} e_{00} & e_{01} & e_{02}\\ e_{10} & e_{11} & e_{12}\\ e_{20} & e_{21} & e_{22} \end{bmatrix}= \mathbf{R}_z(r) \mathbf{R}_x(p) \mathbf{R}_y(h)

先繞z軸旋轉角度r,再繞x軸旋轉角度p,再繞y軸旋轉角度h。 E=[cosrcoshsinrsinpsinhsinrcospcosrsinh+sinrsinpcoshsinrcosh+cosrsinpsinhcosrcospsinrsinhcosrsinpcoshcospsinhsinpcospcosh] \mathbf{E}= \begin{bmatrix} \cos{r}\cos{h}-\sin{r}\sin{p}\sin{h} & -\sin{r}\cos{p} & \cos{r}\sin{h}+\sin{r}\sin{p}\cos{h}\\ \sin{r}\cos{h}+\cos{r}\sin{p}\sin{h} & \cos{r}\cos{p} & \sin{r}\sin{h}-\cos{r}\sin{p}\cos{h}\\ -\cos{p}\sin{h} & \sin{p} & \cos{p}\cos{h} \end{bmatrix}
此時,我們家是 cosp=0,i.e.,p=±π/2+2πk\cos{p}=0,i.e.,p=\pm \pi/2+2\pi k,其中 kk 是一個整數。這個時候我們就失去了一個自由度,現在矩陣只依賴於一個角,r+hr+h 或者 rhr-h(不會同時是兩個)。 此時旋轉矩陣變為 E=
[cos(r+h)0sin(r+h)sin(r+h)0cos(r+h)010] \mathbf{E}= \begin{bmatrix} \cos{(r+h)} & 0 & \sin{(r+h)}\\ \sin{(r+h)} & 0 & -\cos{(r+h)}\\ 0 & 1 & 0 \end{bmatrix}
所以在這種情況下,對 rh 無論怎麼旋轉,得到的效果都是一樣的。

數學基礎

  • Definition. q^=(qv,qw)=iqx+jqy+kqz+qw=qv+qw,qv=iqx+jqy+kqz=(qx,qy,qz),i2=j2=k2=1,jk=kj=i,ki=ik=j,ij=ji=k.\hat \mathbf{q} = ({\mathbf{q}}_v,q_w)=iq_x+jq_y+kq_z+q_w=\mathbf{q}_v+q_w,\\ \mathbf{q}_v = iq_x+jq_y+kq_z = (q_x,q_y,q_z),\\ i^2=j^2=k^2= -1,jk=-kj=i,ki=-ik=j,ij=-ji=k. 其中 qwq_w 被稱為四元數的實部。
  • Multiplication: 四元數相乘
  • Addition: q^+r^=(qv,qw)+(rv,rw)=(qv+rv,qw+rw) \hat{\mathbf{q}}+\hat{\mathbf{r}}=(\mathbf{q}_v,q_w)+(\mathbf{r}_v,r_w)=(\mathbf{q}_v+\mathbf{r}_v,q_w+r_w)
  • Conjugate: q^=(qv,qw)=(qv,qw) \hat{\mathbf{q}}^*=(\mathbf{q}_v,q_w)^*=(-\mathbf{q}_v,q_w)
  • Norm: n(q)=q^q^=qvqv+qw2=qx2+qy2+qz2+qw2 n(\mathbf{q})=\sqrt{\hat{\mathbf{q}}^*\hat{\mathbf{q}}}=\sqrt{\mathbf{q}_v \cdot \mathbf{q}_v + q_w^2} = \sqrt{q_x^2+q_y^2+q_z^2+q_w^2}
  • Identity: i^=(0,1) \hat{\mathbf{i}}=(\mathbf{0},1) 其中要有 q^1q^=q^q^1=1\hat{\mathbf{q}}^{-1}\hat{\mathbf{q}}=\hat{\mathbf{q}}\hat{\mathbf{q}}^{-1}=1