Точки столкновения в GJK

Есть ли способ изменить алгоритм Гилберта-Джонсона-Кирти, чтобы он находил точки столкновения между двумя телами вместо истинного / ложного результата? Насколько я понял, полученное значение расстояния можно использовать для нахождения этих точек. Я поискал в Интернете, но не нашел никаких подсказок.


person Viuo    schedule 19.06.2010    source источник
comment
Мысли непрофессионала: если вы выполняете GJK от исходной точки до тела, вы можете получить не только расстояние от исходной точки до тела, но и фактическую точку тела, ближайшую к исходной. Однако для двух тел вы измеряете сумму Минковского A-B. Если тела столкнулись, в результате вы получите 0, но вам нужно будет найти все пары точек (a в A, b в B), разность которых равна 0, чтобы получить набор точек столкновения. Итак, я не вижу, чтобы результат GJK приводил к простому общему решению. Попробуйте интуитивно взглянуть на pfirth.co.uk/minkowski.html.   -  person Owen S.    schedule 20.06.2010
comment
Знаете ли вы какое-нибудь другое простое решение, чтобы найти очки жизни между двумя телами? Я прочитал «Приведение лучей к обычным выпуклым объектам с применением для непрерывного обнаружения столкновений» Джино Ван Ден Берген, но это действительно сложно и, похоже, мне не очень помогает (я пытаюсь создать симулятор физики, и для меня это очень важно. тела правильно вращаются после столкновения). Из того, что я читал, похоже, что если тело вращается, таким способом не так легко найти очки жизни. Может быть, я смогу реализовать какие-нибудь другие алгоритмы? Я могу проверять каждый кадр, если это поможет.   -  person Viuo    schedule 20.06.2010


Ответы (2)


То, о чем вы просите, неправильно сформулировано. Если они сталкиваются, то точка пересечения не определена - поскольку пересечение фактически является областью перекрытия и, следовательно, может быть любым количеством возможных точек. Вместо этого вы должны думать о «точке пересечения» как о координате в пространстве-времени (dx, dy, dz, t), представляющей время удара, вместе с вектором перемещения между двумя телами, дающим вам их относительные конфигурации. .

Один из способов изменить GJK для вычисления пересечения пространства-времени - это выполнить двоичный поиск по развернутому объему, чтобы найти момент времени непосредственно перед ударом. Используя эти данные, вы можете вычислить разделительную ось и соответствующие экстремальные точки для обоих тел, что дает вам близкое приближение к точке удара. Этот подход также может быть быстрым, если вы повторно используете симплексы из предыдущих итераций поиска, чтобы ускорить последующие тесты. У Кристера Эрциссона есть несколько примечаний по этому поводу здесь: http://realtimecollisiondetection.net/pubs/SIGGRAPH04_Knotes_Gnotes / а>

person Mikola    schedule 24.06.2011

Я полагаю, что в этом документе рассматривается ваш вопрос, и он актуален. У меня нет кода. и не собираюсь повторно объяснять это, но у автора также есть пресс-релиз на YouTube, объясняющий это. сейчас работаю над кодом, и их очень мало примеров. но это то, что вы хотите. вы можете использовать упомянутый «менее эффективный» способ. в статье как. так как он отлично подойдет для вашей работы. если вы не ставите целью исключительно высокую производительность.

«Улучшение алгоритма GJK для более быстрых и надежных запросов о расстоянии между выпуклыми объектами»

МАТТИЯ МОНТАНАРИ и НИК ПЕТРИНИК Оксфордского университета

ЭТТОРЕ БАРБЬЕРИ Лондонский университет королевы Марии

https://ora.ox.ac.uk/objects/uuid:69c743d9-73de-4aff-8e6f-b4dd7c010907/download_file?safe_filename=GJK.PDF&file_format=application%2Fpdf&type_of_art=Journal

person Zepalz    schedule 04.05.2019
comment
вот ссылка на объяснение youtube ... через 18 минут youtube.com/watch? v = NcivnQ02rGw - person Zepalz; 04.05.2019