GAMES103 L03 旋转公式是怎么推导的
GAMES103 L03
考虑代表旋转的四元数
q
q
q,那么对于参考坐标中的任意一点
v
\mathbf v
v,其在世界坐标中的朝向为
q
v
q
∗
q\mathbf v q^*
qvq∗。此时这个物体拥有角速度
w
\mathbf w
w,角速度的方向就是物体旋转的朝向,角速度的模就是物体的角速度。
考虑一小段时间内,假设
w
\mathbf w
w 在这段时间内不发生变化,那么物体就在这段时间内沿着
w
\mathbf w
w 确定的方向旋转了
Δ
θ
=
∥
w
∥
Δ
t
\Delta\theta=\Vert\mathbf w\Vert\Delta t
Δθ=∥w∥Δt 度,同样地,可以用四元数
p
p
p 来描述这个旋转:
p
=
cos
Δ
θ
2
+
u
sin
Δ
θ
2
p=\cos\frac{\Delta\theta}2+\mathbf u\sin\frac{\Delta\theta}2
p=cos2Δθ+usin2Δθ
其中
u
\mathbf u
u 为单位化后的
w
\mathbf w
w。
那么经过
p
p
p 旋转后的世界坐标中的任意一点可以表示为
p
q
v
q
∗
p
∗
=
(
p
q
)
v
(
p
q
)
∗
pq\mathbf vq^*p^*=(pq)\mathbf v(pq)^*
pqvq∗p∗=(pq)v(pq)∗
即描述物体在这个旋转之后的朝向的四元数应该由
q
q
q 更新为
p
q
pq
pq,记作
q
′
q'
q′。显然
q
′
=
q
+
(
q
′
−
q
)
=
q
+
(
p
−
1
)
q
≈
q
+
[
0
,
Δ
t
2
w
]
×
q
\begin{aligned} q'&=q+(q'-q) \\ &=q+(p-1)q \\ &\approx q+\left[0,\frac{\Delta t}{2}\mathbf w\right]\times q \end{aligned}
q′=q+(q′−q)=q+(p−1)q≈q+[0,2Δtw]×q
考虑到
p
−
1
=
[
1
−
cos
Δ
θ
2
,
u
sin
Δ
θ
2
]
p-1=\left[1-\cos\frac{\Delta\theta}2,\mathbf u\sin\frac{\Delta\theta}{2}\right]
p−1=[1−cos2Δθ,usin2Δθ]
其中
Δ
θ
\Delta\theta
Δθ 近似为
0
0
0,那么有
cos
Δ
θ
2
≈
1
,
sin
Δ
θ
2
≈
Δ
θ
2
\cos\frac{\Delta\theta}2\approx 1,\sin\frac{\Delta\theta}2\approx\frac{\Delta\theta}2
cos2Δθ≈1,sin2Δθ≈2Δθ
所以
p
−
1
≈
[
0
,
u
Δ
θ
2
]
=
[
0
,
u
∥
w
∥
Δ
t
2
]
=
[
0
,
Δ
t
2
w
]
p-1\approx\left[0,\mathbf u\frac{\Delta\theta}{2}\right]=\left[0,\mathbf u\frac{\Vert\mathbf w\Vert\Delta t}{2}\right] =\left[0,\frac{\Delta t}{2}\mathbf w\right]
p−1≈[0,u2Δθ]=[0,u2∥w∥Δt]=[0,2Δtw]
故
q
′
≈
q
+
[
0
,
Δ
t
2
w
]
×
q
q'\approx q+\left[0,\frac{\Delta t}{2}\mathbf w\right]\times q
q′≈q+[0,2Δtw]×q
由于近似的原因,
q
q
q 的模会在迭代过程中发生变化,所以需要在每一次迭代完成之后进行单位化,避免误差累积。