空间旋转与四元数

参考资料:https://krasjet.github.io/quaternion/quaternion.pdf

一、二维空间与复数

  1. 已知复数 z = a + b i z=a+bi z=a+bi,我们规定其向量表示形式 [ a b ] \left [ \begin{matrix}a\\b\end{matrix}\right ] [ab]。我们可以将其看成是复数域的两个基底 { 1 , i } \{1,i\} {1,i}的各自系数

  2. 对于复数 z 1 = a + b i , z 2 = c + d i z_1=a+bi,z_2=c+di z1=a+bi,z2=c+di,它们的乘积是 z 1 z 2 = ( a c − b d ) + ( b c + a d ) i = [ a − b b a ] [ c d ] z_1z_2=(ac-bd)+(bc+ad)i=\left [ \begin{matrix}a&-b\\b&a\end{matrix}\right ]\left [ \begin{matrix}c\\d\end{matrix}\right ] z1z2=(acbd)+(bc+ad)i=[abba][cd]

    对于这个结果,其右侧的 [ c d ] \left [ \begin{matrix}c\\d\end{matrix}\right ] [cd] z 2 z_2 z2的向量形式,而左边则是 z 1 z_1 z1矩阵表示形式 我们可以做一些尝试,比如 z 1 z 2 = [ a − b b a ] [ c − d d c ] = [ a c − b d − a d − b c a d + b c a c − b d ] z_1z_2=\left [ \begin{matrix}a&-b\\b&a\end{matrix}\right ]\left [ \begin{matrix}c&-d\\d&c\end{matrix}\right ]=\left [ \begin{matrix}ac-bd&-ad-bc\\ad+bc&ac-bd\end{matrix}\right ] z1z2=[abba][cddc]=[acbdad+bcadbcacbd],所以复数相乘就是各自的矩阵形式相乘的结果

    同时可以验证复数相乘时的交换律、结合律、分配律、 i 2 = − 1 i^2=-1 i2=1

  3. 复数的共轭 z ‾ = a − b i \overline{z}=a-bi z=abi,复数的模长 ∥ z ∥ = a 2 + b 2 = z z ‾ \left\| z\right\|=\sqrt{a^2+b^2}=\sqrt{z\overline{z}} z=a2+b2 =zz

  4. 复数的旋转可以从矩阵表示中窥见一二,对于复数 z = a + b i z=a+bi z=a+bi,考虑其矩阵表示 [ a − b b a ] = a 2 + b 2 [ a a 2 + b 2 − b a 2 + b 2 b a 2 + b 2 a a 2 + b 2 ] \left [ \begin{matrix}a&-b\\b&a\end{matrix}\right ]=\sqrt{a^2+b^2}\left [ \begin{matrix}\frac {a}{\sqrt{a^2+b^2}}&-\frac b {\sqrt{a^2+b^2}}\\ \frac b {\sqrt{a^2+b^2}}&\frac a {\sqrt{a^2+b^2}}\end{matrix}\right ] [abba]=a2+b2 [a2+b2 aa2+b2 ba2+b2 ba2+b2 a]
    将复数 z z z投射到复数坐标轴中,可以看到其矩阵表示可以表示为 [ ∥ z ∥ 0 0 ∥ z ∥ ] [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] \left [ \begin{matrix}\left\| z\right\|&0\\0&\left\| z\right\|\end{matrix}\right ]\left [ \begin{matrix}\cos \theta&-\sin \theta \\ \sin \theta&\cos \theta\end{matrix}\right ] [z00z][cosθsinθsinθcosθ]
    https://krasjet.github.io/quaternion/quaternion.pdf
    其中 [ ∥ z ∥ 0 0 ∥ z ∥ ] \left [ \begin{matrix}\left\| z\right\|&0\\0&\left\| z\right\|\end{matrix}\right ] [z00z]是经典的放缩矩阵, [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] \left [ \begin{matrix}\cos \theta&-\sin \theta \\ \sin \theta&\cos \theta\end{matrix}\right ] [cosθsinθsinθcosθ]是经典的旋转矩阵,所以复数相乘<=>对应矩阵形式相乘<=>旋转与缩放变换的复合
    同时可以验证,2D空间下的旋转是可以复合的,与次序无关。

二、三维空间下的旋转

定义:先假定旋转轴经过原点(如果不经过原点,则将旋转轴与待旋转物体 平移至旋转轴经过原点,完成旋转后再平移回去),这个旋转轴的单位向量 u = ( x , y , z ) T \mathbf{u}=(x,y,z)^T u=(x,y,z)T,待旋转物体我们简化为一个向量 v \mathbf{v} v,旋转角度为(逆时针方向) θ θ θ,注意接下来所有的分析与推导都是右手坐标系
在这里插入图片描述
向量分解
对待旋转向量进行分解 v = v ∥ + v ⊥ \mathbf{v}=\mathbf{v}_{\Vert}+\mathbf{v}_{\perp } v=v+v,分别为“平行于旋转轴 u \mathbf{u} u的分量”和“垂直于旋转轴 u \mathbf{u} u的分量”
在这里插入图片描述
其中“平行于旋转轴 u \mathbf{u} u的分量”是待旋转向量的投影,也即 v ∥ = ( u ⋅ v ) u \mathbf{v}_{\Vert}=(\mathbf{u}\cdot\mathbf{v})\mathbf{u} v=(uv)u;又由向量加减计算出垂直于旋转轴 u \mathbf{u} u的分量”,也即 v ⊥ = v − v ∥ = v − ( u ⋅ v ) u \mathbf{v}_{\perp}=\mathbf{v}-\mathbf{v}_{\Vert}=\mathbf{v}-(\mathbf{u}\cdot\mathbf{v})\mathbf{u} v=vv=v(uv)u

易知 v ∥ \mathbf{v}_{\Vert} v旋转多少度都不会发生变化,所以我们只需要考虑 v ⊥ \mathbf{v}_{\perp} v的旋转结果

在右手坐标系下,用叉乘计算出垂直于 v ⊥ , u \mathbf{v}_{\perp},\mathbf{u} v,u所在平面的另一向量 w = u × v ⊥ \mathbf{w}=\mathbf{u}\times\mathbf{v}_{\perp} w=u×v,那么把 v ⊥ , w \mathbf{v}_{\perp},\mathbf{w} v,w分别看成是二维平面的 X , Y X,Y X,Y轴,那么旋转后的向量 v ⊥ ′ \mathbf{v}'_{\perp} v的计算结果显而易见: v ⊥ ′ = v ⊥ cos ⁡ θ + ( u × v ⊥ ) sin ⁡ θ = v ⊥ cos ⁡ θ + ( u × v ) sin ⁡ θ \mathbf{v}'_{\perp}=\mathbf{v}_{\perp}\cos \theta+(\mathbf{u}\times\mathbf{v}_{\perp})\sin \theta=\mathbf{v}_{\perp}\cos \theta+(\mathbf{u}\times\mathbf{v})\sin \theta v=vcosθ+(u×v)sinθ=vcosθ+(u×v)sinθ
其中第二个等号来自叉乘的分配率 u × v ⊥ = u × ( v − v ∥ ) = u × v − u × v ∥ = u × v \mathbf{u}\times\mathbf{v}_{\perp}=\mathbf{u}\times(\mathbf{v}-\mathbf{v}_{\Vert})=\mathbf{u}\times\mathbf{v}-\mathbf{u}\times\mathbf{v}_{\Vert}=\mathbf{u}\times\mathbf{v} u×v=u×(vv)=u×vu×v=u×v

将两分量进行组合后,可得旋转后的向量 v ′ = cos ⁡ θ v + ( 1 − cos ⁡ θ ) ( u ⋅ v ) u + sin ⁡ θ ( u × v ) \mathbf{v}'=\cos\theta\mathbf{v}+(1-\cos\theta)(\mathbf{u}\cdot\mathbf{v})\mathbf{u}+\sin\theta(\mathbf{u}\times\mathbf{v}) v=cosθv+(1cosθ)(uv)u+sinθ(u×v)

三、四元数

四元数的定义与复数类似,但四元数有三个虚部和一个实部,也即四元数 q = a + b i + c j + d k q=a+bi+cj+dk q=a+bi+cj+dk,其中 a , b , c , d a,b,c,d a,b,c,d均为实数,而 i , j , k i,j,k i,j,k是虚基,满足 i 2 = j 2 = k 2 = i j k = − 1 i^2=j^2=k^2=ijk=-1 i2=j2=k2=ijk=1
类似地,四元数也可以写成向量形式 q = [ a b c d ] = [ a , v ] ,其中 v = [ b c d ] q=\left [\begin{matrix}a\\b\\c\\d\end{matrix}\right]=[a,\mathbf{v}],其中\mathbf{v}=\left [\begin{matrix}b\\c\\d\end{matrix}\right] q= abcd =[a,v],其中v= bcd

i 2 = j 2 = k 2 = i j k = − 1 i^2=j^2=k^2=ijk=-1 i2=j2=k2=ijk=1,我们可以推出 i j = k , k j = − i , i k = − j ij=k,kj=-i,ik=-j ij=k,kj=i,ik=j,全部结果如下所示(列为左乘,行为右乘)
在这里插入图片描述

四元数的模长、加法、数乘与复数基本类似,但乘法不一样,四元数的乘法满足分配率和结合律,但不满足交换律

具体来说,对于 q 1 = [ a 1 b 1 c 1 d 1 ] = [ a 1 , v 1 ] , q 2 = [ a 2 b 2 c 2 d 2 ] = [ a 2 , v 2 ] q_1=\left [\begin{matrix}a_1\\b_1\\c_1\\d_1\end{matrix}\right]=[a_1,\mathbf{v}_1],q_2=\left [\begin{matrix}a_2\\b_2\\c_2\\d_2\end{matrix}\right]=[a_2,\mathbf{v}_2] q1= a1b1c1d1 =[a1,v1],q2= a2b2c2d2 =[a2,v2],其中 v 1 = [ b 1 c 1 d 1 ] , v 2 = [ b 2 c 2 d 2 ] \mathbf{v}_1=\left [\begin{matrix}b_1\\c_1\\d_1\end{matrix}\right],\mathbf{v}_2=\left [\begin{matrix}b_2\\c_2\\d_2\end{matrix}\right] v1= b1c1d1 ,v2= b2c2d2 ,他们的乘积结果为

q 1 q 2 = [ a 1 − b 1 − c 1 − d 1 b 1 a 1 − d 1 c 1 c 1 d 1 a 1 − b 1 d 1 − c 1 b 1 a 1 ] [ a 2 b 2 c 2 d 2 ] = [ a 1 a 2 − v 1 ⋅ v 2 , a 1 v 2 + a 2 v 1 + v 1 × v 2 ] q_1q_2=\left [\begin{matrix}a_1&-b_1&-c_1&-d_1\\ b_1&a_1&-d_1&c_1\\ c_1&d_1&a_1&-b_1\\ d_1&-c_1&b_1&a_1\end{matrix}\right ]\left [\begin{matrix}a_2\\b_2\\c_2\\d_2\end{matrix}\right]=[a_1a_2-\mathbf{v}_1\cdot \mathbf{v}_2,a_1\mathbf{v}_2+a_2\mathbf{v}_1+\mathbf{v}_1\times \mathbf{v}_2] q1q2= a1b1c1d1b1a1d1c1c1d1a1b1d1c1b1a1 a2b2c2d2 =[a1a2v1v2,a1v2+a2v1+v1×v2]

注意上式左边的矩阵各系数是由 { 1 , i , j , k } \{1,i,j,k\} {1,i,j,k}乘积结果的 4 × 4 4\times 4 4×4计算表格得出的。

与左乘类似,四元数的右乘也可以写成矩阵形式
q 2 q 1 = [ a 1 − b 1 − c 1 − d 1 b 1 a 1 d 1 − c 1 c 1 − d 1 a 1 b 1 d 1 c 1 − b 1 a 1 ] [ a 2 b 2 c 2 d 2 ] = [ a 1 a 2 − v 1 ⋅ v 2 , a 1 v 2 + a 2 v 1 − v 1 × v 2 ] q_2q_1=\left [\begin{matrix}a_1&-b_1&-c_1&-d_1\\ b_1&a_1&d_1&-c_1\\ c_1&-d_1&a_1&b_1\\ d_1&c_1&-b_1&a_1\end{matrix}\right ]\left [\begin{matrix}a_2\\b_2\\c_2\\d_2\end{matrix}\right]=[a_1a_2-\mathbf{v}_1\cdot \mathbf{v}_2,a_1\mathbf{v}_2+a_2\mathbf{v}_1-\mathbf{v}_1\times \mathbf{v}_2] q2q1= a1b1c1d1b1a1d1c1c1d1a1b1d1c1b1a1 a2b2c2d2 =[a1a2v1v2,a1v2+a2v1v1×v2]


引入概念:纯四元数,意为实部为0的四元数,也即 v = [ 0 , v ] v=[0,\mathbf{v}] v=[0,v],我们用 v v v来表示一个纯四元数 [ 0 , v ] [0,\mathbf{v}] [0,v]
引入概念:四元数的逆,对于一个四元数 q q q来说,其逆 q − 1 q^{-1} q1满足 q q − 1 = q − 1 q = 1 qq^{-1}=q^{-1}q=1 qq1=q1q=1
引入概念:四元数的共轭,对于一个四元数 q q q来说,其共轭 q ∗ = [ a , − v ] q^{*}=[a,-\mathbf{v}] q=[a,v],所以根据上面推导的四元数的乘法可得 q ∗ q = q q ∗ = [ a 2 + v ⋅ v , 0 ] = ∥ q ∥ 2 q^{*}q=qq^{*}=[a^2+\mathbf{v}\cdot \mathbf{v},0]=\Vert q\Vert^2 qq=qq=[a2+vv,0]=q2

所以建立起逆和共轭的关系 q − 1 = q ∗ ∥ q ∥ 2 q^{-1}=\cfrac{q^*}{\Vert q\Vert^2} q1=q2q,且当 q q q为单位四元数( ∥ q ∥ 2 = 1 \Vert q\Vert^2=1 q2=1)时,其共轭与逆相等。

现在考虑用四元数来建立表示向量 v \mathbf{v} v的垂直部分 v ⊥ \mathbf{v}_{\perp} v绕旋转轴 u \mathbf{u} u的旋转过程:
将三维向量划归为纯四元数 v ⊥ = [ 0 , v ⊥ ] , v ⊥ ′ = [ 0 , v ⊥ ′ ] , v = [ 0 , v ] , u = [ 0 , u ] v_{\perp}=[0,\mathbf{v}_{\perp}],v'_{\perp}=[0,\mathbf{v}'_{\perp}],v=[0,\mathbf{v}],u=[0,\mathbf{u}] v=[0,v],v=[0,v],v=[0,v],u=[0,u]

又根据四元数乘法可得 u v ⊥ = [ − u ⋅ v ⊥ , u × v ⊥ ] = [ 0 , u × v ⊥ ] uv_{\perp}=[-\mathbf{u}\cdot\mathbf{v}_{\perp},\mathbf{u}\times\mathbf{v}_{\perp}]=[0,\mathbf{u}\times\mathbf{v}_{\perp}] uv=[uv,u×v]=[0,u×v]

最后将第二节中的垂直分量旋转后的计算结果 v ⊥ ′ = v ⊥ cos ⁡ θ + ( u × v ⊥ ) sin ⁡ θ \mathbf{v}'_{\perp}=\mathbf{v}_{\perp}\cos \theta+(\mathbf{u}\times\mathbf{v}_{\perp})\sin \theta v=vcosθ+(u×v)sinθ转化为四元数的形式
v ⊥ ′ = v ⊥ cos ⁡ θ + u v ⊥ sin ⁡ θ v'_{\perp}=v_{\perp}\cos\theta+uv_{\perp}\sin \theta v=vcosθ+uvsinθ

定义四元数 q = [ cos ⁡ θ , sin ⁡ θ u ] q=[\cos\theta,\sin\theta \mathbf{u}] q=[cosθ,sinθu],则 v ⊥ ′ = q v ⊥ v'_{\perp}=qv_{\perp} v=qv,且有
v ′ = v ∥ + q v ⊥ v'=v_{\Vert}+qv_{\perp} v=v+qv

如何把形式更进一步?
考虑 p = [ cos ⁡ θ 2 , sin ⁡ θ 2 u ] p=[\cos\frac \theta 2,\sin \frac \theta 2\mathbf{u}] p=[cos2θ,sin2θu],则有 p 2 = [ cos ⁡ 2 θ 2 − sin ⁡ 2 θ 2 , 2 sin ⁡ θ 2 cos ⁡ θ 2 u ] = [ cos ⁡ θ , sin ⁡ θ u ] = q p^2=[\cos^2\frac \theta 2-\sin^2\frac \theta 2,2\sin\frac \theta 2\cos\frac \theta 2\mathbf{u}]=[\cos\theta,\sin\theta\mathbf{u}]=q p2=[cos22θsin22θ,2sin2θcos2θu]=[cosθ,sinθu]=q
∥ p ∥ = 1 , p − 1 = p ∗ ∥ p ∥ 2 = p ∗ = [ cos ⁡ θ 2 , − sin ⁡ θ 2 u ] \Vert p\Vert =1,p^{-1}=\cfrac{p^*}{\Vert p\Vert^2}=p^{*}=[\cos\frac \theta 2,-\sin \frac \theta 2\mathbf{u}] p=1,p1=p2p=p=[cos2θ,sin2θu]

因此有
v ′ = v ∥ + q v ⊥ = p p ∗ v ∥ + p p v ⊥ v'=v_{\Vert}+qv_{\perp}=pp^{*}v_{\Vert}+ppv_{\perp} v=v+qv=ppv+ppv

这个公式的几何解释:平行于旋转轴的分量不变,将垂直分量连续2次旋转 θ 2 \frac \theta 2 2θ的角度

对于 p ∗ v ∥ p^{*}v_{\Vert} pv,由于 v ∥ × u = 0 \mathbf{v}_{\Vert}\times \mathbf{u}=0 v×u=0,所以其满足交换律 p ∗ v ∥ = v ∥ p ∗ p^{*}v_{\Vert}=v_{\Vert}p^{*} pv=vp
对于 p v ⊥ pv_{\perp} pv,由于 v ⊥ × u = − u × v ⊥ \mathbf{v}_{\perp}\times \mathbf{u}=-\mathbf{u}\times \mathbf{v}_{\perp} v×u=u×v v ⊥ ⋅ u = 0 \mathbf{v}_{\perp}\cdot\mathbf{u}=0 vu=0,所以有 p v ⊥ = v ⊥ p ∗ pv_{\perp}=v_{\perp}p^* pv=vp
经过代换后,由分配率可得 v ′ = p ( v ∥ + v ⊥ ) p ∗ = p v p ∗ v'=p(v_{\Vert}+v_{\perp})p^*=pvp^* v=p(v+v)p=pvp

总结一下,对于三维空间下的旋转,假定旋转轴经过原点(如果不经过,则对旋转轴与待旋转点一起平移),其所在直线的单位向量为 u \mathbf{u} u,待旋转点为 v \mathbf{v} v,旋转角度为(逆时针) θ \theta θ,旋转后的点为 v ′ \mathbf{v}' v,那么定义四元数 v = [ 0 , v ] , v ′ = [ 0 , v ′ ] , u = [ 0 , u ] , p = [ cos ⁡ θ 2 , sin ⁡ θ 2 u ] v=[0,\mathbf{v}],v'=[0,\mathbf{v}'],u=[0,\mathbf{u}],p=[\cos\frac \theta 2,\sin\frac \theta 2\mathbf{u}] v=[0,v],v=[0,v],u=[0,u],p=[cos2θ,sin2θu],则旋转后的点位置为
v ′ = p v p ∗ v'=pvp^* v=pvp

进一步考虑矩阵形式,令 a = cos ⁡ θ 2 , b = sin ⁡ θ 2 u x , c = sin ⁡ θ 2 u y , d = sin ⁡ θ 2 u z a=\cos \frac \theta 2,b=\sin\frac \theta 2u_x,c=\sin\frac \theta 2u_y,d=\sin\frac \theta 2u_z a=cos2θ,b=sin2θux,c=sin2θuy,d=sin2θuz
a 2 + b 2 + c 2 + d 2 = 1 a^2+b^2+c^2+d^2=1 a2+b2+c2+d2=1,且由左乘和右乘矩阵的
v ′ = p v p ∗ = [ a − b − c − d b a − d c c d a − b d − c b a ] [ a − b − c − d b a d − c c − d a b d c − b a 1 ] v = [ 1 0 0 0 0 1 − 2 c 2 − 2 d 2 2 b c − 2 a d 2 a c + 2 b d 0 2 b c + 2 a d 1 − 2 b 2 − 2 d 2 2 c d − 2 a b 0 2 b d − 2 a c 2 a b + 2 c d 1 − 2 b 2 − 2 c 2 ] v v'=pvp^*=\left [\begin{matrix}a&-b&-c&-d\\ b&a&-d&c\\ c&d&a&-b\\ d&-c&b&a\end{matrix}\right ] \left [\begin{matrix}a&-b&-c&-d\\ b&a&d&-c\\ c&-d&a&b\\ d&c&-b&a_1\end{matrix}\right ]v =\left [\begin{matrix}1&0&0&0\\ 0&1-2c^2-2d^2&2bc-2ad&2ac+2bd\\ 0&2bc+2ad&1-2b^2-2d^2&2cd-2ab\\ 0&2bd-2ac&2ab+2cd&1-2b^2-2c^2\end{matrix}\right ]v v=pvp= abcdbadccdabdcba abcdbadccdabdcba1 v= 1000012c22d22bc+2ad2bd2ac02bc2ad12b22d22ab+2cd02ac+2bd2cd2ab12b22c2 v

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值