罗德里格旋转公式

问题

对于三维空间中的任意向量vvv绕旋转轴kkkkkk为单位向量)旋转θ\thetaθ弧度后的结果v′v'v

首先把向量vvv分解为

  • 与旋转轴kkk垂直的向量v1v_1v1
  • 与旋转轴kkk平行的向量v2v_2v2

在旋转过程中,向量v2v_2v2不发生变化

因为kkk为单位向量
所以v2=(v⋅k)kv_2 = (v\cdot k)kv2=(vk)k

因为v=v1+v2v= v_1+v_2v=v1+v2
所以v1=v−v2=v−(v⋅k)kv_1=v- v_2 = v- (v\cdot k)kv1=vv2=v(vk)k

接下来看v1v_1v1的旋转

定义w=k×vw = k \times vw=k×v,其中∣w∣=∣k∣∣v∣sinα=∣v1∣|w|=|k||v|sin \alpha = |v_1|w=k∣∣vsinα=v1
这样向量v1v_1v1kkk旋转θ\thetaθ弧度后的向量v1′v_1^{'}v1就可以表示成
v1′=cosθv1+sinθw=cosθ(v−(v⋅k)k)+sinθ(k×v) \begin{aligned} v_1^{'} &= cos\theta v_1+sin\theta w\\ &=cos\theta (v- (v\cdot k)k) + sin\theta (k \times v) \end{aligned} v1=cosθv1+sinθw=cosθ(v(vk)k)+sinθ(k×v)

最终的向量为
v′=v1′+v2=cosθ(v−(v⋅k)k)+sinθ(k×v)+(v⋅k)k=cosθv+(1−cosθ)(v⋅k)k+sinθ(k×v) \begin{aligned} v' &= v_1^{'} + v_2\\ &=cos\theta (v- (v\cdot k)k) + sin\theta (k \times v) + (v\cdot k)k\\ &=cos\theta v + (1-cos\theta)(v\cdot k)k + sin\theta (k \times v) \end{aligned} v=v1+v2=cosθ(v(vk)k)+sinθ(k×v)+(vk)k=cosθv+(1cosθ)(vk)k+sinθ(k×v)


v=(vxvyvz),k=(kxkykz) v = \begin{pmatrix} v_x\\ v_y\\ v_z \end{pmatrix}, k = \begin{pmatrix} k_x\\ k_y\\ k_z \end{pmatrix} v=vxvyvz,k=kxkykz

根据差乘的定义
k×v=(kyvz−kzvy,kzvx−kxvz,kxvy−kyvz)=(0,−kz,kykz,0,−kx−ky,kx,0)(vxvyvz) \begin{aligned} k\times v&= (k_y v_z -k_z v_y ,k_z v_x -k_x v_z,k_x v_y -k_y v_z)\\ &= \begin{pmatrix} &0,&-k_z,&k_y\\ &k_z,&0,&-k_x\\ &-k_y,&k_x,&0 \end{pmatrix} \begin{pmatrix} v_x\\ v_y\\ v_z \end{pmatrix} \end{aligned} k×v=(kyvzkzvy,kzvxkxvz,kxvykyvz)=0,kz,ky,kz,0,kx,kykx0vxvyvz

所以
(vx′vy′vz′)=cosθ(vxvyvz)+sinθ(0,−kz,kykz,0,−kx−ky,kx,0)(vxvyvz)+(1−cosθ)(vxkx+vyky+vzkz)(kxkykz) \begin{aligned} \begin{pmatrix} v'_x\\ v'_y\\ v'_z\\ \end{pmatrix} &=cos\theta \begin{pmatrix} v_x\\ v_y\\ v_z\\ \end{pmatrix} + sin\theta \begin{pmatrix} &0,&-k_z,&k_y\\ &k_z,&0,&-k_x\\ &-k_y,&k_x,&0\\ \end{pmatrix} \begin{pmatrix} v_x\\ v_y\\ v_z\\ \end{pmatrix} + (1-cos\theta)(v_xk_x+v_yk_y+v_zk_z) \begin{pmatrix} k_x\\ k_y\\ k_z\\ \end{pmatrix} \end{aligned} vxvyvz=cosθvxvyvz+sinθ0,kz,ky,kz,0,kx,kykx0vxvyvz+(1cosθ)(vxkx+vyky+vzkz)kxkykz

其中
(1−cosθ)(vxkx+vyky+vzkz)(kxkykz)=((1−cosθ)(vxkxkx+vykxky+vzkxkz)(1−cosθ)(vxkxky+vykyky+vzkykz)(1−cosθ)(vxkxkz+vykykz+vzkzkz))=(akxkx,akxky,akxkzakxky,akyky,akykzakxkz,akykz,akzkz)(vxvyvz),a=1−cosθ \begin{aligned} & (1-cos\theta)(v_xk_x+v_yk_y+v_zk_z) \begin{pmatrix} k_x\\ k_y\\ k_z\\ \end{pmatrix}\\ =& \begin{pmatrix} (1-cos\theta)(v_xk_xk_x+v_yk_xk_y+v_zk_xk_z)\\ (1-cos\theta)(v_xk_xk_y+v_yk_yk_y+v_zk_yk_z)\\ (1-cos\theta)(v_xk_xk_z+v_yk_yk_z+v_zk_zk_z)\\ \end{pmatrix}\\ =& \begin{pmatrix} ak_xk_x,&ak_xk_y,&ak_xk_z\\ ak_xk_y,&ak_yk_y,&ak_yk_z\\ ak_xk_z,&ak_yk_z,&ak_zk_z\\ \end{pmatrix} \begin{pmatrix} v_x\\ v_y\\ v_z\\ \end{pmatrix},a = 1-cos\theta \end{aligned} ==(1cosθ)(vxkx+vyky+vzkz)kxkykz(1cosθ)(vxkxkx+vykxky+vzkxkz)(1cosθ)(vxkxky+vykyky+vzkykz)(1cosθ)(vxkxkz+vykykz+vzkzkz)akxkx,akxky,akxkz,akxky,akyky,akykz,akxkzakykzakzkzvxvyvz,a=1cosθ

所以
(vx′vy′vz′)=(cosθ+akxkx,−sinθkz+akxky,sinθky+akxkzsinθkz+akxky,cosθ+akyky,−sinθkx+akykz−sinθky+akxkz,sinθkx+akykz,cosθ+akzkz)(vxvyvz1)=M(vxvyvz1) \begin{aligned} \begin{pmatrix} v'_x\\ v'_y\\ v'_z\\ \end{pmatrix} &= \begin{pmatrix} &cos\theta + ak_xk_x,&-sin\theta k_z+ak_xk_y,&sin\theta k_y+ak_xk_z\\ &sin\theta k_z + ak_xk_y,&cos\theta + ak_yk_y,&-sin\theta k_x+ak_yk_z \\ &-sin\theta k_y+ ak_xk_z,&sin\theta k_x+ak_yk_z ,&cos\theta+ak_zk_z \\ \end{pmatrix} \begin{pmatrix} v_x\\ v_y\\ v_z\\ 1 \end{pmatrix}= M \begin{pmatrix} v_x\\ v_y\\ v_z\\ 1 \end{pmatrix} \end{aligned} vxvyvz=cosθ+akxkx,sinθkz+akxky,sinθky+akxkz,sinθkz+akxky,cosθ+akyky,sinθkx+akykz,sinθky+akxkzsinθkx+akykzcosθ+akzkzvxvyvz1=Mvxvyvz1

最终,我们得到变换矩阵为
M=(cosθ+akxkx,−sinθkz+akxky,sinθky+akxkzsinθkz+akxky,cosθ+akyky,−sinθkx+akykz−sinθky+akxkz,sinθkx+akykz,cosθ+akzkz) \begin{aligned} M &= \begin{pmatrix} &cos\theta + ak_xk_x,&-sin\theta k_z+ak_xk_y,&sin\theta k_y+ak_xk_z\\ &sin\theta k_z + ak_xk_y,&cos\theta + ak_yk_y,&-sin\theta k_x+ak_yk_z \\ &-sin\theta k_y+ ak_xk_z,&sin\theta k_x+ak_yk_z ,&cos\theta+ak_zk_z \\ \end{pmatrix} \end{aligned} M=cosθ+akxkx,sinθkz+akxky,sinθky+akxkz,sinθkz+akxky,cosθ+akyky,sinθkx+akykz,sinθky+akxkzsinθkx+akykzcosθ+akzkz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值