реакция на столкновение с крутящим моментом - PullRequest
1 голос
/ 18 апреля 2011

Я пишу 2D симулятор твердого тела.Моделируемые объекты являются выпуклыми многоугольниками.Мой вопрос касается того, как определить «точку» столкновения, чтобы при применении силы отклика я также мог рассчитать крутящий момент.

В 2D популярным методом обнаружения узкофазных столкновений является разделительныйТеорема Оси.Тем не менее, хотя это дает вам "они сталкиваются?"а также «на сколько?», это НЕ дает вам контрольную точку (о которой я знаю), в которой можно применить силу отклика (и, таким образом, рассчитать крутящий момент) *.

Другой метод(что также интересует меня больше, потому что это то, что используется в 3D, что было бы логичным следующим шагом), чтобы вычислить разницу Минковского двух полигонов и решить, что они сталкиваются, если (0,0) содержится вполучившийся полигон.Но как вы используете это, чтобы определить относительную точку, в которой применить силу реагирования?Моя гипотеза состоит в том, что, поскольку каждая грань этой разности эффективно соответствует грани одного из многоугольников, расстояние разделения является кратчайшим расстоянием от (0,0) до MD, и вы применяете это к соответствующей грани на многоугольнике.

В качестве бонуса, как это сделать в 3D?

* Когда я писал это, я просто понял, что, используя SAT, я мог просто отслеживать, какие точкиперекрывают друг друга и применяют силу в «среднем» из этих точек.Но мне нужно было бы решить, какую из нескольких неразлучных осей выполнить этот маленький трюк ...

1 Ответ

0 голосов
/ 07 мая 2011

Вот как я это сделал один раз, но есть много возможных решений:

Теорема о разделяющей оси даст вам направление от одного тела к другому, это направление перпендикулярно разделяющей оси (или плоскости разделения в 3D). Вы можете использовать это направление с каждой точкой на выпуклых телах, чтобы получить расстояние проникновения или расстояние каждой точки от разделяющей оси или плоскости вдоль направления.

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

Некоторые продвинутые техники:

Хранение контактного коллектора в памяти позволит вам эффективно протестировать следующий кадр, сначала проверив предыдущий коллектор.

Для непрерывного обнаружения столкновений замените проверку того, находится ли точка внутри другого тела, проверкой того, пересекает ли путь каждой точки в пределах кадра (приблизительно как отрезок линии) другое тело. Это намного дороже, но предотвращает туннелирование небольших быстро движущихся объектов через тонкие стены.

...