【问题标题】:How to resolve this physical collision with impulses?如何解决这种与冲动的物理碰撞?
【发布时间】:2021-11-29 15:48:33
【问题描述】:

我已经开始编写一个物理引擎,但陷入了解决碰撞的一些物理问题。假设我有这种情况:

即物体 B 以 1 个空间单位/时间单位的速度向物体 A 移动。 A 和 B 的质量相同,均为 1 个单位。让我们考虑一个完全弹性碰撞

我在一本书(Game Physics Engine Development)中读到,可以使用基于脉冲的方法来解决碰撞问题(即找出线性和碰撞后两个物体的角速度)。据我了解,它应该像这样工作:

  1. 当身体碰撞时,我得到碰撞点和碰撞法线。
  2. 在碰撞点我认为只有两个点在法线方向碰撞(身体接触的点,即我忽略了两个身体的形状)并计算这两个碰撞点的新速度(这很容易做到,例如在Wikipedia 上有一个简单的公式)。
  3. 我发现了一个脉冲,当此时应用于两个物体时,它会达到这两个点的计算速度。

现在问题出现了,当我考虑从物理的角度来看,动量动能都需要守恒。考虑到这些限制,似乎没有解决方案,因为:

根据弹性碰撞公式,当 B 与 A 碰撞时,B 应完全停止并将其所有动量和动能传递给 A。为了保持线性动量守恒,A 必须以与 B 碰撞前相同的速度开始向左线性移动(因为它们具有相同的质量)。所以现在 A 与 B 具有相同的动能,但这意味着 A 不能旋转,因为这会给它增加额外的动能(因为旋转会增加动能以及线性运动),打破动能守恒。尽管如此,物理上正确的解决方案是 A 向左线性移动并随着 B 在该位置碰撞施加扭矩而旋转(我还检查了现实生活中的物体的行为方式)。请注意,我们不能将 A 的线性运动的一些能量带走并将其添加到旋转中,因为这会破坏线性动量守恒。

唯一“真正”的解决方案是 B 不会完全停止并保持一些动量,而 A 将同时向左移动和旋转。但这似乎不适用于仅考虑两个碰撞点的基于脉冲的方法,弹性碰撞公式只是说 B 处的点应该停止并且因为 B 不能接收任何扭矩(碰撞发生在它的中间),实现这一点的唯一方法是让 B 停止移动。

那么我错过了什么吗?基于脉冲的方法在物理上是不正确的吗?我感谢任何有关如何正确解决冲突的见解和建议。谢谢!

【问题讨论】:

  • 据我了解,如果发生这样的碰撞,那么关于线性动量和能量守恒是正确的。但是如果说A应该在碰撞后旋转(由于它的形状),那么B现在不应该也在原地旋转吗? (系统的早期角动量为零,因此如果 A 旋转,碰撞后 B 应该以相反方向旋转 - 角动量守恒)。
  • 我认为如果您改为在physics.stackexchange.com 提问,您会得到更好的答案。或者可能在gamedev.stackexchange.com。 (这里问没有错,我只是觉得在这些网站上会有更多人知道答案)。
  • 你根本不在正确的网站上。
  • 刚发生碰撞后,有三个未知数:A 和 B 的速度以及 A 的角速度。通过求解由冲量守恒形成的系统,角动量(大约惯性中心)和动能(运动+旋转项)。这个系统会有一个解决方案。
  • 我想知道这是否是正确的地方,因为存在物理和游戏物理类别,我想我会试一试,但如果我会继续其他网站没有答案,让我们看看。

标签: algorithm game-physics physics


【解决方案1】:

您正在查看的公式适用于两个点质量的碰撞。点质量不能有角动量,因此公式中没有这个项的空间。

你必须回到首要原则。

假设一条边在某个点与另一个物体发生碰撞(想想角撞到边)。然后在该点沿垂直于边缘的方向施加特定脉冲。 (任何其他方向都需要摩擦,这将使其成为非弹性碰撞。)相反的冲动沿着相同的矢量传递给另一个物体。将相反的脉冲传递给两个物体就足以保证动量和角动量的守恒。但是能量守恒需要做一些工作。

接下来,当我们传递这种动力时会发生什么?正如this 物理答案所说,我们传递动量就好像脉冲发生在质心上一样。我们赋予角动量等于冲量和力矩臂的叉积(描述冲量偏离质心多少的向量)。这将导致身体以脉冲除以moment of inertia 的速率开始旋转。

您从质心的运动中获得动能,同时从其旋转中获得kinetic energy

因此,在您的二维碰撞中,您现在有以下事实:

  1. 每个物体的质量。
  2. 每个物体的速度。
  3. 每个速度的惯性矩。
  4. 每个物体的角速度。
  5. 每个身体的力线的力臂。

您现在可以计算整个系统的动能,作为比冲量的函数。与点质量不同,所有这些因素都会影响它,使方程变得复杂。但是,就像点质量一样,您会得到一个有 2 个解的二次方程。一种解决方案是施加 0 脉冲(代表碰撞前的系统),另一种是您之后的答案。完成两个系统的动量和角动量的变化。

【讨论】:

  • 这很多都是有道理的,并且与我所读到的一致——好的,现在我明白我应该求解方程组并求解脉冲的大小。但是现在我想到的一件事是:在我上面的例子中,角动量怎么可能守恒? A 将旋转,B 不可能反向旋转(手臂将为 0,或者您甚至可以想象一个圆形/球形代替 B,它永远无法在没有摩擦的情况下旋转 AFAIK)。
  • @MiloslavČíž 角动量不必看起来像自旋。从 A 的原始质心的惯性参考来看,即使没有自旋,物体 B 的角动量也等于其质量乘以速度交叉力矩臂。冲量在两者之间传递角动量,给 A 的量与来自 B 的量一样多。
  • 非常感谢@btilly 提供这些答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 2013-06-12
相关资源
最近更新 更多