Как правильно обнаружить столкновение между несколькими объектами? - PullRequest
2 голосов
/ 11 января 2012

Это то, что я пытаюсь сделать для университетского задания, и я довольно новичок в этом, но я много читал по этому вопросу. Может кто-нибудь объяснить, в самых простых словах, как сделать то, что я пытаюсь сделать, чтобы я мог понять, что должно произойти?

У меня есть массив объектов, каждый из которых рисует круг на экране; У меня они подпрыгивают в ограничительной рамке, но теперь я бы хотел, чтобы они столкнулись.

Я написал метод ниже, который работает ... но только справедливо. Шары иногда застревают и «дрожат» друг на друга, и я понятия не имею, почему это происходит. Кроме того, я думаю, что проверяю больше коллизий, чем необходимо (?).

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 Ответ

4 голосов
/ 11 января 2012

Вы не можете просто изменить направление, в котором движется ваш объект, потому что столкновение может произойти почти из-за него, и в этом случае его обращение снова приведет его к столкновению с объектом, который столкнулся с ним.Это объясняет дрожание, которое вы видите.Вам необходимо рассмотреть направление, из которого произошло столкновение, и соответствующим образом скорректировать вектор направления, используя соответствующие физические формулы для того, что в физике известно как «упругие столкновения».

Здесь проверьте это: http://en.wikipedia.org/wiki/Elastic_collision

...