Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

碰撞冲量和相对速度定义

在构建物理引擎时,碰撞响应(Collision Resolution)是最核心的模块之一。而碰撞响应的核心,就是求解冲量标量 。本文将从第一性原理出发,一步步推导 的公式,并深入探讨容易被忽视的相对速度定义及其对仿真稳定性的影响。


1. 问题的定义

假设有两个刚体 在世界空间发生碰撞。

  • 碰撞点
  • 碰撞法线(定义为从 指向 的单位向量)
  • 质心到碰撞点的向量
  • 线速度与角速度

我们的目标是找到一个冲量标量 ,当它作用于碰撞点时,能够改变两个物体的速度,使得它们在碰撞后的相对速度符合牛顿碰撞定律


2. 关键:相对速度的定义

相对速度的定义决定了后续所有公式的符号。为了与工业级引擎(如 Bullet, Box2D)保持一致,我们定义碰撞点处的相对速度 为:

其中,碰撞点在物体上的速度公式为:

为什么这样定义?

时,意味着两个物体正在相互靠近(接近速度为负);当 时,意味着物体正在相互远离


3. 物理约束:牛顿碰撞定律

碰撞后的相对速度 与碰撞前的相对速度 满足以下关系:

其中 是恢复系数(Restitution)。这是我们求解 的唯一方程。


4. 冲量对速度的影响

根据冲量定理,施加冲量 后,物体的速度变化为:

对于物体 A(受力方向为 ):

对于物体 B(受力方向为 ):


5. 核心推导步骤

我们将碰撞后的相对速度展开:

代入速度变化公式

提取公因子

现在,两边同时点乘法线 ,并利用牛顿碰撞定律


6. 最终公式

整理上式,求得 的标准公式

对比关于《Game Physics in One Weekend》

在《Game Physics in One Weekend》的代码实现中,你会发现分子没有负号。这是因为该书将法线定义为“从 A 指向 B”,且在应用冲量时手动反转了符号。 建议:在实际工程中,务必采用上述标准推导。标准推导保证了只要物体在靠近(点积为负),算出的 就一定是正数,这符合物理直觉,也方便后续处理摩擦力不等式约束。