Я реализую физический движок для симуляции червеобразных существ. Проблема в том, что они могут плавать друг над другом и занимать одну и ту же точку в пространстве. Итак, у вас есть некоторое представление об окружающей среде, я предоставляю видео здесь: http://www.box.net/shared/mlddkslszbxd59cfdhpc
Так что мне нужно включить алгоритм обнаружения и разрешения столкновений, который бы преодолел это. Для обнаружения я использовал ограничивающие круги; каждому червю присваивается внешний грубый круг, который, если его пересечь, запускает обнаружение вокруг более мелких кругов обнаружения мелких зерен, расположенных вокруг каждого сегмента тела:
Этот бит относительно прост. Более сложный момент - решить, что делать при столкновении. Моей первой мыслью было просто оттолкнуть оскорбительные массы друг от друга, но это имело довольно странные последствия. Я предполагаю, что более реалистичный подход изменил бы скорости оскорбительных точечных масс, чтобы по существу сбить их с курса. Моя проблема в том, как вывести эти скорости и связанные с ними силы.
На всякий случай, если это не совсем очевидно, каждый червь состоит из пружин и точечных масс. Каждый сегмент тела червя принимает прямоугольную форму в состоянии покоя с 4 точечными массами и 6 пружинами (поскольку есть также две диагональные пружины).
Приветствия за любую помощь, я действительно ценю это! :-)
Бен.