Rodrigues旋转公式
给定旋转轴单位向量 k = ( k x , k y , k z ) \mathbf{k}=(k_x,k_y,k_z) k=(kx,ky,kz)和旋转角度 θ \theta θ,旋转矩阵 R R R可以表示为:
R = I + sin θ K + ( 1 − cos θ ) K 2 R=I+\sin \theta K+(1-\cos \theta)K^2 R=I+sinθK+(1−cosθ)K2
其中:
- I I I是单位矩阵
- K K K是向量 k \mathbf{k} k的叉积矩阵:
K = [ 0 − k z k y k z 0 − k x − k y k x 0 ] K=\begin{bmatrix} 0&-k_z&k_y\\ k_z&0&-k_x\\ -k_y&k_x&0 \end{bmatrix} K= 0kz−ky−kz0kxky−kx0
推导过程
将向量 v \mathbf{v} v分解为平行和垂直于 k \mathbf{k} k的分量:
v = v ∥ + v ⊥ \mathbf{v}=\mathbf{v}_\parallel+\mathbf{v}_\perp v=v∥+v⊥
其中:
v ∥ = ( v ⋅ k ) k v ⊥ = v − v ∥ \mathbf{v}_\parallel=(\mathbf{v}\cdot\mathbf{k})\mathbf{k} \\ \mathbf{v}_\perp=\mathbf{v}-\mathbf{v}_\parallel v∥=(v⋅k)kv⊥=v−v∥
平行分量 v ∥ \mathbf{v}_\parallel v∥旋转后不变
垂直分量 v ⊥ \mathbf{v}_\perp v⊥旋转后在垂直于 k \mathbf{k} k的平面内旋转 θ \theta θ角度:
v ⊥ R O T = cos θ v ⊥ + sin θ ( k × v ) \mathbf{v}_\perp^{ROT}=\cos\theta\mathbf{v}_\perp+\sin\theta(\mathbf{k}\times\mathbf{v}) v⊥ROT=cosθv⊥+sinθ(k×v)
旋转后的向量为:
v R O T = v ∥ + v ⊥ R O T \mathbf{v}^{ROT}=\mathbf{v}_\parallel+\mathbf{v}_\perp^{ROT} vROT=v∥+v⊥ROT
= ( v ⋅ k ) k + cos θ ( v − ( v ⋅ k ) k ) + sin θ ( k × v ) =(\mathbf{v}\cdot\mathbf{k})\mathbf{k}+\cos\theta(\mathbf{v}-(\mathbf{v}\cdot\mathbf{k})\mathbf{k})+\sin\theta(\mathbf{k}\times\mathbf{v}) =(v⋅k)k+cosθ(v−(v⋅k)k)+sinθ(k×v)
利用叉积矩阵 K K K,其中 k × v = K v \mathbf{k}\times\mathbf{v}=K\mathbf{v} k×v=Kv,可以写成:
v R O T = cos θ v + sin θ K v + ( 1 − cos θ ) ( v ⋅ k ) k \mathbf{v}^{ROT}=\cos\theta \mathbf{v}+\sin\theta K\mathbf{v}+(1-\cos\theta)(\mathbf{v}\cdot\mathbf{k})\mathbf{k} vROT=cosθv+sinθKv+(1−cosθ)(v⋅k)k
又因为 ( v ⋅ k ) k = M v (\mathbf{v}\cdot\mathbf{k})\mathbf{k} = M\mathbf{v} (v⋅k)k=Mv, M = k ⋅ k T M = \mathbf{k}\cdot\mathbf{k}^{T} M=k⋅kT,可以写成:
v R O T = cos θ v + sin θ K v + ( 1 − cos θ ) M v \mathbf{v}^{ROT}=\cos\theta \mathbf{v}+\sin\theta K\mathbf{v}+(1-\cos\theta)M\mathbf{v} vROT=cosθv+sinθKv+(1−cosθ)Mv
= [ cos θ I + sin θ K + ( 1 − cos θ ) M ] v =\left[\cos\theta I+\sin\theta K+(1-\cos\theta)M\right]\mathbf{v} =[cosθI+sinθK+(1−cosθ)M]v
因此旋转矩阵为:
R = I + sin θ K + ( 1 − cos θ ) M R=I+\sin\theta K+(1-\cos\theta)M R=I+sinθK+(1−cosθ)M
展开后得到:
R = [ cos θ + k x 2 ( 1 − cos θ ) k x k y ( 1 − cos θ ) − k z sin θ k x k z ( 1 − cos θ ) + k y sin θ k y k x ( 1 − cos θ ) + k z sin θ cos θ + k y 2 ( 1 − cos θ ) k y k z ( 1 − cos θ ) − k x sin θ k z k x ( 1 − cos θ ) − k y sin θ k z k y ( 1 − cos θ ) + k x sin θ cos θ + k z 2 ( 1 − cos θ ) ] R=\begin{bmatrix} \cos\theta+k_x^2(1-\cos\theta)&k_xk_y(1-\cos\theta)-k_z\sin\theta&k_xk_z(1-\cos\theta)+k_y\sin\theta\\ k_yk_x(1-\cos\theta)+k_z\sin\theta&\cos\theta+k_y^2(1-\cos\theta)&k_yk_z(1-\cos\theta)-k_x\sin\theta\\ k_zk_x(1-\cos\theta)-k_y\sin\theta&k_zk_y(1-\cos\theta)+k_x\sin\theta&\cos\theta+k_z^2(1-\cos\theta) \end{bmatrix} R= cosθ+kx2(1−cosθ)kykx(1−cosθ)+kzsinθkzkx(1−cosθ)−kysinθkxky(1−cosθ)−kzsinθcosθ+ky2(1−cosθ)kzky(1−cosθ)+kxsinθkxkz(1−cosθ)+kysinθkykz(1−cosθ)−kxsinθcosθ+kz2(1−cosθ)