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