Участник:Muravyov — различия между версиями
| Muravyov (обсуждение | вклад)  (→Способы нахождения триангуляции) | Muravyov (обсуждение | вклад)   (→Способы нахождения триангуляции) | ||
| Строка 22: | Строка 22: | ||
| == Способы нахождения триангуляции == | == Способы нахождения триангуляции == | ||
| === Примитивный алгоритм === | === Примитивный алгоритм === | ||
| − | В произвольном <tex>n</tex>-угольнике всего <tex>n^2</tex> возможных вариантов построения диагоналей. За <tex>\mathcal{O}(n)</tex> проверим каждый из них. Для этого выясним: | + | В общем случае в произвольном <tex>n</tex>-угольнике всего <tex>n^2</tex> возможных вариантов построения диагоналей. За <tex>\mathcal{O}(n)</tex> проверим каждый из них. Для этого выясним: | 
| * пересекает ли данная диагональ многоугольник  —  находится за линейное время проверкой по всем рёбрам | * пересекает ли данная диагональ многоугольник  —  находится за линейное время проверкой по всем рёбрам | ||
| * принадлежит ли диагональ внутренней область многоугольника. | * принадлежит ли диагональ внутренней область многоугольника. | ||
| Чтобы построить триангуляцию нужно найти <tex>n - 3</tex> диагоналей. В результате получается оценка <tex>\mathcal{O}(n^4)</tex>.   | Чтобы построить триангуляцию нужно найти <tex>n - 3</tex> диагоналей. В результате получается оценка <tex>\mathcal{O}(n^4)</tex>.   | ||
| − | Для некоторых классов многоугольников оценку можно улучшить, например: | + | ==== Случай выпуклого <tex>n</tex>-угольника ==== | 
| + | Для некоторых классов многоугольников предыдущую оценку можно улучшить, например: | ||
| {{Утверждение | {{Утверждение | ||
Версия 16:51, 29 апреля 2012
Триангуляция полигона — декомпозиция многоугольника на множество треугольников, внутренние области которых попарно не пересекаются и объединение которых в совокупности составляет . В строгом смысле слова, эти треугольники могут иметь вершины только в вершинах исходного многоугольника. Триангуляция не всегда единственна. В этом можно убедиться из примера на рисунке.
Содержание
Постановка задачи
На плоскости задан произвольный многоугольник. Стороны многоугольника не пересекаются. Требуется найти его триангуляцию.
Теорема о существовании трингуляции
Простым многоугольником является фигура, ограниченная одной замкнутой ломаной, стороны которой не пересекаются. Таким образом, случаи многоугольников с дырками в теореме исключаются.
| Теорема (О существовании триангуляции многоугольника): | 
| У любого простого -вершинного многоугольника  всегда существует триангуляция, причём количество треугольников в ней  независимо от самой триангуляции. | 
| Доказательство: | 
| Доказательство ведётся индуктивно по . При теорема тривиальна. Рассмотрим случай при и предположим, что теорема выполняется при всех . Докажем существование диагонали в многоугольнике . Возьмём самую левую вершину многоугольника и две смежных с ней вершины и . Если отрезок принадлежит внутренней области — мы нашли диагональ. В противном случае, во внутренней области треугольника или на самом отрезке содержится одна или несколько вершин . Выберем самую наиболее далеко отстоящую от вершину . Отрезок, соединяющий и не может пересекать сторон , поскольку в противном случае одна из вершин это отрезка будет располагаться дальше от , чем . Это противоречит условию выбора . В итоге получаем, что — диагональ. Любая диагональ делит на два многоугольника и . За и обозначим количество вершин в и соответственно. и , поэтому по предположению индукции у и существует триангуляция, следовательно и у она существует.Докажем, что триангуляция состоит из треугольников. Рассмотрим произвольную диагональ в триангуляции . делит на два многоугольника и , количество вершин в которых и соответственно. Каждая вершина встречается только в одном из двух многоугольников и , за исключением тех, которые являются концами , поэтому справедливо следующее: . По индукции, любая триангуляция состоит из треугольников, откуда следует, что . состоит из треугольников. | 
Способы нахождения триангуляции
Примитивный алгоритм
В общем случае в произвольном -угольнике всего возможных вариантов построения диагоналей. За проверим каждый из них. Для этого выясним:
- пересекает ли данная диагональ многоугольник — находится за линейное время проверкой по всем рёбрам
- принадлежит ли диагональ внутренней область многоугольника.
Чтобы построить триангуляцию нужно найти диагоналей. В результате получается оценка .
Случай выпуклого -угольника
Для некоторых классов многоугольников предыдущую оценку можно улучшить, например:
| Утверждение: | 
| Если многоугольник выпуклый, то достаточно лишь выбрать одну его вершину и соединить со всеми остальными, кроме его соседей. В итоге оценка . | 
Монотонный метод
Ушной метод
Более эффективным я
