Я пишу 2D симулятор твердого тела.Моделируемые объекты являются выпуклыми многоугольниками.Мой вопрос касается того, как определить «точку» столкновения, чтобы при применении силы отклика я также мог рассчитать крутящий момент.
В 2D популярным методом обнаружения узкофазных столкновений является разделительныйТеорема Оси.Тем не менее, хотя это дает вам "они сталкиваются?"а также «на сколько?», это НЕ дает вам контрольную точку (о которой я знаю), в которой можно применить силу отклика (и, таким образом, рассчитать крутящий момент) *.
Другой метод(что также интересует меня больше, потому что это то, что используется в 3D, что было бы логичным следующим шагом), чтобы вычислить разницу Минковского двух полигонов и решить, что они сталкиваются, если (0,0) содержится вполучившийся полигон.Но как вы используете это, чтобы определить относительную точку, в которой применить силу реагирования?Моя гипотеза состоит в том, что, поскольку каждая грань этой разности эффективно соответствует грани одного из многоугольников, расстояние разделения является кратчайшим расстоянием от (0,0) до MD, и вы применяете это к соответствующей грани на многоугольнике.
В качестве бонуса, как это сделать в 3D?
* Когда я писал это, я просто понял, что, используя SAT, я мог просто отслеживать, какие точкиперекрывают друг друга и применяют силу в «среднем» из этих точек.Но мне нужно было бы решить, какую из нескольких неразлучных осей выполнить этот маленький трюк ...