Столкновение твердого тела, 3 круга в контакте

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

Я не использую методы релаксации или какие-либо виды разрешения пересечений. Объекты перемещаются в состояния контакта, а события контакта разрешаются как столкновения.

Я пробовал CONTACT_RANGE от 0,001f до 0,00001f. Это значение определяет, находятся ли объекты в контакте. Уменьшение этого значения приводит к меньшему количеству состояний перекрытия, но предположительно в какой-то момент дальнейшее снижение значения приведет к тому, что симуляция пропустит контактные события, потому что неточности приведут к тому, что системы тел перейдут в дискретное состояние или состояние перекрытия.

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

В прошлом я неправильно обрабатывал импульс / KE, но ограничивал скорости так, чтобы системы с несколькими телами не пересекались в следующем подкадре. Но теперь, когда у меня есть правильное решение для столкновения двух тел, я хочу сделать это правильно для большего количества тел.

Я не уверен, что делать дальше. Я читал интересное предположение, что на самом деле не бывает одновременных столкновений, и их можно решать одно за другим. Это правда ?

Могу ли я просто вычислить результирующую скорость тела от одного контакта, а затем сделать то же самое со следующим контактом и т. д.?

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

Или мне нужна одна функция для определения скорости от нескольких контактов?

Любое руководство приветствуется.

Гэвин

«Могу ли я просто вычислить результирующую скорость тела от одного контакта, а затем сделать то же самое со следующим контактом и т. д.?». Насколько я знаю физику, этого достаточно.
Решение довольно сложное, так как вам нужно построить систему уравнений, чтобы найти все контактные импульсы, когда они происходят одновременно.
См . здесь и здесь о том, как моделировать такие системы.

Ответы (1)

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

Хорошо, это действительно отличное объяснение. По сути, я превращаю проблему из сложной в легко решаемую, но имеющую правильное решение. Просто признав, что в любом случае существует неопределенность, я просто навязываю свою собственную неопределенность, которая в любом случае не очень заметна. Ха, это захватывающее осознание.
Я реализовал этот метод, и он работает так, как ожидалось. И это легкий метод. Моя единственная критика заключается в том, что, когда я думаю об игре в бильярд, мне кажется, что одновременные столкновения не так уж редки. Многие трюки с бильярдом работают благодаря равномерному распределению импульсов.
Но в этом случае шары уже соприкасаются, это не то, что я имел в виду под «одновременным» столкновением. Это более сложное взаимодействие, которое можно «упростить» до «одновременного» столкновения. Если вы собираетесь имитировать такие конфигурации, я думаю, вы не можете использовать «неодновременный» подход.
Но позвольте мне подумать об этом подробнее.