📝 刚体动力学学习笔记
1. 核心概念:平移运动 (Translational Motion)
刚体模拟的基础,描述物体的位置变化。
-
状态变量:位置 ,速度 。
-
动力学公式:基于牛顿第二定律 。
- 加速度 。
- 速度更新: 。
2. 数值积分方法 (Integration Methods)
计算机模拟时间的手段,核心在于如何利用速度更新位置。
-
显式欧拉 (Explicit Euler) :
- 逻辑:使用旧速度更新位置 () 。
- 缺点:能量不守恒,误差大 (),模拟不稳定。
-
半隐式欧拉 / 蛙跳法 (Semi-implicit / Leapfrog) :
-
逻辑:先更新速度,立即使用新速度更新位置 ()。
-
核心优势:
- 精度更高:误差为 。
- 更稳定:能量守恒性更好,游戏引擎的首选。
-
数学本质:相当于使用了 时刻的“中间速度”来近似整帧的平均速度。
-
3. 核心概念:旋转运动 (Rotational Motion)
刚体模拟的难点,描述物体的朝向变化。
-
旋转表示法:
- 矩阵 (Matrix) :数据冗余 (9个数),难求导,易产生形变。
- 欧拉角 (Euler Angles) :万向节死锁 (Gimbal Lock),数学运算复杂。
- 四元数 (Quaternion) :最佳选择。无死锁,计算快,仅需4个数 ()。
-
动力学对应关系:
- 力 (Force) 力矩 (Torque, ) :。
- 质量 (Mass) 转动惯量 (Inertia, ) :描述物体抵抗旋转的能力。
-
转动惯量的处理:
- (参考惯量):常数,在局部空间计算一次即可。
- (世界惯量):随物体旋转而变,公式为 。
-
特殊情况:重力作用于质心,力臂为 0,因此重力不产生力矩,不改变旋转状态。
4. 模拟循环流程 (Simulation Loop)
每一帧的更新顺序呈现高度的对称性:
| 步骤 | 平移 (Translation) | 旋转 (Rotation) |
|---|---|---|
| 1. 累加影响 | 合力 | 合力矩 |
| 2. 更新速度 | ||
| 3. 更新状态 |
5. 补充
-
Q1: 显式欧拉到底是什么?
- A:并不是“先算速度”就是半隐式。只要你在算位置时用的是旧速度 () ,那就是显式欧拉。只有在算位置时用了刚刚算出的新速度 () ,才是半隐式(蛙跳)。
-
Q2: 为什么会有“两帧之间的速度”?
- A:这是一个数学上的“错位网格”技巧。虽然渲染时我们在整数帧 () 画图,但在物理计算内部,我们认为速度存在于半整数时间点 ()。这样算出的速度更接近这一帧的“平均速度”,比单纯用起点或终点速度更准。
-
Q3: 为什么矩阵/欧拉角求导很困难?
-
A:
- 矩阵:有严格的正交性约束 (),数值计算容易破坏这种约束(导致物体被拉伸),且导数涉及复杂的反对称矩阵运算。
- 欧拉角:导数与角速度是非线性关系,且在万向节死锁位置会出现数学奇点(Singularity),导致模拟崩溃。四元数的导数公式 () 则非常线性且稳定。
-