Проблемы столкновения с мячом - PullRequest
0 голосов
/ 01 марта 2012

Итак, у меня есть система со встречными шарами, которая обычно работает, за исключением случаев, когда они сталкиваются с одинаковыми направлениями, на расстоянии менее 90 градусов.

Diagram of colliding balls problem

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

dot = direction.surface;
parallel = surface * dot;
perpendicular = direction - parallel;
direction = perpendicular - parallel;

Отрицает компонент направления, параллельного нормали поверхности, перпендикулярной плоскости столкновения, а часть, перпендикулярная нормали поверхности, не изменяется.

Кто-нибудь знает исправление для этого? Я сделал что-то не так?

Редактировать: Теперь я добавил:

average = (ball1.velocity + ball2.velocity) / 2;
ball1.velocity -= average;
ball2.velocity -= average;

Перед выполнением расчетов выше и после этого:

ball1.velocity += average;
ball2.velocity += average;

Чтобы попасть в правильную систему отсчета, согласно ответу @ Beta. Проблема в том, что скорости шариков не поддерживаются, поскольку они имеют одинаковые скорости и массы, но после столкновений они различаются. Я не думаю, что это должно произойти, или это?

1 Ответ

2 голосов
/ 01 марта 2012

Рассмотрим 1D проблему отскока мяча от стены. Простой.

Теперь смотрите, как я отскакиваю мяч от передней переборки реактивного самолета в полете. Шар движется на север со скоростью 252 м / с, переборка движется на север со скоростью 250 м / с. Ответ не очевиден. Но сдвиньтесь в мою систему координат (вычитая скорость переборки, 250 м / с, из всего), и проблема тривиальна. Решите это, затем сдвиньте результат обратно в базовую рамку (на добавив 250 м / с ко всему), и все готово.

Теперь проблема 2D шара, отскакивающего от стены под углом. Просто. (Но убедитесь, что ваш код делает это правильно.)

Теперь два шара сталкиваются с равными и противоположными импульсами (я пока предположу, что они имеют одинаковую массу). Вы можете вообразить желтую стену в плоскости столкновения, и ответ будет легко получить.

Теперь два шара сталкиваются, но со скоростями, которые не составляют в целом ноль. Там все еще желтая стена, но она движется. Итак, перейдите в каркас стены, вычтя среднее значение скоростей шаров (сумма / 2) из ​​всего, решите более простую задачу, затем вернитесь назад, добавив ту же самую скорость обратно ко всему, и все готово.

...