检测多个物体之间碰撞的正确方法是什么?

时间:2012-01-10 21:40:16

标签: java geometry collision-detection physics

这是我正在为大学任务做的事情而且我很陌生,但我已经做了很多关于这个主题的阅读。请允许有人用最简单的术语解释如何做我正在尝试做的事情,这样我才能理解需要发生什么?

我有一个对象数组,每个对象在屏幕上绘制一个圆圈;我让他们在一个边界框内弹跳,但现在我希望他们碰撞。

我写了下面的方法,这是有效的...但只是。球偶尔会卡在一起并且彼此“抖动”,我不知道为什么会这样。另外,我想我正在检查更多的碰撞而不是必要的(?)。

void handleObjectCollision() {

for(int i = 0; i < _myBtns.length; i++) {

 if(i != _id) {

    float dx = _myBtns[i].x - x;
    float dy = _myBtns[i].y - y;
    float distance = sqrt(dx*dx + dy*dy);

    if(distance < r * 2) {
      xS = -xS;
      yS = -yS;

      // Debug
      // println("Collision!");
    }

  }

}

我的课程和相关细分的完整粘贴可在此处找到:http://pastebin.com/eJawiHAE

此外,这是我一直在做的一个例子,http://processing.org/learning/topics/bouncybubbles.html

我试图实现一个简单的弹跳(速度反转?),没有添加物理或使用向量,因为我希望能够首先理解它最简单的形式。

谢谢。

1 个答案:

答案 0 :(得分:4)

你不能只是反转你的物体移动的方向,因为碰撞可能几乎从它后面发生,在这种情况下,反转会使它再次碰撞碰撞与它碰撞的物体。这解释了你看到的抖动。您需要考虑碰撞发生的方向,并相应地调整方向向量,使用物理学中称为“弹性碰撞”的相关物理公式。

在这里,请查看:http://en.wikipedia.org/wiki/Elastic_collision