Участник:Muravyov — различия между версиями
Muravyov (обсуждение | вклад) (→Монотонный метод) |
Muravyov (обсуждение | вклад) (→Монотонный метод) |
||
Строка 46: | Строка 46: | ||
Уточним понятния ''выше'' и ''ниже'': точка <tex>p</tex> лежит ''ниже'' точки <tex>q</tex>, если <tex>p_y < q_y</tex> или если <tex>p_y < q_y</tex> и <tex>p_x > q_x</tex>, соответственно точка <tex>p</tex> лежит ''выше'' точки <tex>q</tex>, если <tex>p_y > q_y</tex> или если <tex>p_y = q_y</tex> и <tex>p_x < q_x</tex>. Это было сделано для того, чтобы избежать неопределённых ситуаций с вершинами, у которых <tex>y</tex>-координаты равны. | Уточним понятния ''выше'' и ''ниже'': точка <tex>p</tex> лежит ''ниже'' точки <tex>q</tex>, если <tex>p_y < q_y</tex> или если <tex>p_y < q_y</tex> и <tex>p_x > q_x</tex>, соответственно точка <tex>p</tex> лежит ''выше'' точки <tex>q</tex>, если <tex>p_y > q_y</tex> или если <tex>p_y = q_y</tex> и <tex>p_x < q_x</tex>. Это было сделано для того, чтобы избежать неопределённых ситуаций с вершинами, у которых <tex>y</tex>-координаты равны. | ||
[[Файл:Split-merge.png|560px|thumb||Пять типов вершин]] | [[Файл:Split-merge.png|560px|thumb||Пять типов вершин]] | ||
− | + | ||
− | * '''start-вершина''' — два её соседа лежат ниже её самой и | + | Обозначим за <tex>\phi</tex> внутренний при некоторой вершине вершине и определим далее пять типов вершин, четыре из которых являются поворотными: |
− | * '''split-вершина''' — два её соседа лежат ниже её самой и | + | * '''start-вершина''' — два её соседа лежат ниже её самой и <tex> \phi < \pi </tex> |
− | * '''end-вершина''' — два её соседа лежат выше её самой и | + | * '''split-вершина''' — два её соседа лежат ниже её самой и <tex> \phi > \pi </tex> |
− | * '''merge-вершина''' — два её соседа лежат выше её самой и | + | * '''end-вершина''' — два её соседа лежат выше её самой и <tex> \phi < \pi </tex> |
+ | * '''merge-вершина''' — два её соседа лежат выше её самой и <tex> \phi > \pi </tex> | ||
+ | * '''regular-вершина''' — не является поворотной, в отличие от остальных, другими словами один её сосед находится выше, а другой ниже её самой. | ||
=== Ушной метод === | === Ушной метод === | ||
Более эффективным я | Более эффективным я |
Версия 11:54, 30 апреля 2012
Триангуляция полигона — декомпозиция многоугольника
на множество треугольников, внутренние области которых попарно не пересекаются и объединение которых в совокупности составляет . В строгом смысле слова, вершины этих треугольников должны совпадать с вершинами исходного многоугольника. Триангуляция любого многоугольника не единственна. В этом можно убедиться из примера на рисунке.Содержание
Постановка задачи
На плоскости задан произвольный многоугольник. Стороны многоугольника не пересекаются. Требуется найти его триангуляцию.
Теорема о существовании трингуляции
Простым многоугольником является фигура, ограниченная одной замкнутой ломаной, стороны которой не пересекаются. Таким образом, случаи многоугольников с дырками в теореме исключаются.
Теорема (О существовании триангуляции многоугольника): |
У любого простого -вершинного многоугольника всегда существует триангуляция, причём количество треугольников в ней независимо от самой триангуляции. |
Доказательство: |
Доказательство ведётся индуктивно по Докажем, что триангуляция . При теорема тривиальна. Рассмотрим случай при и предположим, что теорема выполняется при всех . Докажем существование диагонали в многоугольнике . Возьмём самую левую по оси вершину многоугольника и две смежных с ней вершины и . Если отрезок принадлежит внутренней области — мы нашли диагональ. В противном случае, во внутренней области треугольника или на самом отрезке содержится одна или несколько вершин . Выберем самую наиболее далеко отстоящую от вершину . Отрезок, соединяющий и не может пересекать сторон , поскольку в противном случае одна из вершин это отрезка будет располагаться дальше от , чем . Это противоречит условию выбора . В итоге получаем, что — диагональ. Любая диагональ делит на два многоугольника и . За и обозначим количество вершин в и соответственно. и , поэтому по предположению индукции у и существует триангуляция, следовательно и у она существует. состоит из треугольников. Рассмотрим произвольную диагональ в триангуляции . делит на два многоугольника и , количество вершин в которых и соответственно. Каждая вершина встречается только в одном из двух многоугольников и , за исключением тех, которые являются концами , поэтому справедливо следующее: . По индукции, любая триангуляция состоит из треугольников, откуда следует, что . состоит из треугольников. |
Способы нахождения триангуляции
Примитивный алгоритм
В общем случае в произвольном
-угольнике всего возможных вариантов построения диагоналей. За проверим каждый из них. Для этого выясним:- пересекает ли данная диагональ многоугольник — находится за линейное время проверкой по всем рёбрам
- принадлежит ли диагональ внутренней область многоугольника.
Чтобы построить триангуляцию нужно найти
диагоналей. В результате получается оценка .Для некоторых классов многоугольников предыдущую оценку можно улучшить. Например, если многоугольник выпуклый, то достаточно лишь выбирать одну его вершину и соединять со всеми остальными, кроме его соседей. В итоге оценка
.Монотонный метод
Определение: |
Простой многоугольник | называется монотонным относительно прямой , если любая , такая что , пересекает стороны не более двух раз.
Определение: |
Многоугольник, монотонный относительно | -оси называется -монотонным.
Идея данного метода заключается в том, чтобы разбить многоугольник на монотонные части, а затем триангулировать каждую из них.
Рассмотрим самую верхнюю — максимальную по оси
вершину. Будем идти вниз по рёбрам до самой нижней — соотвественно минимальной по вершине, то есть таким образом, что для некоторой вершины : . Поворотной назовём вершину , на которой направление обхода будет меняется: и . Опишем более подробно этот тип вершин. Уточним понятния выше и ниже: точка лежит ниже точки , если или если и , соответственно точка лежит выше точки , если или если и . Это было сделано для того, чтобы избежать неопределённых ситуаций с вершинами, у которых -координаты равны.Обозначим за
внутренний при некоторой вершине вершине и определим далее пять типов вершин, четыре из которых являются поворотными:- start-вершина — два её соседа лежат ниже её самой и
- split-вершина — два её соседа лежат ниже её самой и
- end-вершина — два её соседа лежат выше её самой и
- merge-вершина — два её соседа лежат выше её самой и
- regular-вершина — не является поворотной, в отличие от остальных, другими словами один её сосед находится выше, а другой ниже её самой.
Ушной метод
Более эффективным я