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θ)