罗德里格斯公式(Rodrigues Formula)
罗德里格斯公式推导过程
罗德里格斯公式(Rodrigues’s Formula)
摘要:罗德里格斯公式推导过程。主要参考Krasjet的文档,写的非常详细,如果想看更加详细的过程,建议去看看文档。这里主要做了简洁浓缩,方便快速查看。
一、轴角(Axis-Angle)的介绍
采用一个旋转轴u和一个旋转角度θ来刻画旋转。
比如:
我们有一个经过原点的(如果旋转轴不经过原点我们可以先将旋转轴平移到原点,进行旋转,再平移回原处)旋转轴
u
=
(
𝑥
,
𝑦
,
𝑧
)
T
u = (𝑥, 𝑦, 𝑧) ^{T}
u=(x,y,z)T ,我们希望将一个向量
v
v
v,沿着这个旋转轴旋转
θ
θ
θ 度,变换到
v
′
v ′
v′ :
为了消除旋转轴 u 模长这个多余的自由度,我们可以规定旋转轴 u 的模长为
∥
u
∥
=
𝑥
2
+
𝑦
2
+
𝑧
2
=
1
∥u∥ =\sqrt{𝑥 2 + 𝑦 2 + 𝑧 2 } = 1
∥u∥=x2+y2+z2=1,也就是说 u 是一个单位向量。
二、旋转的分解
我们可以将
v
v
v分解为平行与旋转轴,以及垂直于旋转轴的两个分量,
v
∥
v ∥
v∥和
v
⊥
v ⊥
v⊥。
v
=
v
∥
+
v
⊥
v = v ∥ + v ⊥
v=v∥+v⊥
然后分别旋转这两个分向量,再将它们旋转的结果相加,获得旋转后的向量。
v
′
=
v
′
∥
+
v
′
⊥
v ′ = v ′∥ + v ′⊥
v′=v′∥+v′⊥
2.1 平行量的旋转
平行量的旋转,前后不变
v
′
∥
=
v
∥
v ′∥ = v ∥
v′∥=v∥
v
∥
v ∥
v∥ 其实就是 v 在 u 上的正交投影 (Orthogonal Projection),根据正交投影的公式,我们可以得出:
v
∥
=
(
u
⋅
v
)
u
v ∥ = (u · v)u
v∥=(u⋅v)u
2.2 垂直量的旋转
v
⊥
v ⊥
v⊥正交于
u
u
u 的 ,这个旋转可以看做是平面内的一个旋转。因为旋转不改变 v ⊥ 的长度,所以路径是
一个圆。下面是这个旋转的示意图,右侧的为俯视图。
现在,3D 的旋转就被我们转化为了 2D 平面上的旋转。由于在这个平面上我们只有一个向量
v
⊥
v ⊥
v⊥ ,用它来表示一个旋转是不够的,我们还需要构造一个同时正交于
u
u
u 和
v
⊥
v ⊥
v⊥ 的向量
w
w
w,这个可以通过叉乘来获得:
w
=
u
×
v
⊥
∥
w
∥
=
∥
u
×
v
⊥
∥
=
∥
u
∥
.
∥
v
⊥
∥
.
s
i
n
(
π
/
2
)
=
∥
v
⊥
∥
w = u × v ⊥ \\ ∥w∥ = ∥u × v ⊥ ∥=∥u ∥.∥ v ⊥ ∥. sin(π/2)=∥ v ⊥ ∥
w=u×v⊥∥w∥=∥u×v⊥∥=∥u∥.∥v⊥∥.sin(π/2)=∥v⊥∥
也就是说,
w
w
w 和
v
⊥
v ⊥
v⊥ 的模长是相同的,所以,w 也位于圆上。
有了这个新的向量
w
w
w,就相当于我们在平面内有了两个坐标轴。
我们现在可以把
v
′
⊥
v ′⊥
v′⊥ 投影到
w
w
w 和
v
⊥
v ⊥
v⊥ 上,将其分解为
v
𝑣
′
v_{𝑣} ′
vv′ 和
v
𝑤
′
v_{𝑤} ′
vw′ 。使用一点三角学的知识我们就能得到:
v
′
⊥
=
v
𝑣
′
+
v
𝑤
′
=
c
o
s
(
θ
)
v
⊥
+
s
i
n
(
θ
)
w
=
c
o
s
(
θ
)
v
⊥
+
s
i
n
(
θ
)
(
u
×
v
⊥
)
v ′⊥ = v_{𝑣} ′ + v_{𝑤} ′ = cos( θ )v ⊥ + sin( θ )w = cos( θ )v ⊥ + sin( θ )(u × v ⊥ )
v′⊥=vv′+vw′=cos(θ)v⊥+sin(θ)w=cos(θ)v⊥+sin(θ)(u×v⊥)
三、旋转的合成
将上面的两个结果组合就可以获得:
v
′
=
v
′
∥
+
v
′
⊥
=
v
∥
+
c
o
s
(
θ
)
v
⊥
+
s
i
n
(
θ
)
(
u
×
v
⊥
)
v ′ = v ′∥ + v ′⊥ = v ∥ + cos( θ )v ⊥ + sin( θ )(u × v ⊥ )
v′=v′∥+v′⊥=v∥+cos(θ)v⊥+sin(θ)(u×v⊥)
由之前的结论,知:
v
∥
=
(
u
⋅
v
)
u
v ∥ = (u · v)u
v∥=(u⋅v)u
由
v
∥
v ∥
v∥可以得到
v
⊥
v ⊥
v⊥:
v
⊥
=
v
−
v
∥
=
v
−
(
u
⋅
v
)
u
v ⊥ = v - v ∥ = v - (u · v)u
v⊥=v−v∥=v−(u⋅v)u
变换叉乘
u
×
v
⊥
u × v ⊥
u×v⊥得:
u
×
v
⊥
=
u
×
(
v
−
v
∥
)
=
u
×
v
−
u
×
v
∥
=
u
×
v
u × v ⊥ = u × (v − v ∥ ) = u × v − u × v ∥ = u × v
u×v⊥=u×(v−v∥)=u×v−u×v∥=u×v
最终组合结果可以变化为:
v
′
=
c
o
s
(
θ
)
v
+
(
1
−
c
o
s
(
θ
)
)
(
u
⋅
v
)
u
+
s
i
n
(
θ
)
(
u
×
v
)
v ′ = cos( θ )v + (1 − cos( θ ))(u · v)u + sin( θ )(u × v)
v′=cos(θ)v+(1−cos(θ))(u⋅v)u+sin(θ)(u×v)
这也就是罗德里格斯公式(Rodrigues’s Formula):
3D 空间中任意一个
v
v
v 沿着单位向量
u
u
u 旋转
θ
θ
θ 角度之后的
v
′
v ′
v′ 为:
v
′
=
c
o
s
(
θ
)
v
+
(
1
−
c
o
s
(
θ
)
)
(
u
⋅
v
)
u
+
s
i
n
(
θ
)
(
u
×
v
)
v ′ = cos( θ )v + (1 − cos( θ ))(u · v)u + sin( θ )(u × v)
v′=cos(θ)v+(1−cos(θ))(u⋅v)u+sin(θ)(u×v)
更多推荐
所有评论(0)