Обнаружение столкновения для быстро летающих мелких объектов - PullRequest
0 голосов
/ 07 января 2019

Я хочу смоделировать быстрое движение частиц, которые более чем в два раза меньше межзеренного промежутка, через который они проходят. рассмотрим следующую ситуацию: 3 частицы одинакового радиуса движутся с одинаковой скоростью к точке в центре. с кодом типа

for(i..) 
  for (j..) 
    check_if_ith_collides_with_jth();`

в своей самой простой реализации система, вероятно, будет вести себя следующим образом:

enter image description here

Но то, что должно произойти, - это особый случай отскока, когда 3 (или более) частиц сталкиваются одновременно:

enter image description here

Я хочу решение для любого количества частиц. Как это обычно решается? Я могу показать еще более сложный случай с 4 частицами:

enter image description here

возможно ли охватить фиксированную рамку большего размера?

1 Ответ

0 голосов
/ 12 января 2019

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

В своем ответе я предполагаю, что это своего рода симулятор, управляемый дискретными событиями времени, когда частицы движутся вперед по траекториям, и ко всем парам применяется тест на столкновение. CPA = ближайшая точка приближения.

Одна точка зрения может заключаться в том, что существует минимальная полоса ошибок по времени обнаружения, и вы можете найти большое количество пар, которые "сталкиваются одновременно" относительно этой полосы ошибок. Таким образом, на любом этапе их тестирования вы можете взять все пары, у которых расстояние CPA в пределах порога и прогнозируемое время CPA в пределах current_time +/- error. Это поймает все пары, которые соответствуют вашему критерию. Это настраивается, и разные пороговые значения для времени и расстояния CPA приведут к разному количеству пар для одинаковых начальных условий.

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

Если бы вы реализовали вещи по второму предложению, то установка симметричного тестового примера обязательно «не смогла бы» воспроизвести теоретический результат, но опять же, это не значимый тест.

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

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

...