<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Katyatitkova</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Katyatitkova"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Katyatitkova"/>
		<updated>2026-08-03T23:11:51Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46493</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46493"/>
				<updated>2015-05-14T18:23:30Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо для каждого сайта пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала найдём сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;, перебором. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое полуребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее полуребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое полуребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для полуребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее полуребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС полуребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все полурёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем полуребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма k-го порядка ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;'''-го порядка''' (&amp;lt;tex&amp;gt;\mathcal{V}_k(p_1, p_2, ..., p_k)&amp;lt;/tex&amp;gt;) — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей множество сайтов &amp;lt;tex&amp;gt;p_1, p_2, ..., p_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, возьмём диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка. Каждая ячейка построена для некоторого набора &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; сайтов. Обозначим множество этих сайтов за &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. [[Пересечение выпуклых многоугольников|Пересечём]] каждую из этих ячеек с ячейками диаграммы первого порядка, построенной на множестве сайтов &amp;lt;tex&amp;gt;P \setminus S&amp;lt;/tex&amp;gt;. Когда мы пересекаем ячейку &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt;-го порядка для точек &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; с ячейкой первого порядка для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, получаем ячейку для множества &amp;lt;tex&amp;gt;S \cup \{p_i\}&amp;lt;/tex&amp;gt;. После пересечения ячеек необходимо объединить те, которые отвечают за одинаковый набор сайтов (это могут быть только соседние по ребру ячейки).&lt;br /&gt;
&lt;br /&gt;
Итого совершаем &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; шагов, на каждом строим &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; диграмм Вороного за время &amp;lt;tex&amp;gt;O(n^3)&amp;lt;/tex&amp;gt;, пересекаем &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; ячеек с &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; ячейками за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; времени, а потом объединяем ячейки за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; (линейное количество соседних рёбер ячейки, а объединение происходит за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; за счёт структуры РСДС). Итого &amp;lt;tex&amp;gt;O(k \cdot n^3)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка (она же farthest-point диаграмма) для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является '''farthest-point диаграммой''', т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-inside.png|200px|right]]Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём луч &amp;lt;tex&amp;gt;q p_i&amp;lt;/tex&amp;gt;. Он пересечёт ребро выпуклой оболочки &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt;. Получатся два смежных угла, рассмотрим тот, который оказался прямым или тупым. Тогда в полученном треугольнике &amp;lt;tex&amp;gt;\rho(q, p_j) &amp;gt; \rho(q, p_i)&amp;lt;/tex&amp;gt;, так как напротив большего угла лежит большая сторона. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Трапецоидная карта]]&lt;br /&gt;
* [[Триангуляция Делоне]]&lt;br /&gt;
* [[Straight skeleton]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Algorithms for constructing Voronoi diagrams, Vera Sacrist´an {{---}} Incremental algorithm]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Computational Geometry {{---}} Lecture 13: More on Voronoi diagrams]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;br /&gt;
[[Категория: Триангуляция Делоне и диаграмма Вороного]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46488</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46488"/>
				<updated>2015-05-14T18:16:20Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Свойства */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо для каждого сайта пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала найдём сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;, перебором. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое полуребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее полуребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое полуребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для полуребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее полуребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС полуребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все полурёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем полуребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;'''-го порядка''' (&amp;lt;tex&amp;gt;\mathcal{V}_k(p_1, p_2, ..., p_k)&amp;lt;/tex&amp;gt;) — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей множество сайтов &amp;lt;tex&amp;gt;p_1, p_2, ..., p_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, возьмём диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка. Каждая ячейка построена для каких-то &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; сайтов, обозначим их множество за &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. [[Пересечение выпуклых многоугольников|Пересечём]] каждую из этих ячеек с ячейками диаграммы первого порядка для всех сайтов без &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Когда мы пересекаем ячейку &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt;-го порядка для точек &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; с ячейкой первого порядка для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, получаем ячейку для множества &amp;lt;tex&amp;gt;S \cup \{p_i\}&amp;lt;/tex&amp;gt;. После пересечения ячеек необходимо объединить те, которые отвечают за одинаковый набор сайтов (это могут быть только соседние по ребру ячейки).&lt;br /&gt;
&lt;br /&gt;
Итого совершаем &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; шагов, на каждом пересекаем &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; ячеек с &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; ячейками за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, а потом объединяем ячейки за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; (линейное количество соседних рёбер ячейки, а объединение за счёт структуры РСДС происходит за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;). Итого &amp;lt;tex&amp;gt;O(k \cdot n^3)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка (она же farthest-point диаграмма) для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является '''farthest-point диаграммой''', т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-inside.png|200px|right]]Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём луч &amp;lt;tex&amp;gt;q p_i&amp;lt;/tex&amp;gt;. Он пересечёт ребро выпуклой оболочки &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt;. Получатся два смежных угла, рассмотрим тот, который оказался прямым или тупым. Тогда в полученном треугольнике &amp;lt;tex&amp;gt;\rho(q, p_j) &amp;gt; \rho(q, p_i)&amp;lt;/tex&amp;gt;, так как напротив большего угла лежит большая сторона. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Трапецоидная карта]]&lt;br /&gt;
* [[Триангуляция Делоне]]&lt;br /&gt;
* [[Straight skeleton]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Algorithms for constructing Voronoi diagrams, Vera Sacrist´an {{---}} Incremental algorithm]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Computational Geometry {{---}} Lecture 13: More on Voronoi diagrams]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;br /&gt;
[[Категория: Триангуляция Делоне и диаграмма Вороного]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46486</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46486"/>
				<updated>2015-05-14T18:11:04Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Диаграмма k-го порядка */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо для каждого сайта пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала найдём сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;, перебором. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое полуребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее полуребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое полуребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для полуребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее полуребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС полуребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все полурёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем полуребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;'''-го порядка''' (&amp;lt;tex&amp;gt;\mathcal{V}_k(p_1, p_2, ..., p_k)&amp;lt;/tex&amp;gt;) — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей множество сайтов &amp;lt;tex&amp;gt;p_1, p_2, ..., p_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, возьмём диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка. Каждая ячейка построена для каких-то &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; сайтов, обозначим их множество за &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. [[Пересечение выпуклых многоугольников|Пересечём]] каждую из этих ячеек с ячейками диаграммы первого порядка для всех сайтов без &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Когда мы пересекаем ячейку &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt;-го порядка для точек &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; с ячейкой первого порядка для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, получаем ячейку для множества &amp;lt;tex&amp;gt;S \cup \{p_i\}&amp;lt;/tex&amp;gt;. После пересечения ячеек необходимо объединить те, которые отвечают за одинаковый набор сайтов (это могут быть только соседние по ребру ячейки).&lt;br /&gt;
&lt;br /&gt;
Итого совершаем &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; шагов, на каждом пересекаем &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; ячеек с &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; ячейками за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, а потом объединяем ячейки за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; (линейное количество соседних рёбер ячейки, а объединение за счёт структуры РСДС происходит за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;). Итого &amp;lt;tex&amp;gt;O(k \cdot n^3)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка (она же farthest-point диаграмма) для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является '''farthest-point диаграммой''', т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Трапецоидная карта]]&lt;br /&gt;
* [[Триангуляция Делоне]]&lt;br /&gt;
* [[Straight skeleton]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Algorithms for constructing Voronoi diagrams, Vera Sacrist´an {{---}} Incremental algorithm]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Computational Geometry {{---}} Lecture 13: More on Voronoi diagrams]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;br /&gt;
[[Категория: Триангуляция Делоне и диаграмма Вороного]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Voronoi-farthest-inside.png&amp;diff=46480</id>
		<title>Файл:Voronoi-farthest-inside.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Voronoi-farthest-inside.png&amp;diff=46480"/>
				<updated>2015-05-14T18:05:25Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46479</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46479"/>
				<updated>2015-05-14T17:44:17Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Farthest-point диаграмма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо для каждого сайта пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала найдём сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;, перебором. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое полуребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее полуребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое полуребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для полуребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее полуребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС полуребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все полурёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем полуребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;'''-го порядка''' (&amp;lt;tex&amp;gt;\mathcal{V}_k(p_1, p_2, ..., p_k)&amp;lt;/tex&amp;gt;) — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей множество сайтов &amp;lt;tex&amp;gt;p_1, p_2, ..., p_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, возьмём диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка. Каждая ячейка построена для каких-то &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; сайтов, обозначим их множество за &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Пересечём каждую из этих ячеек с ячейками диаграммы первого порядка для всех сайтов без &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Когда мы пересекаем ячейку с ячейкой первого порядка для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, получаем ячейку для множества &amp;lt;tex&amp;gt;S \cup \{p_i\}&amp;lt;/tex&amp;gt;. После пересечения ячеек необходимо объединить те, которые отвечают за одинаковый набор сайтов.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка (она же farthest-point диаграмма) для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является '''farthest-point диаграммой''', т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Трапецоидная карта]]&lt;br /&gt;
* [[Триангуляция Делоне]]&lt;br /&gt;
* [[Straight skeleton]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Algorithms for constructing Voronoi diagrams, Vera Sacrist´an {{---}} Incremental algorithm]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Computational Geometry {{---}} Lecture 13: More on Voronoi diagrams]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;br /&gt;
[[Категория: Триангуляция Делоне и диаграмма Вороного]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46478</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46478"/>
				<updated>2015-05-14T17:43:12Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Диаграмма k-го порядка */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо для каждого сайта пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала найдём сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;, перебором. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое полуребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее полуребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое полуребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для полуребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее полуребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС полуребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все полурёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем полуребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;'''-го порядка''' (&amp;lt;tex&amp;gt;\mathcal{V}_k(p_1, p_2, ..., p_k)&amp;lt;/tex&amp;gt;) — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей множество сайтов &amp;lt;tex&amp;gt;p_1, p_2, ..., p_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, возьмём диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка. Каждая ячейка построена для каких-то &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; сайтов, обозначим их множество за &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Пересечём каждую из этих ячеек с ячейками диаграммы первого порядка для всех сайтов без &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Когда мы пересекаем ячейку с ячейкой первого порядка для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, получаем ячейку для множества &amp;lt;tex&amp;gt;S \cup \{p_i\}&amp;lt;/tex&amp;gt;. После пересечения ячеек необходимо объединить те, которые отвечают за одинаковый набор сайтов.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка (она же farthest-point диаграмма) для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является '''farthest-point диаграммой''', т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Трапецоидная карта]]&lt;br /&gt;
* [[Триангуляция Делоне]]&lt;br /&gt;
* [[Straight skeleton]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Algorithms for constructing Voronoi diagrams, Vera Sacrist´an {{---}} Incremental algorithm]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Computational Geometry {{---}} Lecture 13: More on Voronoi diagrams]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;br /&gt;
[[Категория: Триангуляция Делоне и диаграмма Вороного]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46476</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46476"/>
				<updated>2015-05-14T16:41:50Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Инкрементальный алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо для каждого сайта пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала найдём сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;, перебором. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое полуребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее полуребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое полуребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для полуребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее полуребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС полуребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все полурёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем полуребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка (&amp;lt;tex&amp;gt;\mathcal{V}_k(p_1, p_2, ..., p_k)&amp;lt;/tex&amp;gt;) — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей множество сайтов &amp;lt;tex&amp;gt;p_1, p_2, ..., p_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка (она же farthest-point диаграмма) для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является '''farthest-point диаграммой''', т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Трапецоидная карта]]&lt;br /&gt;
* [[Триангуляция Делоне]]&lt;br /&gt;
* [[Straight skeleton]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Algorithms for constructing Voronoi diagrams, Vera Sacrist´an {{---}} Incremental algorithm]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Computational Geometry {{---}} Lecture 13: More on Voronoi diagrams]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;br /&gt;
[[Категория: Триангуляция Делоне и диаграмма Вороного]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46474</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46474"/>
				<updated>2015-05-14T16:37:31Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Свойства */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо для каждого сайта пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое полуребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее полуребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое полуребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для полуребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее полуребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС полуребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все полурёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем полуребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка (&amp;lt;tex&amp;gt;\mathcal{V}_k(p_1, p_2, ..., p_k)&amp;lt;/tex&amp;gt;) — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей множество сайтов &amp;lt;tex&amp;gt;p_1, p_2, ..., p_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка (она же farthest-point диаграмма) для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является '''farthest-point диаграммой''', т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Трапецоидная карта]]&lt;br /&gt;
* [[Триангуляция Делоне]]&lt;br /&gt;
* [[Straight skeleton]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Algorithms for constructing Voronoi diagrams, Vera Sacrist´an {{---}} Incremental algorithm]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Computational Geometry {{---}} Lecture 13: More on Voronoi diagrams]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;br /&gt;
[[Категория: Триангуляция Делоне и диаграмма Вороного]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46473</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46473"/>
				<updated>2015-05-14T16:33:46Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Диаграмма k-го порядка */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо для каждого сайта пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое полуребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее полуребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое полуребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для полуребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее полуребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС полуребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все полурёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем полуребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка (&amp;lt;tex&amp;gt;\mathcal{V}_k(p_1, p_2, ..., p_k)&amp;lt;/tex&amp;gt;) — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей множество сайтов &amp;lt;tex&amp;gt;p_1, p_2, ..., p_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка (она же farthest-point диаграмма) для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является '''farthest-point диаграммой''', т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки farthest-point диаграммы выпуклы.&lt;br /&gt;
|proof=По построению ячейка — пересечение полуплоскостей, значит, она выпукла.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Трапецоидная карта]]&lt;br /&gt;
* [[Триангуляция Делоне]]&lt;br /&gt;
* [[Straight skeleton]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Algorithms for constructing Voronoi diagrams, Vera Sacrist´an {{---}} Incremental algorithm]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Computational Geometry {{---}} Lecture 13: More on Voronoi diagrams]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;br /&gt;
[[Категория: Триангуляция Делоне и диаграмма Вороного]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46472</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46472"/>
				<updated>2015-05-14T16:31:39Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Диаграмма k-го порядка */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо для каждого сайта пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое полуребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее полуребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое полуребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для полуребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее полуребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС полуребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все полурёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем полуребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка (&amp;lt;tex&amp;gt;\mathcal{V}_k(p_1, p_2, ..., p_k)&amp;lt;/tex&amp;gt;) — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей множество сайтов &amp;lt;tex&amp;gt;p_1, p_2, ..., p_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является '''farthest-point диаграммой''', т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки farthest-point диаграммы выпуклы.&lt;br /&gt;
|proof=По построению ячейка — пересечение полуплоскостей, значит, она выпукла.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Трапецоидная карта]]&lt;br /&gt;
* [[Триангуляция Делоне]]&lt;br /&gt;
* [[Straight skeleton]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Algorithms for constructing Voronoi diagrams, Vera Sacrist´an {{---}} Incremental algorithm]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Computational Geometry {{---}} Lecture 13: More on Voronoi diagrams]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;br /&gt;
[[Категория: Триангуляция Делоне и диаграмма Вороного]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46471</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46471"/>
				<updated>2015-05-14T16:29:41Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Наивный алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо для каждого сайта пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое полуребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее полуребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое полуребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для полуребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее полуребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС полуребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все полурёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем полуребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка (&amp;lt;tex&amp;gt;\mathcal{V}_k(p_1, p_2, ..., p_k)&amp;lt;/tex&amp;gt;) — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей множество сайтов p_1, p_2, ..., p_k.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является '''farthest-point диаграммой''', т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки farthest-point диаграммы выпуклы.&lt;br /&gt;
|proof=По построению ячейка — пересечение полуплоскостей, значит, она выпукла.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Трапецоидная карта]]&lt;br /&gt;
* [[Триангуляция Делоне]]&lt;br /&gt;
* [[Straight skeleton]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Algorithms for constructing Voronoi diagrams, Vera Sacrist´an {{---}} Incremental algorithm]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Computational Geometry {{---}} Lecture 13: More on Voronoi diagrams]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;br /&gt;
[[Категория: Триангуляция Делоне и диаграмма Вороного]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46470</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46470"/>
				<updated>2015-05-14T16:28:43Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Farthest-point диаграмма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое полуребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее полуребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое полуребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для полуребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее полуребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС полуребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все полурёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем полуребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка (&amp;lt;tex&amp;gt;\mathcal{V}_k(p_1, p_2, ..., p_k)&amp;lt;/tex&amp;gt;) — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей множество сайтов p_1, p_2, ..., p_k.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является '''farthest-point диаграммой''', т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки farthest-point диаграммы выпуклы.&lt;br /&gt;
|proof=По построению ячейка — пересечение полуплоскостей, значит, она выпукла.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Трапецоидная карта]]&lt;br /&gt;
* [[Триангуляция Делоне]]&lt;br /&gt;
* [[Straight skeleton]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Algorithms for constructing Voronoi diagrams, Vera Sacrist´an {{---}} Incremental algorithm]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Computational Geometry {{---}} Lecture 13: More on Voronoi diagrams]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;br /&gt;
[[Категория: Триангуляция Делоне и диаграмма Вороного]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46469</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46469"/>
				<updated>2015-05-14T16:28:10Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Диаграмма k-го порядка */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое полуребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее полуребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое полуребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для полуребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее полуребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС полуребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все полурёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем полуребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка (&amp;lt;tex&amp;gt;\mathcal{V}_k(p_1, p_2, ..., p_k)&amp;lt;/tex&amp;gt;) — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей множество сайтов p_1, p_2, ..., p_k.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки farthest-point диаграммы выпуклы.&lt;br /&gt;
|proof=По построению ячейка — пересечение полуплоскостей, значит, она выпукла.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Трапецоидная карта]]&lt;br /&gt;
* [[Триангуляция Делоне]]&lt;br /&gt;
* [[Straight skeleton]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Algorithms for constructing Voronoi diagrams, Vera Sacrist´an {{---}} Incremental algorithm]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Computational Geometry {{---}} Lecture 13: More on Voronoi diagrams]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;br /&gt;
[[Категория: Триангуляция Делоне и диаграмма Вороного]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46468</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46468"/>
				<updated>2015-05-14T16:06:34Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое полуребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее полуребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое полуребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для полуребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее полуребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС полуребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все полурёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем полуребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки farthest-point диаграммы выпуклы.&lt;br /&gt;
|proof=По построению ячейка — пересечение полуплоскостей, значит, она выпукла.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Трапецоидная карта]]&lt;br /&gt;
* [[Триангуляция Делоне]]&lt;br /&gt;
* [[Straight skeleton]]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Algorithms for constructing Voronoi diagrams, Vera Sacrist´an {{---}} Incremental algorithm]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Computational Geometry {{---}} Lecture 13: More on Voronoi diagrams]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;br /&gt;
[[Категория: Триангуляция Делоне и диаграмма Вороного]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46467</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46467"/>
				<updated>2015-05-14T16:00:43Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Инкрементальный алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое полуребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее полуребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое полуребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для полуребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее полуребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС полуребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все полурёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем полуребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки farthest-point диаграммы выпуклы.&lt;br /&gt;
|proof=По построению ячейка — пересечение полуплоскостей, значит, она выпукла.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Algorithms for constructing Voronoi diagrams, Vera Sacrist´an {{---}} Incremental algorithm]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Computational Geometry {{---}} Lecture 13: More on Voronoi diagrams]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46465</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46465"/>
				<updated>2015-05-14T15:59:09Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Инкрементальный алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое полуребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее полуребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое полуребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для полуребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее полуребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС полуребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим полуребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем полуребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки farthest-point диаграммы выпуклы.&lt;br /&gt;
|proof=По построению ячейка — пересечение полуплоскостей, значит, она выпукла.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Algorithms for constructing Voronoi diagrams, Vera Sacrist´an {{---}} Incremental algorithm]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46463</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46463"/>
				<updated>2015-05-14T14:30:16Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Неформальное определение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой Вороного точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки farthest-point диаграммы выпуклы.&lt;br /&gt;
|proof=По построению ячейка — пересечение полуплоскостей, значит, она выпукла.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Katyatitkova&amp;diff=46460</id>
		<title>Участница:Katyatitkova</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Katyatitkova&amp;diff=46460"/>
				<updated>2015-05-14T12:12:03Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Екатерина Титкова, 4538, year2011&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Katyatitkova&amp;diff=46459</id>
		<title>Участница:Katyatitkova</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Katyatitkova&amp;diff=46459"/>
				<updated>2015-05-14T12:11:43Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: ой&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Екатерина Титкова, 4538&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46458</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46458"/>
				<updated>2015-05-14T12:08:27Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки farthest-point диаграммы выпуклы.&lt;br /&gt;
|proof=По построению ячейка — пересечение полуплоскостей, значит, она выпукла.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого строим farthest-point диаграмму для первых трёх точек (пересекая полуплоскости) и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46457</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46457"/>
				<updated>2015-05-14T12:06:11Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Farthest-point диаграмма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки farthest-point диаграммы выпуклы.&lt;br /&gt;
|proof=По построению ячейка — пересечение полуплоскостей, значит, она выпукла.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм ===&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46456</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46456"/>
				<updated>2015-05-14T12:05:28Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Свойства */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки farthest-point диаграммы выпуклы.&lt;br /&gt;
|proof=По построению ячейка — пересечение полуплоскостей, значит, она выпукла.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
|proof=[[Файл:voronoi-farthest-unbounded.png|200px|right]]Пусть &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; — сайт на выпуклой оболочке сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — точка, для которой он является наиболее удалённым. Тогда для всех точек на луче, лежащем на &amp;lt;tex&amp;gt;p_i q&amp;lt;/tex&amp;gt;, начинающемся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не проходящим через &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будет наиболее удалённым среди остальных сайтов. Значит, ячейка сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; в farthest-point диаграмме включает в себя этот луч, а значит, неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Voronoi-farthest-unbounded.png&amp;diff=46455</id>
		<title>Файл:Voronoi-farthest-unbounded.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Voronoi-farthest-unbounded.png&amp;diff=46455"/>
				<updated>2015-05-14T12:01:03Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46454</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46454"/>
				<updated>2015-05-14T11:58:09Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Farthest-point диаграмма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки farthest-point диаграммы выпуклы.&lt;br /&gt;
|proof=По построению ячейка — пересечение полуплоскостей, значит, она выпукла.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Пусть это не так и сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; лежит внутри выпуклой оболочки и имеет ячейку в farthest-point диаграмме. Тогда внутри неё есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Но по предыдущей лемме самый удалённый для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт лежит на выпуклой оболочке, а значит, сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не может быть самым удалённым для &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=Непосредственно следует из двух предыдущих лемм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46453</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46453"/>
				<updated>2015-05-14T11:53:50Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Farthest-point диаграмма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Построение ===&lt;br /&gt;
Для построения ячейки farthest-point диаграммы для &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; будем пересекать полуплоскости, не содержащие &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;, образованные серединными перпендикулярами между &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и остальными сайтами (то есть аналогично обычной диаграмме Вороного, но для пересечения берутся противоположные полуплоскости).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки farthest-point диаграммы выпуклы.&lt;br /&gt;
|proof=По построению ячейка — пересечение полуплоскостей, значит, она выпукла.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Для любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; плоскости самый удалённый от неё сайт из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; должен лежать на [[Статические выпуклые оболочки: Джарвис, Грэхем, Эндрю, Чен, QuickHull|выпуклой оболочке]] &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Сайт, не находящийся на выпуклой оболочке, лежит внутри неё по свойствам выпуклой оболочки.&lt;br /&gt;
&lt;br /&gt;
Пусть самый удалённый от точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; не лежит на выпуклой оболочке (т.е. лежит внутри неё). Проведём окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, проходящую через &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — внутри выпуклой оболочки, эта окружность пересечёт оболочку или полностью лежит внутри неё. Тогда вне окружности должен лежать какой-то сайт &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;gt; \rho(q, p)&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Сайт, который лежит внутри выпуклой оболочки сайтов, не может иметь ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Каждый сайт, который является вершиной выпуклой оболочки сайтов, имеет ячейку в farthest-point диаграмме.&lt;br /&gt;
|proof=Докажем по индукции.&lt;br /&gt;
&lt;br /&gt;
База индукции: для двух сайтов они оба являются вершинами выпуклой оболочки и оба имеют ячейку в farthest-point диаграмме (дальняя от сайта полуплоскость).&lt;br /&gt;
&lt;br /&gt;
Переход: добавим сайт &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; так, что он станет новой вершиной выпуклой оболочки. Пусть он не имеет ячейку в farthest-point диаграмме, то есть уже имеющаяся перед его добавлением диаграмма не меняется. Для построения farthest-point диаграммы проводятся серединные перпендикуляры между всеми парами сайтов, и полученные полуплоскости пересекаются; раз новой ячейки не добавилось, то серединные перпендикуляры между &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и остальными сайтами совпали с уже имеющимися перпендикулярами. Это возможно, только если &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; совпал с другим сайтом. Пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
|proof=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46452</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46452"/>
				<updated>2015-05-14T10:27:11Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Диаграмма k-го порядка */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка и заменить каждую ячейку (она будет для некоторого множества &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов) на диаграмму Вороного на множестве остальных сайтов. Заменив её на диаграмму для остальных сайтов, мы фактически разделяем её на несколько частей. Каждая новая часть будет частью ячейки Вороного для какой-то точки не из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;. Но так как в изначальной ячейке все точки являются ближайшими к сайтам из &amp;lt;tex&amp;gt;P_{k-1}&amp;lt;/tex&amp;gt;, в итоге получается, что в полученных новых ячейках внутри изначальной все точки являются ближайшими к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; точкам.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46446</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46446"/>
				<updated>2015-05-13T20:17:36Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Farthest-point диаграмма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Запомним порядки обхода для каждой вершины выпуклой оболочки по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;) и сделаем случайную перестановку точек. Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46445</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46445"/>
				<updated>2015-05-13T20:13:31Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Инкрементальный алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental-zero-step.png|200px|thumb|Локализация]]&lt;br /&gt;
|[[Файл:voronoi-incremental-first-step.png|200px|thumb|Добавление первого ребра]]&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Добавление третьего ребра]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Voronoi-incremental-first-step.png&amp;diff=46444</id>
		<title>Файл:Voronoi-incremental-first-step.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Voronoi-incremental-first-step.png&amp;diff=46444"/>
				<updated>2015-05-13T20:11:26Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Voronoi-incremental-zero-step.png&amp;diff=46443</id>
		<title>Файл:Voronoi-incremental-zero-step.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Voronoi-incremental-zero-step.png&amp;diff=46443"/>
				<updated>2015-05-13T20:09:57Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46442</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46442"/>
				<updated>2015-05-13T19:54:31Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Связь с триангуляцией Делоне */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Процесс построения диаграммы при добавлении новой точки]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46441</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46441"/>
				<updated>2015-05-13T19:50:07Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Связь с триангуляцией Делоне */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от точек &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграммы.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равноудалена от &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j). Также эта окружность не должна содержать никаких других сайтов на границе, так как тогда она является вершиной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Процесс построения диаграммы при добавлении новой точки]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46440</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46440"/>
				<updated>2015-05-13T19:31:05Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb|Процесс построения диаграммы при добавлении новой точки]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb|Обновление структуры при добавлении ребра]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb|Построение очередной ячейки farthest-point диаграммы]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46439</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46439"/>
				<updated>2015-05-13T19:16:43Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Диаграмма k-го порядка */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|thumb|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|thumb|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|thumb|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point диаграмма для данного набора сайтов]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46438</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46438"/>
				<updated>2015-05-13T19:15:34Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Инкрементальный алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|thumb|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|thumb|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|thumb|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее грани для &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46437</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46437"/>
				<updated>2015-05-13T19:13:41Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|thumb|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|thumb|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|thumb|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Farthest-point диаграмма ==&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46436</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46436"/>
				<updated>2015-05-13T19:10:48Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Связь с триангуляцией Делоне */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|thumb|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|thumb|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Наибольшая пустая окружность''' точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (''largest empty circle of ''&amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;'' with respect to ''&amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|thumb|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46435</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46435"/>
				<updated>2015-05-13T19:03:55Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Топология диаграммы Вороного */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|thumb|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-connected.png|500px]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|thumb|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Наибольшая пустая окружность точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|thumb|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Voronoi-connected.png&amp;diff=46434</id>
		<title>Файл:Voronoi-connected.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Voronoi-connected.png&amp;diff=46434"/>
				<updated>2015-05-13T19:01:37Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: загружена новая версия «Файл:Voronoi-connected.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Voronoi-connected.png&amp;diff=46433</id>
		<title>Файл:Voronoi-connected.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Voronoi-connected.png&amp;diff=46433"/>
				<updated>2015-05-13T18:57:46Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46431</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46431"/>
				<updated>2015-05-13T18:15:58Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Топология диаграммы Вороного */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|thumb|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|thumb|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Наибольшая пустая окружность точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|thumb|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46430</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46430"/>
				<updated>2015-05-13T18:15:01Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Топология диаграммы Вороного */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|thumb|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы. Пусть он пересекает какую-то ячейку в точках &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. От точки &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; до точки &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; по рёбрам можно добраться по рёбрам тогда и только тогда, когда ячейка связна. Раз пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; нет, то какая-то из ячеек, пересекаемых отрезком &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;, несвязная. Это возможно, только если она представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|thumb|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Наибольшая пустая окружность точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|thumb|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46429</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46429"/>
				<updated>2015-05-13T18:02:05Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Формальное определение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и [[Основные определения теории графов|граф]] из вершин и рёбер, составляющих эти ячейки.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|thumb|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы, и, раз пути по рёбрам нет, какая-то из них несвязная. Это возможно, только если какая-то ячейка представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|thumb|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Наибольшая пустая окружность точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|thumb|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46428</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46428"/>
				<updated>2015-05-13T17:59:29Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Связь с пересечением полуплоскостей */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и составляющие эти ячейки вершины и рёбра.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \bigcap\limits_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|thumb|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы, и, раз пути по рёбрам нет, какая-то из них несвязная. Это возможно, только если какая-то ячейка представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|thumb|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Наибольшая пустая окружность точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|thumb|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46427</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46427"/>
				<updated>2015-05-13T17:56:31Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Связь с пересечением полуплоскостей */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и составляющие эти ячейки вершины и рёбра.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что для точки &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \cap_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|thumb|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы, и, раз пути по рёбрам нет, какая-то из них несвязная. Это возможно, только если какая-то ячейка представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|thumb|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Наибольшая пустая окружность точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|thumb|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46390</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46390"/>
				<updated>2015-05-12T07:53:04Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Инкрементальный алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и составляющие эти ячейки вершины и рёбра.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \cap_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|thumb|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы, и, раз пути по рёбрам нет, какая-то из них несвязная. Это возможно, только если какая-то ячейка представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|thumb|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Наибольшая пустая окружность точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|thumb|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём]] сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Обновление РСДС происходит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС второй конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-incremental.png|200px|thumb]]&lt;br /&gt;
|[[Файл:voronoi-update-dcel.png|400px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46389</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46389"/>
				<updated>2015-05-12T07:47:25Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Связь с триангуляцией Делоне */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и составляющие эти ячейки вершины и рёбра.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \cap_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|thumb|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы, и, раз пути по рёбрам нет, какая-то из них несвязная. Это возможно, только если какая-то ячейка представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|thumb|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Наибольшая пустая окружность точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|thumb|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится [[триангуляция Делоне]] для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. Триангуляции Делоне принадлежат [[Триангуляция Делоне#Критерий Делоне для рёбер|те и только те]] рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
[[Файл:voronoi-incremental.png|200px|thumb|right]]Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала найдём сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-update-dcel.png|400px|thumb|right]]В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46388</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46388"/>
				<updated>2015-05-12T07:45:54Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Инкрементальный алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и составляющие эти ячейки вершины и рёбра.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \cap_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|thumb|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы, и, раз пути по рёбрам нет, какая-то из них несвязная. Это возможно, только если какая-то ячейка представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|thumb|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Наибольшая пустая окружность точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|thumb|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится триангуляция Делоне для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. [[Триангуляция Делоне#Критерий Делоне для рёбер|Вспомним]], что триангуляции Делоне принадлежат те и только те рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
[[Файл:voronoi-incremental.png|200px|thumb|right]]Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала найдём сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-update-dcel.png|400px|thumb|right]]В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46387</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46387"/>
				<updated>2015-05-12T07:45:23Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Инкрементальный алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и составляющие эти ячейки вершины и рёбра.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \cap_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|thumb|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы, и, раз пути по рёбрам нет, какая-то из них несвязная. Это возможно, только если какая-то ячейка представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|thumb|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Наибольшая пустая окружность точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|thumb|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится триангуляция Делоне для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. [[Триангуляция Делоне#Критерий Делоне для рёбер|Вспомним]], что триангуляции Делоне принадлежат те и только те рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
[[Файл:voronoi-incremental.png|200px|thumb|right]]Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала найдём сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-update-dcel.png|400px|thumb|left]]В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46386</id>
		<title>Диаграмма Вороного</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D0%BE%D0%B3%D0%BE&amp;diff=46386"/>
				<updated>2015-05-12T07:44:35Z</updated>
		
		<summary type="html">&lt;p&gt;Katyatitkova: /* Наивный алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Определения ==&lt;br /&gt;
=== Совсем неформальное определение ===&lt;br /&gt;
[[Файл:voronoi-diagram.png|200px|thumb|right|Пример диаграммы Вороного]]&lt;br /&gt;
Пусть есть карта города, на которой точками обозначены почтовые отделения. Человек хочет отправить письмо, и он пойдёт на ближайшую почту. Ему интересно знать, какое отделение ближе, для любой точки города — необходимость отправить письмо может наступить неожиданно. Для этого он может взять карту и расчертить её на ячейки так, чтобы внутри каждой ячейки находилось только одно отделение, а для всех остальных точек ячейки именно эта почта была ближайшей. Полученная картинка и будет диаграммой Вороного для точек-почт.&lt;br /&gt;
&lt;br /&gt;
=== Неформальное определение ===&lt;br /&gt;
Есть множество точек &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; на плоскости. Кусочек плоскости из точек &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такой, что для всех &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; ближайшей точкой из множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; является одна и та же точка &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, называется ячейкой точки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Разбиение плоскости на такие ячейки для всех точек &amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется диаграммой Вороного для множества &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Формальное определение ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; — множество точек на плоскости.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;p_i \in P&amp;lt;/tex&amp;gt; называется '''сайтом''' (''site'').&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Ячейка Вороного''' (''Voronoi cell'', &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt;) — множество точек плоскости &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; таких, что для фиксированного сайта &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и любых других сайтов &amp;lt;tex&amp;gt;p_j \in P, \ j \neq i&amp;lt;/tex&amp;gt; верно неравенство &amp;lt;tex&amp;gt;\rho(q, p_i) &amp;lt; \rho(q, p_j)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Диаграмма Вороного''' (''Voronoi diagram'', &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;) для сайтов &amp;lt;tex&amp;gt;P = \{ p_1, p_2, ..., p_n\}&amp;lt;/tex&amp;gt; на плоскости — это разбиение плоскости на ячейки Вороного для каждого сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В зависимости от контекста будем называть диаграммой Вороного как разбиение на ячейки, так и составляющие эти ячейки вершины и рёбра.&lt;br /&gt;
&lt;br /&gt;
== Свойства ==&lt;br /&gt;
=== Связь с пересечением полуплоскостей ===&lt;br /&gt;
Возьмём две точки плоскости: &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Проведём серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;pq&amp;lt;/tex&amp;gt;; полученную полуплоскость, которая содержит в себе &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, обозначим &amp;lt;tex&amp;gt;h(p, q)&amp;lt;/tex&amp;gt;, другую — &amp;lt;tex&amp;gt;h(q, p)&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;r \in h(p, q)&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\rho(r, p) &amp;lt; \rho(r, q)&amp;lt;/tex&amp;gt;. Отсюда вытекает следующее:&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=intersect&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathcal{V}(p_i) = \cap_{1 \leqslant j \leqslant n, j \neq i} h(p_i, p_j)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Отсюда получаем, что что ячейка Вороного — это пересечение &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; полуплоскостей, и поэтому представляет собой (возможно, неограниченную) открытую выпуклую область с не более чем &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; рёбрами.&lt;br /&gt;
&lt;br /&gt;
=== Топология диаграммы Вороного ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — множество из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов. Если они все лежат на одной прямой, то &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; представляет собой &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; параллельную прямую. Иначе &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; связная и все её рёбра — либо отрезки, либо лучи.&lt;br /&gt;
|proof=[[Файл:voronoi-not-lines.png|200px|thumb|right]] В случае, если все сайты лежат на одной прямой, каждая пара соседних сайтов порождает серединный перпендикуляр к отрезку, содержащему их, и, соответственно, к прямой, которая содержит все сайты. Так получаются &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; прямая, каждая из которых перпендикулярна прямой, содержащей сайты, а значит, эти прямые параллельны.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь случай, когда сайты не лежат на одной прямой. Покажем, что рёбра — это отрезки или лучи, от противного. Предположим, что есть ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, являющееся прямой. Пусть оно — граница ячеек &amp;lt;tex&amp;gt;\mathcal{V}(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;. Пусть точка &amp;lt;tex&amp;gt;p_k \in P&amp;lt;/tex&amp;gt; не лежит на прямой &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; (по условию такая точка существует). Тогда серединный перпендикуляр к &amp;lt;tex&amp;gt;p_j p_k&amp;lt;/tex&amp;gt; не параллелен &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, и, значит, он его пересекает. Но тогда та часть &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, что лежит в &amp;lt;tex&amp;gt;h(p_k, p_j)&amp;lt;/tex&amp;gt;, не может быть границей &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt;, потому что она ближе к &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, чем к &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;. Пришли к противоречию.&lt;br /&gt;
&lt;br /&gt;
Докажем теперь, что диаграмма связна. Предположим, что это не так. Тогда на её рёбрах найдутся две точки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, между которыми нет пути по рёбрам диаграммы. Рассмотрим отрезок &amp;lt;tex&amp;gt;st&amp;lt;/tex&amp;gt;. Он пересекает некоторое количество ячеек диаграммы, и, раз пути по рёбрам нет, какая-то из них несвязная. Это возможно, только если какая-то ячейка представляет собой полосу, ограниченную двумя параллельными прямыми. Но в нашем случае в диаграмме не может быть прямых, пришли к противоречию.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Размер структуры ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Для &amp;lt;tex&amp;gt;n \geqslant 3&amp;lt;/tex&amp;gt; сайтов диаграмма Вороного содержит не больше &amp;lt;tex&amp;gt;2n - 5&amp;lt;/tex&amp;gt; вершин и &amp;lt;tex&amp;gt; 3n - 6&amp;lt;/tex&amp;gt; рёбер.&lt;br /&gt;
|proof=[[Файл:voronoi-infinite-vertex.png|200px|thumb|right]]Для случая сайтов, лежащих на одной прямой, утверждение напрямую следует из вида диаграммы для этого случая, поэтому рассмотрим общий случай. По [[Формула Эйлера|формуле Эйлера]] &amp;lt;tex&amp;gt;v - e + f = 2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — число вершин, &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — число рёбер и &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; — число граней связного планарного графа. Мы не можем сразу применить эту формулу к &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt;, потому что в этом графе есть полубесконечные рёбра. Поэтому добавим вершину &amp;lt;tex&amp;gt;n_\infty&amp;lt;/tex&amp;gt;, и все полубесконечные рёбра мы превратим в рёбра, инцидентные ей. Таким образом мы увеличили число вершин на одну, а число рёбер не изменилось. Число граней равно &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; по определению диаграммы Вороного. Тогда по формуле Эйлера получаем &amp;lt;tex&amp;gt;(v + 1) - e + n = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Сумма степеней всех вершин полученного графа равна &amp;lt;tex&amp;gt;2e&amp;lt;/tex&amp;gt;, так как у каждого ребра есть ровно два конца (нет петель). Также у из каждой вершины исходят как минимум три ребра. Отсюда получаем &amp;lt;tex&amp;gt;2e \geqslant 3 (n + 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Домножим равенство на два и вычтем из него полученную нижнюю границу для &amp;lt;tex&amp;gt;2 \cdot e&amp;lt;/tex&amp;gt;, в результате получим &amp;lt;tex&amp;gt; v \leqslant 2n - 5&amp;lt;/tex&amp;gt;. Далее подставим этот результат в равенство и получим &amp;lt;tex&amp;gt;e \leqslant 3n - 6&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Связь с триангуляцией Делоне ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Наибольшая пустая окружность точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; по отношению к &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt;) — наибольшая окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что во внутренности соответствующего ей круга не лежит ни одного сайта из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — вершина диаграммы Вороного в том и только в том случае, когда &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит три и более сайтов на своей границе.&lt;br /&gt;
|proof=Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует, а &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; — соответствующие точки. Так как внутри &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; нет других сайтов, &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; должна быть на границе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; одновременно, то есть вершиной диаграмму.&lt;br /&gt;
Докажем в другую сторону: каждая вершина &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; диаграммы инцидентна минимум трём рёбрам, и, поэтому, как минимум трём ячейкам &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит на равном расстоянии от &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; и не может быть другого сайта ближе к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, так как иначе &amp;lt;tex&amp;gt;\mathcal{V}(p_i), \ \mathcal{V}(p_j), \ \mathcal{V}(p_k)&amp;lt;/tex&amp;gt; не сойдутся в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Поэтому можно построить окружность с центром в &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_i, \ p_j, \ p_k&amp;lt;/tex&amp;gt; на границе так, что внутри не будет других сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного в том и только в том случае, если на нём есть точка &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; содержит на своей границе только сайты &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=[[Файл:voronoi-circles.png|200px|thumb|right]]Предположим, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; существует. Тогда, так как &amp;lt;tex&amp;gt;C_P(q)&amp;lt;/tex&amp;gt; не содержит в себе сайтов и содержит &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt; на границе, &amp;lt;tex&amp;gt; \rho(q, p_i) = \rho(q, p_j) \leqslant \rho(q, p_k), \ 1 \leqslant k \leqslant n&amp;lt;/tex&amp;gt;. Отсюда выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; лежит — вершина &amp;lt;tex&amp;gt;Vor(P)&amp;lt;/tex&amp;gt; или лежит на ребре диаграммы. Но по предыдущей лемме выходит, что &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; не может быть вершиной диаграммы. Значит, она лежит на ребре, заданном серединным перпендикуляром к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем в другую сторону: пусть серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; задаёт ребро диаграммы. Наибольшая пустая окружность любой точки &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; на этом ребре должна содержать на границе &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и никаких других сайтов внутри.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Если соединить все сайты, соответствующие смежным ячейкам диаграммы Вороного, получится триангуляция Делоне для этого множества точек.&lt;br /&gt;
|proof=Если ячейки, соответствующие сайтам &amp;lt;tex&amp;gt;p_i, \ p_j&amp;lt;/tex&amp;gt;, смежны, то серединный перпендикуляр к отрезку &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; образует ребро диаграммы Вороного, то есть к нему применима предыдущая лемма и можно построить окружность с &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; на границе, внутри которой не будет других сайтов. [[Триангуляция Делоне#Критерий Делоне для рёбер|Вспомним]], что триангуляции Делоне принадлежат те и только те рёбра (с поправкой на точки, лежащие на одной окружности), на которых можно построить такую окружность, что внутри неё не будет лежать никаких точек. Тогда ребро &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; является ребром триангуляции Делоне. За счёт равносильности в обеих используемых леммах мы добавим все рёбра и не построим лишних.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
=== Наивный алгоритм ===&lt;br /&gt;
Будем [[Пересечение полуплоскостей, связь с выпуклыми оболочками|пересекать полуплоскости]] по по [[#intersect|свойству ячейки диаграммы]]. Необходимо &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз пересечь &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; плоскость, что суммарно делается за &amp;lt;tex&amp;gt;O(n^2 \log n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Инкрементальный алгоритм ===&lt;br /&gt;
[[Файл:voronoi-incremental.png|200px|thumb|right]]Храним диаграмму в РСДС. Пусть у нас уже есть диаграмма для точек &amp;lt;tex&amp;gt;p_1, p_2, ..., p_i&amp;lt;/tex&amp;gt;. Добавим новый сайт &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. Сначала найдём сайт &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, в ячейку которого попадает &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt;. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1}p_j&amp;lt;/tex&amp;gt;, он пересечёт границу ячейки &amp;lt;tex&amp;gt;\mathcal{V}(p_j)&amp;lt;/tex&amp;gt; с ячейкой &amp;lt;tex&amp;gt;\mathcal{V}(p_k)&amp;lt;/tex&amp;gt;; на следующем шаге будем строить серединный перпендикуляр для &amp;lt;tex&amp;gt;p_{i+1} p_k&amp;lt;/tex&amp;gt; и так далее.&lt;br /&gt;
&lt;br /&gt;
[[Файл:voronoi-update-dcel.png|400px|thumb|left]]В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, порождаемое &amp;lt;tex&amp;gt;p_{i+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, пересекает существовавшее ранее ребро &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, создаётся новая вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и начинается новое ребро &amp;lt;tex&amp;gt;e+1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* для ребра &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; в РСДС конец в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, следующее ребро — &amp;lt;tex&amp;gt;e'&amp;lt;/tex&amp;gt;, инцидентные грани — слева &amp;lt;tex&amp;gt;\mathcal{V}(i+1)&amp;lt;/tex&amp;gt;, справа — &amp;lt;tex&amp;gt;\mathcal{V}(j)&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* добавляем в РСДС ребро &amp;lt;tex&amp;gt;e + 1&amp;lt;/tex&amp;gt; с началом в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и предыдущим ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* удаляем все рёбра, лежащие между вершиной начала &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; и вершиной конца &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;, по часовой стрелке;&lt;br /&gt;
* обновляем ребро, соответствующее &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt; — им становится &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* создаём вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; с ребром &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый шаг выполняется за &amp;lt;tex&amp;gt;O(i)&amp;lt;/tex&amp;gt;, значит, суммарно диаграмма из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; сайтов с нуля создаётся за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Диаграмма &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка ==&lt;br /&gt;
Ячейка Вороного &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка — множество точек, имеющих в качестве ближайших &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; соседей определённое множество из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; сайтов. Чтобы построить диаграмму &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го порядка, нужно взять диаграмму &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt;-го порядка для первых &amp;lt;tex&amp;gt;k - 1&amp;lt;/tex&amp;gt; сайтов и заменить каждую ячейку на диаграмму Вороного на множестве остальных сайтов.&lt;br /&gt;
&lt;br /&gt;
Диаграмма &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;-го порядка является farthest-point диаграммой, т.е. в каждой её ячейке все точки являются наиболее удалёнными от какого-то сайта.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-first-order.png|200px|thumb|Диаграмма первого порядка]]&lt;br /&gt;
|[[Файл:voronoi-second-order.png|200px|thumb|Диаграмма второго порядка]]&lt;br /&gt;
|[[Файл:voronoi-third-order.png|200px|thumb|Диаграмма третьего порядка]]&lt;br /&gt;
|[[Файл:voronoi-tenth-order.png|200px|thumb|Диаграмма десятого порядка, она же farthest-point]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Сайт имеет ячейку в farthest-point диаграмме тогда и только тогда, когда он является вершиной выпуклой оболочки всех сайтов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Все ячейки в farthest-point диаграмме неограничены.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Чтобы найти farthest-point диаграмму, сначала найдём выпуклую оболочку всех сайтов. Обозначим сайты, её образующие, через &amp;lt;tex&amp;gt;p_1, p_2, ..., p_m&amp;lt;/tex&amp;gt;. Делаем их случайную перестановку, но запомним порядки обхода в выпуклой оболочке по часовой стрелке (&amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt;) и против часовой (&amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;). Далее удаляем из выпуклой оболочки все точки, кроме первых трёх (запоминая при этом их соседей в оболочке на момент удаления). После этого мы строим farthest-point диаграмму для первых трёх точек и последовательно добавляем остальные (удалённые) в порядке, обратном порядку удаления.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Файл:voronoi-farthest-construct.png|600px|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; ячейка встанет «между» ячейками, соответствующими &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt;. Перед добавлением &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;cw(p_i)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; — соседи, поэтому между ними построен серединный перпендикуляр. Серединный перпендикуляр к &amp;lt;tex&amp;gt;p_i ccw(p_i)&amp;lt;/tex&amp;gt; даст новое ребро, которое лежит в farthest-point ячейке &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; и является частью границы ячейки &amp;lt;tex&amp;gt; p_i&amp;lt;/tex&amp;gt;. Обойдём ячейку &amp;lt;tex&amp;gt;ccw(p_i)&amp;lt;/tex&amp;gt; по часовой стрелке, чтоб понять, какое ребро пересечёт перпендикуляр. С другой стороны этого ребра лежит ячейка какой-то точки &amp;lt;tex&amp;gt;p_j&amp;lt;/tex&amp;gt;, и серединный перпендикуляр &amp;lt;tex&amp;gt;p_i p_j&amp;lt;/tex&amp;gt; тоже даст ребро ячейке &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Аналогично совершим обход и так далее. Последний серединный перпендикуляр будет построен для &amp;lt;tex&amp;gt;p_i cw(p_i)&amp;lt;/tex&amp;gt;. После этого удаляем рёбра, которые лежат внутри новой ячейки.&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* de Berg, Cheong, van Kreveld, Overmars. Computational Geometry, Algorithms and Applicants, 2008. pp. 147-151, 164-166&lt;br /&gt;
* [http://students.info.uaic.ro/~emilian.necula/vor2.pdf Инкрементальный алгоритм]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Voronoi_diagram Wikipedia — Voronoi diagram]&lt;br /&gt;
* [http://www.cs.uu.nl/docs/vakken/ga/slides7b.pdf Диаграммы высших порядков]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Вычислительная геометрия]]&lt;/div&gt;</summary>
		<author><name>Katyatitkova</name></author>	</entry>

	</feed>