Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СКТ - 5,6сем.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
8.67 Mб
Скачать

Триангуляция Делоне

Триангуляцией полигона называется декомпозиция полигона в набор треугольников. Триангуляция используется для упрощения решения задачи в пределах области со сложной конфигурацией, и сведения ее к более простой задаче в пределах треугольника.

Отрезки прямых линий при триангуляции не могут пересекаться – они могут только встречаться в общих точках. Поскольку отрезки прямых линий замыкают треугольники будем считать их ребрами.

Рис. Два варианта триангуляции для одного и того же набора точек.

Для данного набора точек S : граничные точки – те, которые лежат на границе выпуклой оболочки conv(S), внутренние точки – лежат внутри выпуклой оболочки. К ребрам оболочки отнесем ребра, расположенные вдоль границы выпуклой оболочки conv(S), а к внутренним ребрам – все остальные ребра, образующие сеть треугольников внутри выпуклой оболочки. Каждое ребро триангуляции является границей двух областей: каждое внутреннее ребро находится между двумя треугольниками, а каждое ребро оболочки – между треугольником и бесконечной плоскостью.

Любой набор точек, за исключением нескольких тривиальных случаев допускает более одного способа триангуляции. Но любой способ триангуляции для данного набора определяет одинаковое число треугольников.

Теорема. Предположим, что набор точек S содержит N>=3 точек и не все из них коллинеарные. Кроме того, i точек из них являются внутренними (т.е. лежащими внутри выпуклой оболочки conv(S)). Тогда при любом способе триангуляции набора S будет получено точно N+i-2 треугольников.

Рассмотрим алгоритм формирования специального вида триангуляции, известный как триангуляция Делоне. Эта триангуляция хорошо сбалансирована в том смысле, что формируемые треугольники стремятся к равносторонним (равноугольным). См. левый рисунок выше. Триангуляция будет триангуляцией Делоне, если окружность описанная вокруг любого треугольника, не содержит внутри ни одной другой точки. Триангуляция Делоне будет уникальна, если никакие четыре точки из набора S не лежат на одной описанной окружности.

Схема алгоритма.

Вначале текущая триангуляция состоит из единственного ребра оболочки. На каждой итерации алгоритм ищет новый треугольник, который подключается к границе текущей триангуляции. По окончании работы алгоритма текущая триангуляция становится триангуляцией Делоне.

Введем классификацию ребер:

  1. спящее ребро, если оно еще не обнаружено алгоритмом

  2. живое ребро, если оно обнаружено, но известна только одна примыкающая к нему область

  3. мертвое ребро, если оно обнаружено алгоритмом и известны обе примыкающие к нему области.

Вначале живым является единственное ребро, принадлежащее выпуклой оболочке – к нему примыкает неограниченная плоскость, а все остальные ребра – спящие. По мере работы алгоритма ребра из спящих становятся живыми, а затем мертвыми. Граница на каждом этапе состоит из набора живых ребер.

На каждой итерации выбирается любое ребро е границы и оно подвергается обработке, заключающейся в поиске неизвестной области, которой принадлежит ребро е. Если эта область окажется треугольником t, определяемым концевыми точками ребра е и некоторой третьей вершиной v, то ребро е становится мертвым. Каждое из двух других ребер треугольника t переходят в следующие состояния: из спящего в живое или из живого в мертвое. Здесь вершина v будет называться сопряженной с ребром е. В противном случае, если неизвестная область оказывается бесконечной плоскостью, то ребро е просто умирает. В этом случае ребро е не имеет сопряженной вершины.

Алгоритм действует сверху вниз и слева направо.

Граница на каждом этапе выделена толстой линией.

Далее необходимо решить задачу поиска сопряженной точки для ребра.

Любое ребро ab определяет бесконечное семейство окружностей, проходящих через его концевые точки а и b. Обозначим это семейство окружностей через С(а, b). Центры окружностей семейства С(а, b) лежат на прямой линии, перпендикулярной отрезку ab и проходящей через его центр, и для них можно установить однозначное соотношение с точками на этом перпендикуляре. Параметризуем перпендикуляр, приписав каждой окружности параметрическое значение положения ее центра. Обозначим Сr окружность, которой соответствует параметрическое значение r. Если известная область для ребра ab является неограниченной, то r = - и Сr представляет собой полуплоскость, лежащую слева от ab. Необходимо найти такое наименьшее значение t>r, чтобы некоторая точка из набора S (отличная от a и b), принадлежала окружности Сt . Если не существует такого значения t, то ребро ab не имеет сопряженной точки.

При поиске сопряженной для ребра точки для ребра ab будем рассматривать только те точки pS, которые лежат справа от ab. Центр окружности, описанной вокруг любых трех точек a, b, c лежит на пересечении перпендикуляров, проведенных через середины отрезков ab и bp. (здесь используется тот факт, что перпендикуляры в серединах ребер треугольников пересекаются в центре описанной окружности треугольника). Вместо вычисления центра окружность будем вычислять его параметрическое значение вдоль перпендикуляра к середине ребра ab. Таким образом можно осуществить поиск наименьшего параметрического значения.

Алгоритм для вычисления триангуляции Делоне по набору из N точек выполняется за время O(N2), поскольку при каждой итерации из границы исключается одно ребро.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]