四元数在旋转中的应用(一)

四元数在旋转中的应用(一)

四元数有着神奇的代数结构(人造的代数结构,提出者站在什么样的高度思考出来的,暂时不得而知),本文尝试从简单的角度去讨论四元数在姿态变换中的应用,顺带着给出推导中需要的四元数的代数性质。关于四元数的介绍,由于优快云中的一篇博客中的字数限制,所以写了两个部分,这是第一部分。剩下的部分请见我的另外一篇博客四元数在旋转中的应用(二)

一、四元数的定义

先给出四元数的形式:
q = a + b i + c j + d k (1) q=a+b\mathbf{i}+c\mathbf{j}+d\mathbf{k} \tag{1} q=a+bi+cj+dk(1)
其中 a , b , c , d ∈ R a,b,c,d \in \mathbb{R} a,b,c,dR i , j , k \mathbf{i}, \mathbf{j}, \mathbf{k} i,j,k可以理解为另外三个维度的基(四元数 q q q一共四个维度,第一个维度 a a a是实数,它的基可以看做是实数1)。

然后两个四元数 q 1 q_{1} q1 q 2 q_{2} q2可以相乘,其遵循的乘法规则如下,
q 1 q 2 = ( a 1 + b 1 i + c 1 j + d 1 k ) ( a 2 + b 2 i + c 2 j + d 2 k ) = a 1 a 2 + b 1 b 2 i 2 + c 1 c 2 j 2 + d 1 d 2 k 2 + a 1 ( b 2 i + c 2 j + d 2 k ) + a 2 ( b 1 i + c 1 j + d 1 k ) + ( b 1 c 2 i j + b 2 c 1 j i ) + ( c 1 d 2 j k + c 2 d 1 k j ) + ( d 1 b 2 k i + d 2 b 1 i k ) \begin{align} q_{1}q_{2} \notag \\ &= (a_{1}+b_{1}\mathbf{i}+c_{1}\mathbf{j}+d_{1}\mathbf{k})(a_{2}+b_{2}\mathbf{i}+c_{2}\mathbf{j}+d_{2}\mathbf{k}) \notag \\ &= a_{1}a_{2} + b_{1}b_{2}\mathbf{i}^2+c_{1}c_{2}\mathbf{j}^2+d_{1}d_{2}\mathbf{k}^{2} \notag \\ &\quad +a_{1}(b_{2}\mathbf{i}+c_{2}\mathbf{j}+d_{2}\mathbf{k}) + a_2(b_{1}\mathbf{i}+c_{1}\mathbf{j}+d_{1}\mathbf{k}) \notag \\ &\quad +(b_{1}c_{2}\mathbf{i}\mathbf{j}+b_{2}c_{1}\mathbf{j}\mathbf{i})+(c_{1}d_{2}\mathbf{j}\mathbf{k}+c_{2}d_{1}\mathbf{k}\mathbf{j}) + (d_{1}b_{2}\mathbf{k}\mathbf{i}+d_{2}b_{1}\mathbf{i}\mathbf{k}) \tag{2} \end{align} q1q2=(a1+b1i+c1j+d1k)(a2+b2i+c2j+d2k)=a1a2+b1b2i2+c1c2j2+d1d2k2+a1(b2i+c2j+d2k)+a2(b1i+c1j+d1k)+(b1c2ij+b2c1ji)+(c1d2jk+c2d1kj)+(d1b2ki+d2b1ik)(2)

四元数的运算规则有如下规定(为什么这么规定?这是个好问题,当数学家定义一个代数结构,可以研究这个代数结构的性质,这么规定,后续发现这些运算规则在计算向量旋转中完美适配,我目前的理解程度只能达到这个程度,肯定有更高的代数角度来看待这个问题,但是目前的我还达不到),
规定 1: i 2 = − 1 , j 2 = − 1 , k 2 = − 1 \mathbf{i}^2 = -1, \mathbf{j}^2=-1, \mathbf{k}^2=-1 i2=1,j2=1,k2=1
规定 2: i j = − j i = k , j k = − k j = i , k i = − i k = j , i 2 = − 1 , j 2 = − 1 , k 2 = − 1 \mathbf{i}\mathbf{j} = -\mathbf{j}\mathbf{i} = \mathbf{k}, \mathbf{j}\mathbf{k} = -\mathbf{k}\mathbf{j} = \mathbf{i}, \mathbf{k}\mathbf{i} = -\mathbf{i}\mathbf{k}=\mathbf{j}, \mathbf{i}^2=-1, \mathbf{j}^2=-1, \mathbf{k}^{2}=-1 ij=ji=k,jk=kj=i,ki=ik=j,i2=1,j2=1,k2=1

有了规定 1规定 2,则(2)式的四元数乘法可以重写为
q 1 q 2 = ( a 1 + b 1 i + c 1 j + d 1 k ) ( a 2 + b 2 i + c 2 j + d 2 k ) = a 1 a 2 − b 1 b 2 − c 1 c 2 − d 1 d 2 + a 1 ( b 2 i + c 2 j + d 2 k ) + a 2 ( b 1 i + c 1 j + d 1 k ) + ( b 1 c 2 − b 2 c 1 ) k + ( c 1 d 2 − c 2 d 1 ) i + ( d 1 b 2 − d 2 b 1 ) j \begin{align} q_{1}q_{2} \notag \\ &= (a_{1}+b_{1}\mathbf{i}+c_{1}\mathbf{j}+d_{1}\mathbf{k})(a_{2}+b_{2}\mathbf{i}+c_{2}\mathbf{j}+d_{2}\mathbf{k}) \notag \\ &= a_{1}a_{2} - b_{1}b_{2} - c_{1}c_{2} - d_{1}d_{2} \notag \\ &\quad +a_{1}(b_{2}\mathbf{i}+c_{2}\mathbf{j}+d_{2}\mathbf{k}) + a_2(b_{1}\mathbf{i}+c_{1}\mathbf{j}+d_{1}\mathbf{k}) \notag \\ &\quad +(b_{1}c_{2}-b_{2}c_{1})\mathbf{k}+(c_{1}d_{2} - c_{2}d_{1})\mathbf{i} + (d_{1}b_{2}-d_{2}b_{1})\mathbf{j} \tag{3} \end{align} q1q2=(a1+b1i+c1j+d1k)(a2+b2i+c2j+d2k)=a1a2b1b2c1c2d1d2+a1(b2i+c2j+d2k)+a2(b1i+c1j+d1k)+(b1c2b2c1)k+(c1d2c2d1)i+(d1b2d2b1)j(3)

为了书写的更加紧凑一些,也为了后续推导的方便,我们记四元数 q = s + v ⃗ q=s+\vec{v} q=s+v ,其中 s s s是实数部分, v ⃗ = b i + c j + d k \vec{v} = b\mathbf{i}+c\mathbf{j}+d\mathbf{k} v =bi+cj+dk

那么可以将(3)式中四元数的乘法重写为
q 1 q 2 = ( s 1 + v ⃗ 1 ) ( s 2 + v ⃗ 2 ) = s 1 s 2 − ( v ⃗ 1 , v ⃗ 2 ) + a 1 v ⃗ 2 + a 2 v ⃗ 1 + v ⃗ 1 × v ⃗ 2 \begin{align} q_{1}q_{2} \notag \\ &= (s_{1}+\vec{v}_{1})(s_{2}+\vec{v}_{2}) \notag \\ &= s_{1}s_{2} - (\vec{v}_1,\vec{v}_2) \notag \\ &\quad +a_{1}\vec{v}_{2} + a_2\vec{v}_{1} \notag \\ &\quad + \vec{v}_{1} \times \vec{v}_{2} \tag{4} \end{align} q1q2=(s1+v 1)(s2+v 2)=s1s2(v 1,v 2)+a1v 2+a2v 1+v 1×v 2(4)
式中, ( v ⃗ 1 , v ⃗ 2 ) = b 1 b 2 + c 1 c 2 + d 1 d 2 (\vec{v}_1,\vec{v}_2) = b_{1}b_{2} + c_{1}c_{2} + d_{1}d_{2} (v 1,v 2)=b1b2+c1c2+d1d2 v ⃗ 1 × v ⃗ 2 = ( b 1 c 2 − b 2 c 1 ) k + ( c 1 d 2 − c 2 d 1 ) i + ( d 1 b 2 − d 2 b 1 ) j \vec{v}_{1} \times \vec{v}_{2} = (b_{1}c_{2}-b_{2}c_{1})\mathbf{k}+(c_{1}d_{2} - c_{2}d_{1})\mathbf{i} + (d_{1}b_{2}-d_{2}b_{1})\mathbf{j} v 1×v 2=(b1c2b2c1)k+(c1d2c2d1)i+(d1b2d2b1)j。这里 ( v ⃗ 1 , v ⃗ 2 ) (\vec{v}_1,\vec{v}_2) (v 1,v 2)等同于向量的内积 v ⃗ 1 × v ⃗ 2 \vec{v}_{1} \times \vec{v}_{2} v 1×v 2等同于向量的外积

这里,另外对四元数 q = a + b i + c j + d k q=a+b\mathbf{i}+c\mathbf{j}+d\mathbf{k} q=a+bi+cj+dk有如下的额外定义。
定义1: 共轭(类似复数中的共轭)
q ‾ = a − ( b i + c j + d k ) (5) \overline{q}=a-(b\mathbf{i}+c\mathbf{j}+d\mathbf{k}) \tag{5} q=a(bi+cj+dk)(5)
定义2: 模长 (类似复数中的模长,另外如果一个四元数的模长为1,则称为单位四元数
∣ q ∣ = a 2 + b 2 + c 2 + d 2 (6) |q| = \sqrt{a^{2}+b^{2}+c^{2}+d^{2}} \tag{6} q=a2+b2+c2+d2 (6)
定义3: (四元数与它自身的逆相乘等于单位1,可自行验证)
q − 1 = q ‾ ∣ q ∣ 2 (7) q^{-1} = \frac{\overline{q}}{|q|^{2}} \tag{7} q1=q2q(7)

二、向量绕定轴旋转

Fig. 1
Fig. 1 向量 v ⃗ \vec{v} v 绕旋转轴 w ⃗ \vec{w} w 逆时针旋转 θ \theta θ角度
如Fig. 1所示,对于向量 v ⃗ \vec{v} v 绕旋转轴 w ⃗ \vec{w} w 逆时针旋转 θ \theta θ角度,可以把向量分解成投影在 w ⃗ \vec{w} w 上面的分量 v ⃗ 2 \vec{v}_{2} v 2和与 w ⃗ \vec{w} w 垂直的分量 v ⃗ 1 \vec{v}_{1} v 1, 则
v ⃗ 2 = ( w ⃗ , v ⃗ ) w ⃗ (8) \vec{v}_{2}=(\vec{w},\vec{v})\vec{w} \tag{8} v 2=(w ,v )w (8)
其中 ( w ⃗ , v ⃗ ) (\vec{w},\vec{v}) (w ,v )表示 w ⃗ \vec{w} w v ⃗ \vec{v} v 的内积。
v ⃗ 1 = v ⃗ − ( w ⃗ , v ⃗ ) w ⃗ (9) \vec{v}_{1}=\vec{v}-(\vec{w},\vec{v})\vec{w} \tag{9} v 1=v (w ,v )w (9)

向量 v ⃗ \vec{v} v 绕旋转轴 w ⃗ \vec{w} w 逆时针旋转 θ \theta θ角度,实际上只有垂直于 w ⃗ \vec{w} w 的分量 v ⃗ 1 \vec{v}_{1} v 1会绕着 w ⃗ \vec{w} w 逆时针旋转 θ \theta θ角度, v ⃗ 1 \vec{v}_{1} v 1逆时针旋转 θ \theta θ后得到的向量 v ⃗ 3 \vec{v}_{3} v 3
v ⃗ 3 = ( w ⃗ × v ⃗ 1 ) sin ⁡ θ + v ⃗ 1 cos ⁡ θ (10) \vec{v}_{3} = (\vec{w} \times \vec{v}_{1})\sin\theta + \vec{v}_{1}\cos\theta \tag{10} v 3=(w ×v 1)sinθ+v 1cosθ(10)
其中 w ⃗ × v ⃗ 1 \vec{w}\times\vec{v}_{1} w ×v 1 w ⃗ \vec{w} w v ⃗ 1 \vec{v}_{1} v 1的外积。式(10)中,相当于将 v ⃗ 3 \vec{v}_{3} v 3分解为在两个正交分量 v ⃗ 1 \vec{v}_{1} v 1 w ⃗ × v ⃗ 1 \vec{w}\times\vec{v}_{1} w ×v 1下的表示形式。

向量 v ⃗ \vec{v} v 绕旋转轴 w ⃗ \vec{w} w 逆时针旋转 θ \theta θ角度得到的向量 v ′ ⃗ \vec{v^{'}} v
v ′ ⃗ = v ⃗ 2 + v ⃗ 3 = ( w ⃗ , v ⃗ ) w ⃗ + ( w ⃗ × v ⃗ 1 ) sin ⁡ θ + v ⃗ 1 cos ⁡ θ = ( w ⃗ , v ⃗ ) w ⃗ + [ w ⃗ × ( v ⃗ − ( w ⃗ , v ⃗ ) w ⃗ ) ] sin ⁡ θ + ( v ⃗ − ( w ⃗ , v ⃗ ) w ⃗ ) cos ⁡ θ = ( w ⃗ , v ⃗ ) w ⃗ + ( w ⃗ × v ⃗ ) sin ⁡ θ + ( v ⃗ − ( w ⃗ , v ⃗ ) w ⃗ ) cos ⁡ θ = ( w ⃗ × v ⃗ ) sin ⁡ θ + v ⃗ cos ⁡ θ + 2 sin ⁡ 2 θ 2 ( w ⃗ , v ⃗ ) w ⃗ \begin{align} \vec{v^{'}} \notag \\ &= \vec{v}_{2} + \vec{v}_{3} \notag \\ &= (\vec{w}, \vec{v})\vec{w} + (\vec{w} \times \vec{v}_{1})\sin\theta + \vec{v}_{1}\cos\theta \notag \\ &= (\vec{w}, \vec{v})\vec{w} + [\vec{w} \times (\vec{v}-(\vec{w},\vec{v})\vec{w})]\sin\theta + (\vec{v}-(\vec{w},\vec{v})\vec{w})\cos\theta \notag \\ &= (\vec{w}, \vec{v})\vec{w} + (\vec{w} \times \vec{v})\sin\theta + (\vec{v}-(\vec{w},\vec{v})\vec{w})\cos\theta \notag \\ &= (\vec{w} \times \vec{v})\sin\theta + \vec{v}\cos\theta + 2\sin^{2}\frac{\theta}{2}(\vec{w},\vec{v})\vec{w} \tag{11} \end{align} v =v 2+v 3=(w ,v )w +(w ×v 1)sinθ+v 1cosθ=(w ,v )w +[w ×(v (w ,v )w )]sinθ+(v (w ,v )w )cosθ=(w ,v )w +(w ×v )sinθ+(v (w ,v )w )cosθ=(w ×v )sinθ+v cosθ+2sin22θ(w ,v )w (11)

到这里,我们通过基本的向量运算计算出来向量 v ⃗ \vec{v} v 绕旋转轴 w ⃗ \vec{w} w 逆时针旋转 θ \theta θ角度得到的向量 v ′ ⃗ \vec{v^{'}} v

对于(11)式,可以重新整理为
v ′ ⃗ = ( w ⃗ × v ⃗ ) sin ⁡ θ + v ⃗ cos ⁡ θ + 2 sin ⁡ 2 θ 2 ( w ⃗ , v ⃗ ) w ⃗ = sin ⁡ θ [   0 − w z w y   w z 0 − w x   − w y w x 0 ] v ⃗ + cos ⁡ θ [   1 0 0   0 1 0   0 0 1 ] v ⃗ + 2 sin ⁡ 2 θ 2 [   w x 2 w x w y w x w z   w x w y w y 2 w y w z   w x w z w y w z w z 2 ] v ⃗ = [   cos ⁡ θ + 2 sin ⁡ 2 θ 2 w x 2 − w z sin ⁡ θ + 2 sin ⁡ 2 θ 2 w x w y w y sin ⁡ θ + 2 sin ⁡ 2 θ 2 w x w z   w z sin ⁡ θ + 2 sin ⁡ 2 θ 2 w x w y cos ⁡ θ + 2 sin ⁡ 2 θ 2 w y 2 − w x sin ⁡ θ + 2 sin ⁡ 2 θ 2 w y w z   − w y sin ⁡ θ + 2 sin ⁡ 2 θ 2 w x w z w x sin ⁡ θ + 2 sin ⁡ 2 θ 2 w y w z cos ⁡ θ + 2 sin ⁡ 2 θ 2 w z 2 ] v ⃗ = [   1 − w z θ w y θ   w z θ 1 − w x θ   − w y θ w x θ 1 ] v ⃗ \begin{align} \vec{v^{'}} \notag \\ &= (\vec{w} \times \vec{v})\sin\theta + \vec{v}\cos\theta + 2\sin^{2}\frac{\theta}{2}(\vec{w},\vec{v})\vec{w} \notag \\ &=\sin\theta\left[ \begin{array}{ccc} \ 0 & -w_{z} & w_{y} \\ \ w_{z} & 0 & -w_{x}\\ \ -w_{y} & w_{x} & 0 \end{array} \right]\vec{v} + \cos\theta\left[ \begin{array}{ccc} \ 1 & 0 & 0 \\ \ 0 & 1 & 0\\ \ 0 & 0 & 1 \end{array} \right]\vec{v} + 2\sin^{2}\frac{\theta}{2}\left[ \begin{array}{ccc} \ w^{2}_{x} & w_{x}w_{y} & w_{x}w_{z} \\ \ w_{x}w_{y} & w^{2}_{y} & w_{y}w_{z} \\ \ w_{x}w_{z} & w_{y}w_{z} & w^{2}_{z} \end{array} \right]\vec{v} \notag \\ &=\left[ \begin{array}{ccc} \ \cos\theta+2\sin^{2}\frac{\theta}{2}w^{2}_{x} & -w_{z}\sin\theta+2\sin^{2}\frac{\theta}{2}w_{x}w_{y} & w_{y}\sin\theta+2\sin^{2}\frac{\theta}{2}w_{x}w_{z} \\ \ w_{z}\sin\theta+2\sin^{2}\frac{\theta}{2}w_{x}w_{y} & \cos\theta+2\sin^{2}\frac{\theta}{2}w^{2}_{y} & -w_{x}\sin\theta+2\sin^{2}\frac{\theta}{2}w_{y}w_{z} \\ \ -w_{y}\sin\theta+2\sin^{2}\frac{\theta}{2}w_{x}w_{z} & w_{x}\sin\theta+2\sin^{2}\frac{\theta}{2}w_{y}w_{z} & \cos\theta+2\sin^{2}\frac{\theta}{2}w^{2}_{z} \end{array} \right]\vec{v} \notag \\ &=\left[ \begin{array}{ccc} \ 1 & -w_{z}\theta & w_{y}\theta \\ \ w_{z}\theta & 1 & -w_{x}\theta \\ \ -w_{y}\theta & w_{x}\theta & 1 \end{array} \right]\vec{v} \tag{12} \end{align} v =(w ×v )sinθ+v cosθ+2sin22θ(w ,v )w =sinθ  0 wz wywz0wxwywx0 v +cosθ  1 0 0010001 v +2sin22θ  wx2 wxwy wxwzwxwywy2wywzwxwzwywzwz2 v =  cosθ+2sin22θwx2 wzsinθ+2sin22θwxwy wysinθ+2sin22θwxwzwzsinθ+2sin22θwxwycosθ+2sin22θwy2wxsinθ+2sin22θwywzwysinθ+2sin22θwxwzwxsinθ+2sin22θwywzcosθ+2sin22θwz2 v =  1 wzθ wyθwzθ1wxθwyθwxθ1 v (12)
式(12)中的倒数第二步到倒数第一步,成立的前提是转动角度 θ \theta θ趋向于0时。

三、用四元数来旋转“向量”

现在,记单位四元数 q = s + n ⃗ q=s+\vec{n} q=s+n ,其中 n ⃗ = b i + c j + d k \vec{n}=b\mathbf{i}+c\mathbf{j}+d\mathbf{k} n =bi+cj+dk,则 q q q的逆 q − 1 = s − n ⃗ q^{-1}=s-\vec{n} q1=sn 。 (请参照(6)式和(7)式的定义)
另外,记四元数 v = 0 + n ⃗ v = 0 + \vec{n} v=0+n 。(注意这个四元数是一个普通的四元数,并不一定是单位四元数,但是它的实数部分为0)
下面来计算 q v q − 1 qvq^{-1} qvq1
q v q − 1 = ( s + n ⃗ ) ( 0 + v ⃗ ) ( s − n ⃗ ) = [ − ( n ⃗ , v ⃗ ) + s v ⃗ + n ⃗ × v ⃗ ] ( s − n ⃗ ) = − s ( n ⃗ , v ⃗ ) + ( ( s v ⃗ + n ⃗ × v ⃗ ) , n ⃗ ) + ( n ⃗ , v ⃗ ) n ⃗ + s 2 v ⃗ + s n ⃗ × v ⃗ − ( s v ⃗ + n ⃗ × v ⃗ ) × n ⃗ = − s ( n ⃗ , v ⃗ ) + s ( v ⃗ , n ⃗ ) + ( ( n ⃗ × v ⃗ ) , n ⃗ ) + ( n ⃗ , v ⃗ ) n ⃗ + s 2 v ⃗ + s n ⃗ × v ⃗ − s ( v ⃗ × n ⃗ ) − ( n ⃗ × v ⃗ ) × n ⃗ = s 2 v ⃗ + ( n ⃗ , v ⃗ ) n ⃗ + 2 s ( n ⃗ × v ⃗ ) − ( n ⃗ × v ⃗ ) × n ⃗ \begin{align} qvq^{-1} \notag \\ &= (s+\vec{n})(0+\vec{v})(s-\vec{n}) \notag \\ &= [-(\vec{n},\vec{v})+s\vec{v}+\vec{n}\times\vec{v}](s-\vec{n}) \notag \\ &= -s(\vec{n},\vec{v})+((s\vec{v}+\vec{n}\times\vec{v}),\vec{n})+(\vec{n},\vec{v})\vec{n}+s^{2}\vec{v}+s\vec{n}\times\vec{v}-(s\vec{v}+\vec{n}\times\vec{v})\times\vec{n} \notag \\ &= -s(\vec{n},\vec{v}) + s(\vec{v},\vec{n})+((\vec{n}\times\vec{v}),\vec{n})+(\vec{n},\vec{v})\vec{n}+s^{2}\vec{v}+s\vec{n}\times\vec{v}-s(\vec{v}\times\vec{n})-(\vec{n}\times\vec{v})\times\vec{n} \notag \\ &= s^{2}\vec{v}+(\vec{n},\vec{v})\vec{n}+2s(\vec{n}\times\vec{v})-(\vec{n}\times\vec{v})\times\vec{n} \tag{13} \end{align} qvq1=(s+n )(0+v )(sn )=[(n ,v )+sv +n ×v ](sn )=s(n ,v )+((sv +n ×v ),n )+(n ,v )n +s2v +sn ×v (sv +n ×v )×n =s(n ,v )+s(v ,n )+((n ×v ),n )+(n ,v )n +s2v +sn ×v s(v ×n )(n ×v )×n =s2v +(n ,v )n +2s(n ×v )(n ×v )×n (13)
对于(13)式的化简,需要使用下式引理
( n ⃗ × v ⃗ ) × n ⃗ = ( n ⃗ , n ⃗ ) v ⃗ − ( n ⃗ , v ⃗ ) n ⃗ (14) (\vec{n}\times\vec{v})\times\vec{n}=(\vec{n},\vec{n})\vec{v}-(\vec{n},\vec{v})\vec{n} \tag{14} (n ×v )×n =(n ,n )v (n ,v )n (14)

将(14)式代入(13)式中,得到
q v q − 1 = s 2 v ⃗ + ( n ⃗ , v ⃗ ) n ⃗ + 2 s ( n ⃗ × v ⃗ ) − ( n ⃗ × v ⃗ ) × n ⃗ = s 2 v ⃗ + ( n ⃗ , v ⃗ ) n ⃗ + 2 s ( n ⃗ × v ⃗ ) − [ ( n ⃗ , n ⃗ ) v ⃗ − ( n ⃗ , v ⃗ ) n ⃗ ] = ( s 2 − ∣ ∣ n ⃗ ∣ ∣ 2 ) v ⃗ + 2 ( n ⃗ , v ⃗ ) n ⃗ + 2 s ( n ⃗ × v ⃗ ) \begin{align} qvq^{-1} \notag \\ &= s^{2}\vec{v}+(\vec{n},\vec{v})\vec{n}+2s(\vec{n}\times\vec{v})-(\vec{n}\times\vec{v})\times\vec{n} \notag \\ &= s^{2}\vec{v}+(\vec{n},\vec{v})\vec{n}+2s(\vec{n}\times\vec{v})-[(\vec{n},\vec{n})\vec{v}-(\vec{n},\vec{v})\vec{n}] \notag \\ &= (s^{2}-||\vec{n}||^{2})\vec{v}+2(\vec{n},\vec{v})\vec{n}+2s(\vec{n}\times\vec{v}) \tag{15} \end{align} qvq1=s2v +(n ,v )n +2s(n ×v )(n ×v )×n =s2v +(n ,v )n +2s(n ×v )[(n ,n )v (n ,v )n ]=(s2∣∣n 2)v +2(n ,v )n +2s(n ×v )(15)
对(15)式,我们令 n ⃗ = t n ⃗ 0 \vec{n}=t\vec{n}_{0} n =tn 0,其中 n ⃗ 0 \vec{n}_{0} n 0为单位向量。则(15)式可以重写为
q v q − 1 = ( s 2 − ∣ ∣ n ⃗ ∣ ∣ 2 ) v ⃗ + 2 ( n ⃗ , v ⃗ ) n ⃗ + 2 s ( n ⃗ × v ⃗ ) = ( s 2 − t 2 ) v ⃗ + 2 t 2 ( n ⃗ 0 , v ⃗ ) n ⃗ 0 + 2 s t ( n ⃗ 0 × v ⃗ ) \begin{align} qvq^{-1} \notag \\ &= (s^{2}-||\vec{n}||^{2})\vec{v}+2(\vec{n},\vec{v})\vec{n}+2s(\vec{n}\times\vec{v}) \notag \\ &= (s^{2}-t^{2})\vec{v}+2t^{2}(\vec{n}_{0},\vec{v})\vec{n}_{0}+2st(\vec{n}_{0}\times\vec{v}) \tag{16} \end{align} qvq1=(s2∣∣n 2)v +2(n ,v )n +2s(n ×v )=(s2t2)v +2t2(n 0,v )n 0+2st(n 0×v )(16)
令(16)式中的 s = cos ⁡ θ 2 s=\cos\frac{\theta}{2} s=cos2θ t = sin ⁡ θ 2 t=\sin\frac{\theta}{2} t=sin2θ n ⃗ 0 = w ⃗ \vec{n}_{0}=\vec{w} n 0=w ,则
q v q − 1 = ( s 2 − t 2 ) v ⃗ + 2 t 2 ( n ⃗ 0 , v ⃗ ) n ⃗ 0 + 2 s t ( n ⃗ 0 × v ⃗ ) = cos ⁡ θ v ⃗ + 2 sin ⁡ 2 θ 2 ( w ⃗ , v ⃗ ) w ⃗ + sin ⁡ θ ( w ⃗ × v ⃗ ) \begin{align} qvq^{-1} \notag \\ &= (s^{2}-t^{2})\vec{v}+2t^{2}(\vec{n}_{0},\vec{v})\vec{n}_{0}+2st(\vec{n}_{0}\times\vec{v}) \notag \\ &= \cos\theta\vec{v} + 2\sin^{2}\frac{\theta}{2}(\vec{w},\vec{v})\vec{w}+\sin\theta(\vec{w}\times\vec{v}) \tag{17} \end{align} qvq1=(s2t2)v +2t2(n 0,v )n 0+2st(n 0×v )=cosθv +2sin22θ(w ,v )w +sinθ(w ×v )(17)
比较(17)式和(11)式,发现两个式子的结果是一样的。也就是说,如果需要计算向量 v ⃗ \vec{v} v 绕旋转轴 w ⃗ \vec{w} w 逆时针旋转 θ \theta θ角度得到的向量 v ′ ⃗ \vec{v^{'}} v ,可以使用四元数的框架进行计算,令单位四元数 q = cos ⁡ θ 2 + sin ⁡ θ 2 w ⃗ q=\cos\frac{\theta}{2} + \sin\frac{\theta}{2}\vec{w} q=cos2θ+sin2θw ,(旋转轴 w ⃗ \vec{w} w 是单位向量),令四元数 v = 0 + v ⃗ v=0+\vec{v} v=0+v ,此时 q − 1 = cos ⁡ θ 2 − sin ⁡ θ 2 w ⃗ q^{-1}=\cos\frac{\theta}{2}-\sin\frac{\theta}{2}\vec{w} q1=cos2θsin2θw ,然后计算出来的四元数 q v q − 1 qvq^{-1} qvq1的实数部分为0,虚数部分就是旋转后得到的向量 v ′ ⃗ \vec{v^{'}} v

请转移到我的另外一篇博客四元数在旋转中的应用(二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值