Центральный Дом Знаний - Алгоритм Гилберта — Джонсона — Кёрти

Информационный центр "Центральный Дом Знаний"

Заказать учебную работу! Жми!



ЖМИ: ТУТ ТЫСЯЧИ КУРСОВЫХ РАБОТ ДЛЯ ТЕБЯ

      cendomzn@yandex.ru  

Наш опрос

Как Вы планируете отдохнуть летом?
Всего ответов: 922

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Форма входа

Логин:
Пароль:

Алгоритм Гилберта — Джонсона — Кёрти

Алгоритм Гилберта — Джонсона — Кёрти (англGilbert — Johnson — Keerthi algorithm, сокращённо GJK), алгоритм для определения минимального расстояния между двумявыпуклыми множествами (объектами). В отличие от многих других алгоритмов нахождения расстояния, GJK не требует, чтобы геометрические данные были сохранены в каком-либо специфическом формате. Вместо этого алгоритм GJK полностью полагается на носитель функции и итерационным методом (с помощью итераций) генерирует ближайшие симплексы для корректного определения минимального расстояния между двумя выпуклыми объектами. При этом алгоритм GJK в своей работе использует понятия суммы Минковского для двух выпуклых форм.

В случае нахождения минимального расстояния между двумя невыпуклыми объектами можно:

  1. разбить невыпуклый объект на несколько выпуклых и затем применить метод для образовавшихся выпуклых объектов;

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

А.Г.-Д.-К. предоставляет довольно эффективный метод обнаружения столкновений между выпуклыми объектами. Он полагается на несколько ключевых моментов, которые кратко выделены ниже:

Сумма Минковского: Имеется два множества A и B, их сумма Минковского определяется как:

Это определение кажется неправильным, так как суммирование точек бессмысленно. В этом свободном замечании x и y пусть скорее будут восприняты как векторы , где является началом мировой системы координат.

Конфигурационное пространство препятствий (англConfiguration Space Obstacle — CSO). Для пары  выпуклых объектов их CSO будет дано A − B, то есть сумма Минковского от A и − B. Этот набор особенно полезный в определениях столкновений, так как он может доказать, что A и B пересекаются тогда и только тогда, когда их CSO содержат начало системы координат:

Кроме того, их дистанция даётся:

Подобным образом глубина проникновения пар объектов может быть выраженная в терминах их CSO как:

Для пары пересекающихся объектов глубина проникновения реализуется точкой на границе A − B, которая наиболее близка к началу системы координат.

Support Mapping. Support Mapping SA(v) является функцией, которая принимает вектор v и выпуклое множество A, возвращает наиболее «экстремальную» точку для выпуклого объекта A в этом направлении (направлении вектора v). Формально говоря:

Разделяющая плоскость/ось (англSeparating Plane/Axis): Дано два объекта A и B, плоскость , которая разделяет A и B, если для каждой точки  и для каждой точки . Вектор v известен как «слабо отделённая ось» (англ. weakly separating axis) для A и B, поскольку есть по крайней мере одна отделяющая плоскость, которая есть нормалью к нему, или, эквивалентно,

Общая идея алгоритма GJK состоит в изучении конфигурационного пространства препятствий (CSO) для двух данных объектов A и B, ища симплекс, который содержит начало системы координат. Если поиск заканчивается с отрицательным ответом, то есть начало системы координат лежит вне CSO, то тогда объекты не пересекаются. В этом случае точка из CSO, которая является ближайшей к началу системы координат, представляет разделяющую ось A и B, и это, в свою очередь, может использоваться как отправная точка для тестирования столкновений в последующих итерациях.

Два типа столкновений и соответствующих им CSO-граней: грань-вершина (сверху) и ребро-ребро (снизу)

С другой стороны, если поиск был успешен, и потом объекты пересеклись, то для того, чтобы исполнить реакцию на столкновение и некоторые другие детали по отношению к столкновению, необходимы вычисления. Например, типичная схема, пытающаяся определить глубину проникновения, которая, в свою очередь, нуждается в поиске точки на границе CSO, которая будет ближайшей к началу системы координат. Ван ден Берген (англ. G. van den Bergen) предлагает расширенный алгоритм политопов для этого случая. Однако наша система вычисляет относительную информацию — ударную грань (англhit face), то есть ту грань на оболочке CSO, которая является ближайшей к началу системы координат. Анализируя вершины в этой грани, является возможным определить, какая составная часть объекта приняла участие в столкновении. Здесь различают два основных случая: столкновения типа «ребро-ребро» (англ. edge-edge) и столкновения типа «вершина-грань» (англvertex-face). Для того, чтобы понять, как идентифицируются составные части, заметим, что каждый из CSO соответствует паре векторов . Например, вершина выпуклого объекта A столкнулась с гранью выпуклого объекта B, которая характеризуется тем, что имеет все три вершины ударной грани, соответственные к той самой вершине объекта A, но к трём разным вершинам объекта B.

Алгоритм GJK часто используется в системах моделирования, компьютерной анимации икомпьютерных играх. В этом режиме при расчёте финальный (выходной, результирующий) симплекс из предыдущей итерации используется как начальные данные в следующей итерации (фрейме, кадре). Если позиция в новом фрейме близка к аналогичной позиции в старом фрейме, то алгоритм будет сходиться в одной или в двух итерациях.

Стабильность, скорость и занимаемый объём памяти алгоритма сделали его популярным вобнаружениях столкновений в реальном времени, особенно в физических движках для компьютерных игр.

Loading

Календарь

«  Апрель 2024  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930

Архив записей

Друзья сайта

  • Заказать курсовую работу!
  • Выполнение любых чертежей
  • Новый фриланс 24