Straight skeleton
Существует целый класс структур типа [1]. Она используются в различных практических задачах (проектирование крыш для зданий) и для доказательства некоторых теорем[2].
, которые описывают базовые топологические свойства объектов. Структура была придумала Oswin AichholzerТопологические свойства
Определение: |
Straight skeleton (Angular Bisector Network, ABN) полигона без самопересечений определяет разбиение полигона на регионы, границами которых являются стороны полигона, биссектрисы углов и отрезки, соединяющие точки пересечения биссектрис. |
Опишем подробней, как получается такое разбиение. Мы можем представить, будто все стороны прямоугольника параллельно двигаются внутрь с одинаковой постоянной скоростью, то есть многоугольник как бы сжимается внутрь. Тогда вершины будут двигаться вдоль биссектрис , а точки пересечения биссектрис будут соединять совпавшие участки сторон прямоугольника в конце движения. В каждый момент времени от начала движения рёбер мы получаем слоистую структуру (рис 1.). На рис. 2 синим цветом выделен — множество отрезков, образованных точками пересечения при движении сторон полигона. Чем-то структура похожа на строение крыши в домах (рис. 3). И для решения этой задачи как раз и может применяться: по стенам здания необходимо спроектировать его крышу.
Процесса стягивания многоугольника продолжается до тех пор, пока происходят его топологические изменения, то есть меняется число вершин в стянутом многоугольнике, и таким образом появляются новые вершины дерева
. Существуют два типа изменений, в ходе которых образуются новый вершины дерева:- — данное изменение происходит, когда сторона многоугольника полностью стягивается, делая соседние стороны инцидентными.
- происходит, когда ребро разбивается на два новых ребра, исходящих из точки преломления старого. Такое событие происходит на биссектрисе вогнутой вершины многоугольника. И тогда стягиваемая многоугольником область разбивается на две непересекающиеся многоугольные области.
На рисунке
ы изображён красным кругом, а ы — чёрным прямоугольником.Таким образом,
ы соответствуют внутренним вершинам , гранями являются области многоугольника, заметаемые сторонами многоугольника в процессе стягивания, дуги соединяют либо две внутренние вершины либо внутреннюю вершину с листом — вершиной многоугольника.Стоит также отметить, что в общем случае
ы могут быть нетривиальными. На рисунке ниже в случае в вершине совпали из вершины и ребра , а в случае совпали два а вершин и . Случаи и — простые и ы.Свойства Straight skeleton
Из процесса построения планарным графом. Ранее уже упоминалось, что он также является деревом. Будем обозначать простого полигона без самопересечений , в котором вершин, как . Тогда справедливы следующие леммы:
следует, что он являетсяЛемма (1): |
является деревом, содержит граней, не более внутренние вершины и не более рёбер. |
Доказательство: |
Каждая грань начинается образовываться во время стягивания ребра , и даже если на ребре произошёл , сама грань не могла разделиться. Построение грани завершается, когда ребро полностью стягивается. И это ребро дальше не может появиться снова, поэтому граней в столько, сколько сторон в многоугольнике, то есть ровно .То, что Внутренние вершины в является деревом, легко доказывается по индукции. База верна, когда внутренняя вершина всего одна. Тогда у листьями будут вершины многоугольника. Такой граф очевидным образом будет деревом. Если в внутренних вершин, то рассмотрим самый первый . Он закончился в какой-то внутренней вершине , у неё есть смежные листья — вершины, инцидентные этому ребру, — и из неё достижимы другие ы, с не более чем внутренними вершинами, и они являются деревьями по предположению индукцию. Тогда получаем, что для вершин тоже будет деревом. имеют степень не меньше — простой перебор всех случаев ов (степень будет больше, если в одной вершине совпало несколько событий). Так как имеет листьев, то внутренних вершин будет не больше , а так как является деревом, то рёбер у него будет не более . |
Wavefront-алгоритм
Существует простой в понимании и реализации алгоритм для построения триангуляции, который работает за время [3]
на основеРассмотрим оригинальный алгоритм, который был предложен авторами этой структуры.
TODO: "Простой" алгоритм построения за n^3 (wavefront)
Другие алгоритмы
Известен алгоритм[4] построения для монотонных полигонов за время с использованием памяти. Существует и более сложный алгоритм[5], который строит за время , где — общее число вершин в полигоне, — число вогнутых вершин в полигоне.
Примечания
- ↑ Oswin Aichholzer, Franz Aurenhammera, "A Novel Type of Skeleton for Polygons"
- ↑ Wikipedia — Fold-and-cut theorem
- ↑ Stefan Huber, Martin Held, "Straight Skeletons and their Relation to Triangulations"
- ↑ Straight Skeletons of Monotone Polygons
- ↑ Petr Felkel, Stepan Obdrazalek, "Straight Skeleton Implementation"
Источники информации
- Wikipedia — Straight skeleton
- Computing Straight Skeletons and Motorcycle Graphs: Theory and Practice
- Designing roofs and drawing phylogenetic trees
- Eric Berberich, "Straight Skeleton, Computational Geometry and Geometric Computing Seminar"
- [The Angular bisector network Implementation and the CGAL library]