Программирование столкновения объектов (множественный случай столкновения)



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



Думая в сферах, когда одна сфера сталкивается с 2 одновременно, я думал, что величина сил, которая заставляет обе сферы двигаться, должна быть разделена на 2 . Но когда я программирую его , я всегда вижу, что одна сфера имеет большую скорость, чем вторая, потому что, как я программирую ее, она сначала сталкивается с одной, а затем с другой . Давайте покажем изображение, чтобы нарисовать четко задача:

Введите описание изображения здесь



Сначала он обнаруживает красную сферу .
Затем обнаруживается столкновение, и величина силы такова, как будто была только одна сфера.
Затем он обнаруживает оранжевую сферу , и величина силы меньше, чем первая.



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



Mod :



Кроме того, если вы поможете мне найти механизм, который делает это красиво, я дам вам 50+ больше .

412   4  

4 ответов:

Проблема состоит в том, что для столкновения двух тел сохранение энергии и импульса в основном достаточно для определения результата, но для Проблемы трех тел это уже не так. Даже если вы сделаете то, что предлагают Марк и Дарен, и определите все сталкивающиеся тела в пределах временного шага, это действительно никуда не приведет вас, потому что 1) вы все равно не будете знать, как перемещать объекты после столкновения; и 2) основной вопрос в том, сколько объектов нужно рассмотреть во время каждого столкновения это не временной шаг, а деформация объектов, и если вы правильно относитесь к этому, последовательность обновления в пределах временного шага не будет иметь значения. Например, если у вас есть очень мягкие объекты, они, вероятно, будут находиться в контакте в течение многих временных шагов, а очень твердые объекты-только несколько временных шагов.

Хороший ответ на эту проблему немного сложнее, и причина этого содержится в вашем бонусном вопросе, то есть каков механизм. Механизм-это в основном то, что вы есть. не рассматривая в своей упрощенной задаче: деформацию объектов, скольжение, вращение и т. д., Но это, как правило, будут доминирующие вопросы при столкновении трех тел. То, что вы делаете, полностью зависит от того, насколько вам нужна точность. Вы можете просто притвориться, что все столкновения происходят либо между двумя объектами, либо третье столкновение двух всегда точно симметрично (что является очень редким событием). В качестве более точного старта вы могли бы просто рассмотреть, что они являются деформируемыми объектами, предположив, что каждый столкновение имеет момент времени, когда все максимально деформировано, и каковы силы, которые возникают из этих деформаций, и отсылают вещи, основанные на этих силах (F=dp/dt). Однако можно было бы сделать и другие аппроксимации, скажем, просто разделить передачу импульса, основываясь на том, какой из них попадает первым, и дать этому количеству пропорциональное do (количество деформации)/(расстояние до следующего объекта) или что-то подобное.

Будьте осторожны, чтобы проверить все возможные парные взаимодействия, прежде чем вычислять любые силы, изменения скорости, энергии и т.д. Похоже, что ваша физическая симуляция очень рада вычислению динамики сразу после первого столкновения, которое она обнаруживает.

Что имел в виду Даренв (как n00b я не могу прокомментировать его ответ напрямую), так это то, что последовательность должна быть примерно такой:

//test for collisions
blueHitRed = didCollide(blue, red)
blueHitOrange = didCollide(blue, orange)
...
//calculate resultant velocities
red.velocity = ...
orange.velocity = ...
blue.velocity

В то время как из вашего описания кажется, что нечто подобное происходит на самом деле

//red
blueHitRed = ...
red.velocity = ...
blue.velocity = ...
//orange
blueHitOrange = ...
orange.velocity = ...
blue.velocity = ...

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

Чтобы уточнить: когда все три тела взаимодействуют, в течение этого очень короткого промежутка времени, это проблема n-тела. Не ньютонинская проблема n-тела, а более общий случай.

Comments

    Ничего не найдено.