Интернет магазин китайских планшетных компьютеров



Компьютеры - Алгоритм Гилберта Джонсона Кёрти - Описание

23 января 2011


Оглавление:
1. Алгоритм Гилберта Джонсона Кёрти
2. Описание
3. Использование



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

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

A+B=\{x+y\colon\;\;x\in A,\;y\in B\}.

Это определение кажется неправильным, так как суммирование точек бессмысленно. В этом свободном замечании x и y пусть скорее будут восприняты как векторы \vec{x}=\mathbf{x}-\mathbf{o}, где \mathbf{o} является началом мировой системы координат.

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

A\cap B\ne\varnothing\equiv 0\in A-B.

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

d=\min\{\|x\|\colon x\in A-B\}.

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

p=\inf\{\|x\|\colon x\in A-B\}.

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

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

S_A\in A\mid v\cdot S_A=\max\{v\cdot x\colon x\in A\}.

Разделяющая плоскость/ось: Дано два объекта A и B, плоскость H, которая разделяет A и B, если для каждой точки a\in A,\;v\cdot a+\delta\geqslant 0 и для каждой точки b\in B,\;v\cdot b+\delta\geqslant 0. Вектор v известен как «слабо отделённая ось» для A и B, поскольку есть по крайней мере одна отделяющая плоскость, которая есть нормалью к нему, или, эквивалентно,

v\cdot S_A\geqslant v\cdot S_B.

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

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

С другой стороны, если поиск был успешен, и потом объекты пересеклись, то для того, чтобы исполнить реакцию на столкновение и некоторые другие детали по отношению к столкновению, необходимы вычисления. Например, типичная схема, пытающаяся определить глубину проникновения, которая, в свою очередь, нуждается в поиске точки на границе CSO, которая будет ближайшей к началу системы координат. Ван ден Берген предлагает расширенный алгоритм политопов для этого случая. Однако наша система вычисляет относительную информацию — ударную грань, то есть ту грань на оболочке CSO, которая является ближайшей к началу системы координат. Анализируя вершины в этой грани, является возможным определить, какая составная часть объекта приняла участие в столкновении. Здесь различают два основных случая: столкновения типа «ребро-ребро» и столкновения типа «вершина-грань». Для того, чтобы понять, как идентифицируются составные части, заметим, что каждый из CSO соответствует паре векторов ,\;a_i\in A,\;b_j\in B. Например, вершина выпуклого объекта A столкнулась с гранью выпуклого объекта B, которая характеризуется тем, что имеет все три вершины ударной грани, соответственные к той самой вершине объекта A, но к трём разным вершинам объекта B.



Просмотров: 3654


<<< Алгоритм Ву
Алгоритм Грэхема >>>