Изменения

Перейти к: навигация, поиск

Диаграмма Вороного

208 байт добавлено, 10:53, 12 мая 2015
Инкрементальный алгоритм
=== Инкрементальный алгоритм ===
[[Файл:voronoi-incremental.png|200px|thumb|right]]Храним диаграмму в [[ППЛГ и РСДС (PSLG и DCEL): определение, построение РСДС множества прямых|РСДС]]. Пусть у нас уже есть диаграмма для точек <tex>p_1, p_2, ..., p_i</tex>. Добавим новый сайт <tex>p_{i+1}</tex>. Сначала [[Локализация в ППЛГ методом полос (персистентные деревья)|найдём ]] сайт <tex>p_j</tex>, в ячейку которого попадает <tex>p_{i+1}</tex>. После этого строим новую ячейку: сначала проведём серединный перпендикуляр для <tex>p_{i+1}p_j</tex>, он пересечёт границу ячейки <tex>\mathcal{V}(p_j)</tex> с ячейкой <tex>\mathcal{V}(p_k)</tex>; на следующем шаге будем строить серединный перпендикуляр для <tex>p_{i+1} p_k</tex> и так далее.
[[Файл:voronoi-update-dcel.png|400px|thumb|right]]В процессе построения перпендикуляров необходимо обновлять РСДС. Каждый раз, когда новое ребро <tex>e</tex>, порождаемое <tex>p_{i+1}</tex> и <tex>p_j</tex>, пересекает существовавшее ранее ребро <tex>e'</tex>, создаётся новая вершина <tex>v</tex> и начинается новое ребро <tex>e+1</tex>.
Обновление РСДС происходит следующим образом: * для ребра <tex>e</tex> в РСДС второй конец в вершине <tex>v</tex>, следующее ребро — <tex>e'</tex>, инцидентные грани — слева <tex>\mathcal{V}(i+1)</tex>, справа — <tex>\mathcal{V}(j)</tex>;
* добавляем в РСДС ребро <tex>e + 1</tex> с началом в <tex>v</tex> и предыдущим ребром <tex>e</tex>;
* удаляем все рёбра, лежащие между вершиной начала <tex>e</tex> и вершиной конца <tex>e</tex>, по часовой стрелке;
Каждый шаг выполняется за <tex>O(i)</tex>, значит, суммарно диаграмма из <tex>n</tex> сайтов с нуля создаётся за <tex>O(n^2)</tex>.
 
{|
|[[Файл:voronoi-incremental.png|200px|thumb]]
|[[Файл:voronoi-update-dcel.png|400px|thumb]]
|}
== Диаграмма <tex>k</tex>-го порядка ==
418
правок

Навигация