Я создаю игру на основе симулятора газовых частиц. Все узлы (зеленые кружки) представляют газообразные частицы и упруго сталкиваются.
Мой алгоритм правильно учитывает столкновения двух частиц, так как конечная скорость рассчитывается путем непосредственного применения уравнения. Однако это не удается, если три или более частиц перекрываются (сталкиваются) в один и тот же такт (кадр).
Мой вопрос заключается в том, как я могу рассчитать конечные скорости столкновения с более чем двумя сталкивающимися частицами. Обратите внимание, что если A сталкивается с B, а B сталкивается с C, A не обязательно сталкивается с C (B может быть в центре).
Есть ли алгоритм, разработанный специально для этого?
Симулятор: https://gravitifydemo1.github.io/
Импульс неверный (на момент написания). Однако график KE меняет свое значение. Если бы алгоритм двухчастичных столкновений работал правильно, КЕ не изменился бы. График постоянен в течение большей части времени, но он движется вверх и вниз.
Одним из частичных решений было бы использование адаптивных временных шагов, т. е. когда вы обнаруживаете несколько столкновений с одной и той же частицей за раз. , ваш шаг по времени уменьшается, так что с этой частицей происходит только одно столкновение, т. е. вы вычисляете положения в , с .
Это не решит всех проблем, но уменьшит вероятность возникновения множественных столкновений в течение одного временного шага.
Редактировать: Что касается множественных столкновений, вы можете рассматривать их как последовательность парных столкновений следующим образом.
Позволять быть число частиц, которые сталкиваются вместе в одном месте. Позволять быть совокупностью всех попарно возможных столкновений. Для каждого выбираются случайным образом, обрабатывают коллизии между парами и делают то же самое для всех пар.
Проблемы с этим подходом:
Если сталкивается много частиц, вы можете в конечном итоге обработать столкновения, которые фактически не должны происходить;
Лучший способ реализовать такой подход — начать с внешних столкновений и «нырнуть» во внутренние. Однако это также увеличит сложность кода, поскольку вам придется вычислять расстояние до центра (массы) множества частиц и иметь массив с отсортированными расстояниями.
Шукант Пал
Ertxiem - восстановить Монику
Ertxiem - восстановить Монику