У меня есть система с сталкивающимися шарами, которые обычно работают, за исключением случаев, когда они сталкиваются с подобными направлениями, менее чем на 90 градусов друг от друга.Проблемы с столкновением с баллом
Это потому, что мяч выше пытается наехать против желтой линии, которая, предположительно, столкновение самолета, но он посылает его в неправильном направлении, и «следует» другой мяч. Общий алгоритм для столкновения:
dot = direction.surface;
parallel = surface * dot;
perpendicular = direction - parallel;
direction = perpendicular - parallel;
что сводит на нет компоненту направлении, параллельном нормали к поверхности, перпендикулярной к плоскости столкновения, и часть, перпендикулярной к нормали к поверхности не изменяется.
Кто-нибудь знает, как это исправить? Я сделал что-то не так?
Edit: Так что теперь я добавил:
average = (ball1.velocity + ball2.velocity)/2;
ball1.velocity -= average;
ball2.velocity -= average;
Перед выполнением расчетов выше, и после этого:
ball1.velocity += average;
ball2.velocity += average;
Чтобы получить в правой системе отсчета, в соответствии с ответом @ Бета. Проблема в том, что скорости шариков не поддерживаются, так как они имеют одинаковые скорости и массы, но после столкновений они различны. Я не думаю, что это должно произойти, или не так ли?
Этот метод предназначен для использования в рамке центра-импульса. Проясняет ли это, или мы должны объяснить больше? – Beta
Не возражаете ли вы объяснить это немного? Есть так много примеров онлайн, которые используют этот метод, но это не всегда работает? – slartibartfast
Это длинное объяснение. Вы знакомы с идеей изменения систем отсчета? – Beta