Есть ли способ изменить алгоритм Гилберта-Джонсона-Кирти, чтобы он находил точки столкновения между двумя телами вместо истинного / ложного результата? Насколько я понял, полученное значение расстояния можно использовать для нахождения этих точек. Я поискал в Интернете, но не нашел никаких подсказок.
Точки столкновения в GJK
Ответы (2)
То, о чем вы просите, неправильно сформулировано. Если они сталкиваются, то точка пересечения не определена - поскольку пересечение фактически является областью перекрытия и, следовательно, может быть любым количеством возможных точек. Вместо этого вы должны думать о «точке пересечения» как о координате в пространстве-времени (dx, dy, dz, t), представляющей время удара, вместе с вектором перемещения между двумя телами, дающим вам их относительные конфигурации. .
Один из способов изменить GJK для вычисления пересечения пространства-времени - это выполнить двоичный поиск по развернутому объему, чтобы найти момент времени непосредственно перед ударом. Используя эти данные, вы можете вычислить разделительную ось и соответствующие экстремальные точки для обоих тел, что дает вам близкое приближение к точке удара. Этот подход также может быть быстрым, если вы повторно используете симплексы из предыдущих итераций поиска, чтобы ускорить последующие тесты. У Кристера Эрциссона есть несколько примечаний по этому поводу здесь: http://realtimecollisiondetection.net/pubs/SIGGRAPH04_Knotes_Gnotes / а>
Я полагаю, что в этом документе рассматривается ваш вопрос, и он актуален. У меня нет кода. и не собираюсь повторно объяснять это, но у автора также есть пресс-релиз на YouTube, объясняющий это. сейчас работаю над кодом, и их очень мало примеров. но это то, что вы хотите. вы можете использовать упомянутый «менее эффективный» способ. в статье как. так как он отлично подойдет для вашей работы. если вы не ставите целью исключительно высокую производительность.
«Улучшение алгоритма GJK для более быстрых и надежных запросов о расстоянии между выпуклыми объектами»
МАТТИЯ МОНТАНАРИ и НИК ПЕТРИНИК Оксфордского университета
ЭТТОРЕ БАРБЬЕРИ Лондонский университет королевы Марии