二维旋转动力学
1.二维空间定向
二维中,每个刚体可以当作一个薄片材料,所有线性运动在xy平面进行,所有旋转绕z轴进行。
二维物体的定向(orientation)可以用一个角度θ表示。一般用弧度表示。
2.角速度和加速度
角速度(angular velocity)时度量刚体旋转角度随时间的变化速度。
二维的角速度是标量,是定向角度对于时间的导数,单位是弧度每秒(rad/s)。
角加速度(angular acceleration)是角速度的变化率,记为α(t),单位是弧度每秒平方(rad/s^2)。
3.转动惯量
转动惯量(mooment of inertia)是刚体在某轴上改变角速度的难易程度。如果刚体的质量集中于旋转轴附近,那么它会较容易绕轴旋转,即转动惯量相对较小。
二维的转动惯量是一个简单标量,记为I。
4.力矩
力可以施加于刚体的任意位置。如果力穿过质心,则只会产生线性运动。其他情况下除了线性运动,还会同时产生torque(力矩、扭矩、转矩)。
可以使用叉积计算力矩,已知质心到受力位置的矢量r和力F,则力矩$N = r × F$。
5.二维旋转方程求解
可以使用和线性动力学问题完全相同的数值方法。包括显式欧拉法和韦尔莱积分法。
三维旋转动力学
三维旋转动力学较二维的更复杂,但是基本概念是相近的。
1.惯性张量
三维刚体改变角速度的难易程度可用一个3x3矩阵表示,称为惯性张量(inertia tensor),记为I。
$I = \left[
{\begin{matrix}
I_{xx} & I_{xy} & I_{xz}
I_{yx} & I_{yy} & I_{yz}
I_{zx} & I_{zy} & I_{zz}
\end{matrix}}
\right]$
对角线上的元素$I_{xx}$、$I_{yy}$、$I_{zz}$是刚体绕3个主轴的转动惯量。
对角线以外的元素称为惯量积,如果刚体关于三个主轴都是对称的,这些惯量积会为零。
惯量积不为零更接近真实,但是违反普通玩家的直觉。很多游戏引擎一般会把惯性张量简化为三元素矢量$[I_{xx} \space I_{yy} \space I_{zz}]$,忽略惯量积。
2.三维空间定向
在三维空间,刚体的定向可以表示为欧拉角、矩阵或者四元数。
四元数是一个四元数矢量,xyz分量可以理解为一个代表旋转轴的单位矢量u乘以旋转半角的正弦,而w分量则代表旋转半角的余弦。
$Q = [usin(θ/2) \space \space cos(θ)]$
3.三维角速度和角动量
三维的角速度是一个矢量,标记为ω(t)。角速度矢量可以看作一个单位向量u乘以旋转平面上刚体的角速度标量。
角动量守恒:
三维旋转力学中,如果没有施加力,角速度ω也可能不是常量,该旋转轴可能会不断改变方向。说明了角速度是不守恒的。
但是另一个物理量角动量(angular momentum)在无力矩时维持不变,即角动量守恒。
Jason:例如把一个长方体刚体抛到空中,如果抛起时它以它的最短轴或者长轴旋转,那么旋转轴方向会大致保持不变。如果以中间长度的轴旋转,旋转就会变得完全不稳定,旋转轴方向会疯狂改变。
线性动量和角动量对比:
旋转:L(t) = Iω(t)
线性:p(t) = mv(t)
角动量L(t)是一个三维矢量,惯性张量(旋转质量)是一个3x3矩阵,所以Iω是一个矩阵积。
Jason:角速度不守恒,所以我们在动力学模拟中不会像线速度一样视为基本量,而是第二级别的量,会在每个模拟步长确定了角动量L之后,才计算出角速度ω。
4.三维力矩
三维力矩仍可用受力点位置矢量和力矢量的叉积来计算。
5.三维旋转运动方程求解
和线性运动方程求解的区别:
三维旋转的微分方程和线性运动以及二维旋转的微分方程不同:
- 直接对L求解,而不是对角速度ω求解。然后才使用I和L计算角速度,这是因为角动量守恒,但是角速度不守恒。
- 角速度是三元素矢量而定向是四元数。不能直接用微分方程联系四元数和矢量。可以把角速度转换为四元数形式。
构建角速度四元数,w分量为零:
$ω=[ω_x ω_y ω_z 0]$
联系定向四元数和角速度四元数的微分方程是:
${dq(t) \over dt} = {1 \over 2}ω(t)q(t)$
证明略。
定向四元数的第一导数和角速度相关。
ω(t)q(t)是四元数积。
可以使用的数值方法:
和线性运动一样可以使用显式欧拉法,也可以使用速度韦尔莱、RK4或者其他方法。
示例:三维旋转的显式欧拉法:
如果使用显式欧拉法,三维旋转常微分方程的最终近似解:
$L(t_2) = L(t_1) + N_{net}(t_1)Δt =L(t_1) + ΔtΣ(r_i × F_i(t_1))$
$ω(t_2) = [I^{-1}L(t_2) \space\space\space\space 0]$
$q(t_2) = q(t_1) + {1 \over 2}ω(t_1)q(t_1)Δt$
需要把定向q(t)归一化,以消除浮点小数的误差。
(END)