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

Определение. Рассмотрим множество точек {A1 ,…, AN } на плоскости. Диаграммой Вороного называется разбиение плоскости на множества {P1 ,…, PN}, где Pi состоит из точек, более близких к Ai , чем к остальным точкам из множества {A1 ,…, AN }. Будем называть Ai центром области Pi.

 

Легко увидеть, что для двух точек A1 и A2 диаграммой Вороного будет разбиение плоскости на две полуплоскости прямой, являющейся серединным перпендикуляром к [A1 , A2 ]. В общем случае (для произвольного конечного множества {A1 ,…, AN } ) Pi представляет собой пересечение полуплоскостей, образованных серединным перпендикуляром ко всем отрезкам [Ai , Aj ] (ij), содержащих Ai. Отсюда непосредственно  вытекает, что Pi  является выпуклым многоугольником.

Будем считать диаграмму Вороного построенной, если нам известны:

1)массив вершин всех многоугольников Вороного,

2)массив ребер всех многоугольников Вороного (для каждого ребра задаются номера вершин)

3)массив многоугольников Вороного (для каждого многоугольника задается номер вершины его центра и массив номеров ребер),

4)для каждого ребра многоугольника Вороного номера многоугольников, для которых данное ребро является общим.

 

Рис 1. Многоугольники {P1,…,P5} диаграммы Вороного точек {A1,…,A5}

 

Теорема 6. В рамках алгоритмов, основанных на сравнениях, j(N)=O(N log N) является нижней оценкой времени решения задачи диаграммы Вороного множества точек {A1 ,…, AN }.

Для доказательства данной теоремы покажем, что задача сортировки сводится за линейное время к задаче построения диаграммы Вороного. Рассмотрим множество чисел {x1 ,…, xN }. Для решения задачи сортировки данного множества чисел разместим эти числа на оси (OX) числовой плоскости. Решим задачу построения диаграммы Вороного полученного множества точек {(x1 ,0)…,( xN ,0)}. Ребрами диаграммы Вороного будут прямые, являющиеся серединными перпендикулярами отрезков, соединяющих соседние числа на оси (OX) в отсортированном множестве чисел {x1 ,…, xN }. За линейное время мы можем найти минимальное xi. Для сортировки множества чисел каждое следующее xj находится по предыдущему xi очевидным образом: ищется многоугольник Вороного Pj (=полоса), смежный  к многоугольнику Pi. Мы можем это сделать за постоянное время, поскольку у каждого многоугольника есть всего два ребра, а для каждого ребра мы знаем номера двух многоугольников, для которых данное ребро является общим.

Т.о. мы показали, что задача сортировки за линейное время сводится к задаче построения диаграммы Вороного.

¢

Везде далее мы будем предполагать, что наши рассматриваемые точки {A1 ,…, AN } имеют общее положение, имея под этим в виду, что никакие четыре точки из рассматриваемого множества не лежат на одной окружности. Данное предположение избавляет нас от рассмотрения большого количества частных случаев (несомненно, в реальных алгоритмах эти случаи рассматривать приходится).

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

Теорема 8. Каждое ребро e многоугольника Вороного Pi  лежит на серединном перпендикуляре к отрезку, соединяющему Ai и центр второго многоугольника Вороного, для которого e также является ребром.

Из построения многоугольников Вороного сразу вытекает, что каждое ребро e многоугольника Вороного Pi  лежит на серединном перпендикуляре к отрезку, соединяющему Ai и некоторую другую точку Aj из множества {A1 ,…, AN }. Рассмотрим Ak центр второго многоугольника Вороного, для которого e также является ребром. Опять же по построению, ребро e лежит на серединном перпендикуляре к отрезку, соединяющему Ak и некоторую другую точку Al (см. Рис.2).

Рис 2. e – серединный перпендикуляр к отрезкам [Ai, Aj] и [Ak, Al]

 

Если предположить, что Aj не совпадает с Ak, то мы сразу получаем что все четыре точки Ai, Aj, Ak, Al лежат на одной окружности, что противоречит общему расположению точек. Стоит отметить, что использование в доказательстве требования общего положения точек не честно, т.к. все можно доказать без него.

¢

 

Теорема 9. В каждую вершину многоугольника Вороного приходит ровно три ребра.

По теореме 8 получаем, что каждый отрезок диаграммы Вороного лежит на серединном перпендикуляре к отрезку, соединяющему центры многоугольников Вороного, для которых данный отрезок является ребром. Отсюда сразу вытекает, что центры данных многоугольников равноудалены от точки пересечения ребер X. Т.о. если в точку X сходится более трех ребер, то сразу получаем противоречие с общим положением точек. Если же ребер только два, то сразу получаем, что это ребра соответствуют одним и тем же двум многоугольникам Вороного, но тогда эти ребра должны лежать на одной прямой. Это утверждение завершает доказательство.

¢

 

Теорема 10. Каждая вершина многоугольника Вороного является центром окружности, проходящей через три точки исходного множества {A1 ,…, AN }, при этом ни одна из точек множества {A1 ,…, AN } не лежит внутри данной окружности.

То, что каждая вершина X многоугольника Вороного является центром окружности, проходящей через три точки исходного множества, следует из  теоремы 9 и ее доказательства. Допустим, внутрь данной окружности попала некоторая точка из {A1 ,…, AN }. Это не центр многоугольников Вороного Ai1 , Ai2 , Ai3 ,, для которых ребра, сходящиеся в X, являются ребрами (центры этих многоугольников лежат НА окружности). Но если это некоторая другая точка Aj, то получается, что она ближе к X, чем центры Ai1 , Ai2 , Ai3. Но это противоречит тому, что точка X ближе к центрам Ai1 , Ai2 , Ai3, чем к остальным точкам.

¢

 

Теорема 11. Многоугольники Вороного с центрами, лежащими на выпуклой оболочке исходного множества точек, бесконечны. Других бесконечных многоугольников Вороного нет.

Пусть точка X является вершиной многоугольника выпуклой оболочки. Проведем через нее прямую l  такую, что вся выпуклая оболочка лежит по одну сторону прямой. Построим луч r, выходящий из X, перпендикулярный l, лежащий в другой полуплоскости, относительно l, чем точки исходного множества (см. Рис. 3).  Не представляет труда доказать, что для всех точек этого луча R точка X находится ближе, чем все остальные точки из {A1 ,…, AN }.

Рис 3. X является ближайшей точкой к R среди точек {A1,…,A5}

 

Отсюда вытекает, что весь луч принадлежит многоугольнику Вороного точки X, следовательно, этот многоугольник бесконечный.

Пусть точка X находится внутри выпуклой оболочки точек {A1 ,…, AN }. Рассмотрим последовательность вершин выпуклой оболочки исходного множества точек {B1 ,…, Bk } и последовательность лучей {(X,B1) ,…, (X,Bk) }. Углы между соседними лучами в этой последовательности <180. Рассмотрим многоугольник  T = пересечению полуплоскостей, образованных серединными перпендикулярами к отрезкам {[X,B1] ,…, [X,Bk] }, содержащими точку X. Многоугольник Вороного точки X принадлежит T, но T является конечным многоугольником, т.к. все его углы между всеми его ребрами <180 (легко показать, что угол между соседними ребрами многоугольника T = 180-угол между соответствующими лучами [X,Bk] и  [X,Bk+1]). Следовательно, многоугольник Вороного точки X  тоже конечный.

¢

 

Определение. Триангуляцией по заданному набору точек {A1 ,…, AN } называется разбиение выпуклой оболочки множества точек {A1 ,…, AN } на непересекающиеся по внутренности треугольники таким образом, чтобы множество вершин треугольников совпадало бы с множеством точек {A1 ,…, AN }.

 

Теорема 12. Рассмотрим множество треугольников, образованных тройками точек из {A1 ,…, AN }, являющимися центрами многоугольников Вороного, имеющими одну общую вершину. Данное множество треугольников дает триангуляцию выпуклой оболочки множества точек {A1 ,…, AN } (Делоне 1934).

Рис 4. Многоугольники {P1,…,P5} диаграммы Вороного точек {A1,…,A5} и треугольники {T1,T2,T3,T4} , соответствующие вершинам многоугольников Вороного {v1,v2,v3,v4}

 

Для доказательства теоремы нам надо доказать следующие утверждения: 0)треугольники Ti не вырождены (т.е. точки треугольника не лежат на одной прямой); 1)треугольники Ti не пересекаются по внутренности; 2)для любой точки X, принадлежащей выпуклой оболочке точек {A1,…,A5}, существует треугольник Ti : XÎTi . Докажем данные утверждения.

0)Если вершины A, B, C некоторого треугольника Ti лежат на одной прямой, то серединные перпендикуляры к ним параллельны, что противоречит наличию точки их пересечения vi.

1)Докажем, что два любых треугольника Ti,Tj  не пересекаются по внутренности. Рассмотрим окружности, описанные вокруг этих треугольников, Oi,Oj с центрами в vi,vj. Эти окружности не могут быть одна внутри другой, т.к. это сразу противоречило бы теореме 10. Тогда, если окружности не пересекаются, или пересекаются по одной точке, то треугольники Ti,Tj  не пересекаются по внутренности. Осталось рассмотреть случай, когда эти окружности пересекаются по двум точкам Q1, Q2.

Рис 5. Две вершины диаграммы Вороного vi,vj  с окружностями Oi,Oj, описанными вокруг вершин соответствующих вершинам vi,vj  треугольников Ti,Tj.

 

Покажем, что треугольник Tj ( =D(Ak,Al,Am) ), соответствующий вершине диаграммы Вороного vj, может лежать только по одну сторону от прямой (Q1,Q2). Из этого и аналогичного факта для треугольника Ti сразу вытекает, что треугольники Ti, Tj лежат по разные стороны от (Q1,Q2) и, следовательно, они не имеют общих внутренних точек. Пусть окружность Oj  состоит из двух дуг D1,D2, разделенных точками  Q1,Q2  (см. Рис. 5). Вершины треугольника D(Ak,Al,Am) не могут лежать на открытой дуге D2,  т.к. это противоречило бы теореме 10. Но тогда Ak,Al,Am  лежат по одну сторону от прямой (Q1,Q2) и, следовательно, весь треугольник D(Ak,Al,Am)  лежит по одну сторону от прямой (Q1,Q2).

2)Пусть точка x принадлежит внутренности выпуклой оболочки множества точек {A1, ,A2 } и не принадлежит ни одному треугольнику Ti.

Рис 6. Пусть точка x принадлежит внутренности выпуклой оболочки множества точек {A1,…,A5} и не принадлежит ни одному треугольнику Ti.

 

Тогда и некоторая окрестность O(x) точки x  принадлежит выпуклой оболочке множества точек {A1,A2,A3…} и не пересекается ни с одним треугольником Ti. Рассмотрим произвольный треугольник из множества {T1,T2,T3…}. Например (см. Рис. 6) это – T3. Выберем в нем произвольную точку q. Выберем в O(x) такую точку y, что ни одна из точек {A1,A2,A3…} не лежит на прямой (q,y).

q принадлежит T3, y не принадлежит ни одному треугольнику T1,T2,T3 . Тогда на [q,y] найдется последняя точка t, принадлежащая одному из T1,T2,T3. Пусть этот последний треугольник называется T2 , а точка tÎ[A2,A4]. Исходя из предположения, получаем, что интервал (t,y) не пересекается с множеством треугольников {T1,T2,T3…}. [A2,A4] не лежит на границе выпуклой оболочки множества точек {A1,…,A5}, т.к. по обе его стороны есть точки из выпуклой оболочки (например, y и A3). Но тогда ребро диаграммы Вороного, выходящее из v2, перпендикулярное [A2,A4] должно быть конечным (по теореме 11). Пусть оно завершается в точке v1. Но тогда треугольник T1 опирается на отрезок [A2,A4] и начало отрезка [t,y] обязано принадлежать T1. А это противоречит тому, что интервал (t,y) не пересекается с множеством треугольников {T1,T2,T3…}.

¢

 

 

               Классическое построение диаграммы Вороного осуществляется методом деления пополам. Основная идея алгоритма сводится к тому, что множество точек {A1,A2,A3…}, по которому строится диаграмма Вороного, разбивается на две [почти] равные части с помощью разбиения точек по оси абсцисс. Для каждой части запускается тот же алгоритм построения диаграммы Вороного, а потом предъявляется алгоритм объединения этих двух диаграмм Вороного в диаграмму всего множества точек за линейное время. Мы не будем описывать подробности  данного алгоритма, но если поверить, что указанные действия можно осуществить, то мы сразу получаем теорему о верхней оценке времени решения задачи построения диаграммы Вороного.

 

               Теорема 13. В рамках алгоритма, основанных на сравнениях,  диаграмму Вороного множества точек {A1 ,…, AN } можно построить за время O(N log N), что является верхней оценкой времени решения данной задачи в рамках алгоритмов, основанных на сравнениях.

 

               Определение. Триангуляцией Делоне множества точек {A1 ,…, AN } называется такая триангуляция множества точек {A1 ,…, AN }, что для любого треугольника триангуляции T описанная вокруг него окружность не содержит внутри никаких точек из множества {A1 ,…, AN }.

 

               Теорема 14. Для любого множества точек {A1 ,…, AN } триангуляцией Делоне существует. Для случая общего расположения точек {A1 ,…, AN } триангуляцией Делоне единственна.

              

               Существование триангуляции Делоне мы доказали (на самом деле, существование мы доказали для общего расположения точек, но существование есть и в общем случае). Единственность триангуляции Делоне следует из взаимно-однозначного соответствия между триангуляцией Делоне и диаграммой Вороного. Мы доказали это соответствие только в одну сторону. В обратную сторону доказательство проводиться не будет. Но единственность триангуляции Делоне можно доказать с помощью другого подхода.

 

               Лемма 1. Рассмотрим произвольную окружность (x-a)2+(y-b)2=r2 на плоскости XY. Вертикальная проекция данной окружности на стандартный параболоид z=x2+y2 лежит в одной плоскости. Все точки внутри окружности проецируются в точки, лежащие ниже данной плоскости, а точки снаружи окружности – в точки выше данной плоскости.

               Распишем уравнение окружности: x2+y2-2ax-2by=r2-a2-b2. При проектировании этой окружности на параболоид x2+y2 можно заменить на z. После чего мы получим уравнение точек, лежащих в одной плоскости: -2ax-2by+z=r2-a2-b2.  

               Если некоторая (x1,y1) точка лежит внутри данной окружности, то для нее выполняется соотношение (x-a)2+(y-b)2=p2, где p<r. Но тогда проекция данной точки на параболоид удовлетворяет соотношению  x12+y12-2ax1-2by1=p2-a2-b2 , и следовательно  2ax1-2by1+z1=p2-a2-b2. Откуда сразу получаем z1<z, где z удовлетворяет соотношению 2ax1-2by1+z=r2-a2-b2. Т.е. проекция точки, лежащей внутри окружности, находится ниже плоскости, в которой лежит окружность. Доказательство для точек вне окружности аналогично. Ч.Т.Д.

 

               Рассмотрим триангуляцию Делоне нашего множество точек на плоскости {A1,A2,A3…} и вертикальную проекцию вершин этой триангуляции на стандартный параболоид z=x2+y2. Вершины триангуляции лежат на параболоиде. Ребра триангуляции лежат сверху параболоида. Окружность, описанная вокруг любого треугольника T данной триангуляции, не содержит внутри других точек из множества  {A1,A2,A3…}. Отсюда из леммы 1 сразу следует, что все проекции всех остальных точек  {A1,A2,A3…} на  параболоид лежат с верхней стороны от плоскости, проходящей через проекцию вершин T на параболоид. Но тогда получается, что объединение треугольников, вершины которых являются проекциями вершин треугольников триангуляции Делоне, дает нижнюю половину выпуклой оболочки проекций {A1,A2,A3…} на параболоид. А поскольку выпуклая оболочка единственна, то мы сразу получаем единственность триангуляции Делоне.

¢

 

 

               Можно много говорить о значимости триангуляции Делоне и диаграммы Вороного. Например, диаграмма Вороного дает наиболее разумный способ определения кусочно-постоянной интерполяции функции для отображения R2R. Другой хороший пример: если использовать утверждение о том, что для триангуляции количество ребер равно O(n), где n количество вершин триангуляции (это утверждение мы будем доказывать, когда будем рассматривать алгоритмы на графах), то за линейное время легко свести задачу поиска всех ближайших соседей в множестве точек {A1 ,…, AN } к задаче построения диаграммы Вороного множества точек {A1 ,…, AN }. Триангуляция Делоне дает хорошую формализацию понятия соседних вершин в множестве точек {A1 ,…, AN }. И т.д.