罗德里格斯(Rodrigues)旋转公式推导

定义

定义v\pmb{v}是三维空间R3\R^3中的一个任意向量,k\pmb{k}是一个单位向量,向量v\pmb{v}绕向量k\pmb{k}旋转θ\theta角度,则表示旋转后向量vrot\pmb{v}_{rot}的罗德里格斯公式为:
vrot=vcosθ+(k×v)sinθ+k(kv)(1cosθ) v_{rot}=\pmb{v}\cos\theta+(\pmb{k}\times\pmb{v})\sin\theta+\pmb{k}(\pmb{k}\cdot\pmb{v})(1-\cos\theta)

公式推导

罗德里格斯(Rodrigues)旋转公式推导
定义v\pmb{v}是三维空间R3\R^3中的一个任意向量,k\pmb{k}是一个单位向量,向量v\pmb{v}绕向量k\pmb{k}旋转θ\theta角度(右手定律,图中逆时针方向)。

使用点乘和叉乘,v\pmb{v}可被分解为与k\pmb{k}平行和垂直的分量:

v=v+v(1) \pmb{v}=\pmb{v}_{\|}+\pmb{v}_\perp \tag{1}

其中平行于k\pmb{k}的分量为:

v=(kv)k(2) \pmb{v}_{\|}=(\pmb{k}\cdot\pmb{v})\pmb{k} \tag{2}

向量v\pmb{v}_{\|}称为向量v\pmb{v}在向量k\pmb{k}上的投影(vector projection),垂直于k\pmb{k}的分量为:

v=vv=v(kv)k=k×(k×v)(3) \begin{aligned} \pmb{v}_{\perp}&=\pmb{v}-\pmb{v}_{\|} \\ &=\pmb{v}-(\pmb{k}\cdot\pmb{v})\pmb{k} \\ &=-\pmb{k}\times(\pmb{k}\times\pmb{v}) \end{aligned} \tag{3}

向量v\pmb{v}_{\perp}称为向量v\pmb{v}在向量k\pmb{k}上的vector rejection(没有找到合适的翻译)。

公式(3)最后一项的推导:向量k×v\pmb{k}\times\pmb{v}可以看作是向量v\pmb{v}_{\perp}绕向量k\pmb{k}逆时针旋转90°的副本,所以它们大小相等但方向垂直。同样的,向量k×(k×v)\pmb{k}\times(\pmb{k}\times\pmb{v})v\pmb{v}_{\perp}k\pmb{k}逆时针旋转180°的副本,所以k×(k×v)\pmb{k}\times(\pmb{k}\times\pmb{v})v\pmb{v}_{\perp}的大小相等但方向相反(因此符号相反)。

扩展
向量的三重叉积连接了平行分量和垂直分量,对于给定的3个向量a\pmb{a}b\pmb{b}c\pmb{c},有:
a×(b×c)=(ac)b(ab)c \pmb{a}\times(\pmb{b}\times\pmb{c})=(\pmb{a}\cdot\pmb{c})\pmb{b}-(\pmb{a}\cdot\pmb{b})\pmb{c}

罗德里格斯(Rodrigues)旋转公式推导

由于平行于旋转轴的分量在旋转时不会改变其幅度和方向,因此有:

vrot=v(4) \pmb{v}_{\|rot}=\pmb{v}_{\|} \tag{4}

垂直分量在旋转时会改变方向,但会保持大小不变,有:

vrot=v(5) |\pmb{v}_{\perp rot}|=|\pmb{v}_{\perp}| \tag{5}

vrot=cosθv+sinθk×v(6) \pmb{v}_{\perp rot}=\cos \theta \pmb{v}_{\perp}+\sin \theta \pmb{k} \times \pmb{v}_{\perp} \tag{6}

由于k\pmb{k}v\pmb{v}_{\|}是平行的,所以它们的叉积为0,即k×v=0\pmb{k}\times\pmb{v}=0,所以我们有:

k×v=k×(vv)=k×vk×v=k×v(7) \begin{aligned} \pmb{k}\times\pmb{v}_{\perp}&=\pmb{k}\times(\pmb{v}-\pmb{v}_{\|}) \\ &=\pmb{k}\times\pmb{v}-\pmb{k}\times\pmb{v}_{\|} \\ &=\pmb{k}\times\pmb{v} \end{aligned} \tag{7}

将(6)式带入(7)式,有:

vrot=cosθv+sinθk×v(8) \pmb{v}_{\perp rot}=\cos\theta\pmb{v}_{\perp}+\sin\theta\pmb{k}\times\pmb{v} \tag{8}

说明
可以通过前面的图片来理解公式(8)。向量v\pmb{v}_{\perp}k×v\pmb{k}\times\pmb{v}具有相同的长度,且k×v\pmb{k}\times\pmb{v}v\pmb{v}_{\perp}k\pmb{k}旋转90°得到的。利用三角函数(正弦、余弦)可得到旋转后向量的垂直分量。旋转分量的形式与笛卡尔基的2D平面极坐标(r,θ)(r,\theta)中的径向向量类似:
r=rcosθex+rsinθey \pmb{r}=r\cos\theta\pmb{e}_{x}+r\sin\theta\pmb{e}_{y}
其中,ex\pmb{e}_{x}ey\pmb{e}_{y}为它们指示方向上的单位向量。

现在,旋转后的向量可完整表示为:

vrot=vrot+vrot(9) \pmb{v}_{rot}=\pmb{v}_{\| rot}+\pmb{v}_{\perp rot} \tag{9}

将式(4)和(8)和(2)依次带入(9),有:

vrot=v+cosθv+sinθk×v=v+cosθ(vv)+sinθk×v=cosθv+(1cosθ)v+sinθk×v=cosθv+(1cosθ)(kv)k+sinθk×v(10) \begin{aligned} \pmb{v}_{rot}&=\pmb{v}_{\|}+\cos\theta\pmb{v}_{\perp}+\sin\theta\pmb{k}\times\pmb{v} \\ &=\pmb{v}_{\|}+\cos\theta(\pmb{v}-\pmb{v}_{\|})+\sin\theta\pmb{k}\times\pmb{v} \\ &=\cos\theta\pmb{v}+(1-\cos\theta)\pmb{v}_{\|}+\sin\theta\pmb{k}\times\pmb{v} \\ &=\cos\theta\pmb{v}+(1-\cos\theta)(\pmb{k}\cdot\pmb{v})\pmb{k}+\sin\theta\pmb{k}\times\pmb{v} \\ \end{aligned} \tag{10}

矩阵表示

v\pmb{v}k×v\pmb{k}\times\pmb{v}表示为列矩阵,则叉积可以表示为矩阵的乘积:

[(k×v)x(k×v)y(k×v)z]=[kyvzkzvykzvxkxvzkxvykyvx]=[0kzkykz0kxkykx0][vxvyvz](11) \begin{aligned} \begin{bmatrix} (\pmb{k}\times\pmb{v})_x \\ (\pmb{k}\times\pmb{v})_y \\ (\pmb{k}\times\pmb{v})_z \end{bmatrix}&= \begin{bmatrix} k_y v_z-k_z v_y \\ k_z v_x-k_x v_z \\ k_x v_y-k_y v_x \end{bmatrix} \\ &= \begin{bmatrix} 0 & -k_z & k_y \\ k_z & 0 & -k_x \\ -k_y & k_x & 0 \end{bmatrix} \begin{bmatrix} v_x \\ v_y \\ v_z \end{bmatrix} \end{aligned} \tag{11}

K\pmb{K}表示单位向量k\pmb{k}的“叉积矩阵”:

K=[0kzkykz0kxkykx0](12) \pmb{K}= \begin{bmatrix} 0 & -k_z & k_y \\ k_z & 0 & -k_x \\ -k_y & k_x & 0 \end{bmatrix} \tag{12}

则对于任意向量v\pmb{v},矩阵方程(11)可以表示为:

Kv=k×v(13) \pmb{K}\pmb{v}=\pmb{k}\times\pmb{v} \tag{13}

事实上,K是具有这个性质的唯一矩阵,它的特征值为0和±i\pm i

在等式右侧迭代叉乘等价于在等式左侧迭代左乘叉积矩阵,有(迭代2次的情况):

K(Kv)=K2v=k(k×v)(14) \pmb{K}(\pmb{K}\pmb{v})=\pmb{K}^2\pmb{v}=\pmb{k}(\pmb{k}\times\pmb{v}) \tag{14}

由于k\pmb{k}是单位向量,所以k\pmb{k}具有单位的2范数,因此旋转公式(10)可以表示为:

vrot=cosθv+(1cosθ)(kv)k+sinθk×v=vv+cosθv+(1cosθ)(kv)k+sinθKv=v(1cosθ)v+(1cosθ)(kv)k+sinθKv=v(1cosθ)(kk)v+(1cosθ)(kv)k+sinθKv=v+(1cosθ)((kv)k(kk)v)+sinθKv=v+(1cosθ)(k×(k×v))+sinθKv=v+(sinθ)Kv+(1cosθ)K2v=(I+(sinθ)K+(1cosθ)K2)v=Rv,K2=1(15) \begin{aligned} \pmb{v}_{rot}&=\cos\theta\pmb{v}+(1-\cos\theta)(\pmb{k}\cdot\pmb{v})\pmb{k}+\sin\theta\pmb{k}\times\pmb{v} \\ &=\pmb{v}-\pmb{v}+\cos\theta\pmb{v}+(1-\cos\theta)(\pmb{k}\cdot\pmb{v})\pmb{k}+\sin\theta\pmb{K}\pmb{v} \\ &=\pmb{v}-(1-\cos\theta)\pmb{v}+(1-\cos\theta)(\pmb{k}\cdot\pmb{v})\pmb{k}+\sin\theta\pmb{K}\pmb{v} \\ &=\pmb{v}-(1-\cos\theta)(\pmb{k}\cdot\pmb{k})\pmb{v}+(1-\cos\theta)(\pmb{k}\cdot\pmb{v})\pmb{k}+\sin\theta\pmb{K}\pmb{v} \\ &=\pmb{v}+(1-\cos\theta)((\pmb{k}\cdot\pmb{v})\pmb{k}-(\pmb{k}\cdot\pmb{k})\pmb{v})+\sin\theta\pmb{K}\pmb{v} \\ &=\pmb{v}+(1-\cos\theta)(\pmb{k}\times(\pmb{k}\times\pmb{v}))+\sin\theta\pmb{K}\pmb{v} \\ &=\pmb{v}+(\sin\theta)\pmb{K}\pmb{v}+(1-\cos\theta)\pmb{K}^2\pmb{v} \\ &=(\pmb{I}+(\sin\theta)\pmb{K}+(1-\cos\theta)\pmb{K}^2)\pmb{v} \\ &=\pmb{R}\pmb{v} \\ ,\|\pmb{K}\|_2&=1 \end{aligned} \tag{15}

有:

R=I+(sinθ)K+(1cosθ)K2(16) \pmb{R}=\pmb{I}+(\sin\theta)\pmb{K}+(1-\cos\theta)\pmb{K}^2 \tag{16}

这是一个绕轴k\pmb{k}逆时针旋转θ\theta角度的旋转矩阵,其中I\pmb{I}为一个3×33\times3的单位矩阵。

矩阵R\pmb{R}是实数空间R3\R^3中旋转群SO(3)SO(3)中的元素,K\pmb{K}是生成该李群的李代数so(3)so(3)中的元素(注意,K\pmb{K}具有so(3)so(3)斜对称的特征)。