Итак, у меня есть система со встречными шарами, которая обычно работает, за исключением случаев, когда они сталкиваются с одинаковыми направлениями, на расстоянии менее 90 градусов.
Это потому, что шар выше пытается столкнуться с желтой линией, которая предположительно является плоскостью столкновения, но он отклоняет его от неправильного направления и «следует» за другим шаром. Общий алгоритм столкновения:
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. Проблема в том, что скорости шариков не поддерживаются, поскольку они имеют одинаковые скорости и массы, но после столкновений они различаются. Я не думаю, что это должно произойти, или это?