2.刚体动力学基础概念

44 阅读2分钟

📝 刚体动力学学习笔记

1. 核心概念:平移运动 (Translational Motion)

刚体模拟的基础,描述物体的位置变化。

  • 状态变量:位置 xx,速度 vv

  • 动力学公式:基于牛顿第二定律 F=maF=ma

    • 加速度 a=F/Ma = F/M
    • 速度更新:vnew=vold+ΔtM1fv_{new} = v_{old} + \Delta t \cdot M^{-1} \cdot f

2. 数值积分方法 (Integration Methods)

计算机模拟时间的手段,核心在于如何利用速度更新位置。

  • 显式欧拉 (Explicit Euler)

    • 逻辑:使用旧速度更新位置 (xnew=xold+Δtvoldx_{new} = x_{old} + \Delta t \cdot v_{old}) 。
    • 缺点:能量不守恒,误差大 (O(Δt2)O(\Delta t^2)),模拟不稳定。
  • 半隐式欧拉 / 蛙跳法 (Semi-implicit / Leapfrog)

    • 逻辑:先更新速度,立即使用新速度更新位置 (xnew=xold+Δtvnewx_{new} = x_{old} + \Delta t \cdot v_{new})。

    • 核心优势

      • 精度更高:误差为 O(Δt3)O(\Delta t^3)
      • 更稳定:能量守恒性更好,游戏引擎的首选。
    • 数学本质:相当于使用了 t[0.5]t^{[0.5]} 时刻的“中间速度”来近似整帧的平均速度。

3. 核心概念:旋转运动 (Rotational Motion)

刚体模拟的难点,描述物体的朝向变化。

  • 旋转表示法

    • 矩阵 (Matrix) :数据冗余 (9个数),难求导,易产生形变。
    • 欧拉角 (Euler Angles) :万向节死锁 (Gimbal Lock),数学运算复杂。
    • 四元数 (Quaternion)最佳选择。无死锁,计算快,仅需4个数 (q=[cosθ2,vsinθ2]q = [\cos\frac{\theta}{2}, v\sin\frac{\theta}{2}])。
  • 动力学对应关系

    • 力 (Force) \rightarrow 力矩 (Torque, τ\tau)τ=r×F\tau = r \times F
    • 质量 (Mass) \rightarrow 转动惯量 (Inertia, II) :描述物体抵抗旋转的能力。
  • 转动惯量的处理

    • IrefI_{ref} (参考惯量):常数,在局部空间计算一次即可。
    • II (世界惯量):随物体旋转而变,公式为 I=RIrefRTI = R I_{ref} R^T
  • 特殊情况:重力作用于质心,力臂为 0,因此重力不产生力矩,不改变旋转状态。

4. 模拟循环流程 (Simulation Loop)

每一帧的更新顺序呈现高度的对称性:

步骤平移 (Translation)旋转 (Rotation)
1. 累加影响合力 ffif \leftarrow \sum f_i合力矩 ττi\tau \leftarrow \sum \tau_i
2. 更新速度vv+ΔtM1fv \leftarrow v + \Delta t M^{-1} fωω+ΔtI1τ\omega \leftarrow \omega + \Delta t I^{-1} \tau
3. 更新状态xx+Δtvx \leftarrow x + \Delta t vqq+[0,Δt2ω]×qq \leftarrow q + [0, \frac{\Delta t}{2}\omega] \times q

5. 补充

  • Q1: 显式欧拉到底是什么?

    • A:并不是“先算速度”就是半隐式。只要你在算位置时用的是旧速度 (voldv_{old}) ,那就是显式欧拉。只有在算位置时用了刚刚算出的新速度 (vnewv_{new}) ,才是半隐式(蛙跳)。
  • Q2: 为什么会有“两帧之间的速度”?

    • A:这是一个数学上的“错位网格”技巧。虽然渲染时我们在整数帧 (t[1]t^{[1]}) 画图,但在物理计算内部,我们认为速度存在于半整数时间点 (t[0.5]t^{[0.5]})。这样算出的速度更接近这一帧的“平均速度”,比单纯用起点或终点速度更准。
  • Q3: 为什么矩阵/欧拉角求导很困难?

    • A

      • 矩阵:有严格的正交性约束 (RTR=IR^T R = I),数值计算容易破坏这种约束(导致物体被拉伸),且导数涉及复杂的反对称矩阵运算。
      • 欧拉角:导数与角速度是非线性关系,且在万向节死锁位置会出现数学奇点(Singularity),导致模拟崩溃。四元数的导数公式 (q˙=12ωq\dot{q} = \frac{1}{2}\omega q) 则非常线性且稳定。