Flip-алгоритм для нахождения триангуляции Делоне/диаграммы Вороного

Правка ru4, от VitaliiV, 2025-12-02 18:06:43

Всем привет! Недавно я захотел сдать задачу 102482G - Panda Preserve, и не смог найти нигде простой реализации построения диаграммы Вороного за $$$O(n^2)$$$.

В этом блоге я хочу рассказать о том что такое триангуляция Делоне, диаграмма Вороного, как они связаны и как их можно построить не используя сложны структур данных

Начнём с нескольких определений и фактов:

Триангуляция — это разбиение некоторого множества точек S на треугольники, при этом внутренние области треугольников не пересекаются.

Триангуляция Делоне — это такое разбиение некоторого множества точек S на треугольники, что внутри окружности каждого треугольника не находится никаких точек из множества.

Диаграмма Вороного — такое разбиение плоскости, при котором каждая область этого разбиения образует множество точек, более близких к одному из элементов множества S, чем к любому другому элементу множества.

Диаграмма Вороного и триангуляция Делоне являются двойственными графами

Свойства триангуляции Делоне

Триангуляция Делоне максимизирует минимальный угол среди всех углов всех построенных треугольников.

Триангуляция Делоне максимизирует сумму радиусов вписанных окружностей.

Триангуляция Делоне обладает минимальной суммой радиусов окружностей, описанных около треугольников, среди всех возможных триангуляций.

Теги geometry, tutorial

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
en10 Английский VitaliiV 2025-12-03 08:52:29 19 Tiny change: 'am).\n\n**Generalization**\n\nThe ' -> 'am).\n\n**Summary**\n\nThe '
en9 Английский VitaliiV 2025-12-03 08:06:32 4
en8 Английский VitaliiV 2025-12-03 07:45:08 12
en7 Английский VitaliiV 2025-12-03 07:41:32 4
en6 Английский VitaliiV 2025-12-03 07:41:22 152
en5 Английский VitaliiV 2025-12-03 07:37:16 46 Tiny change: 'bout this х[here](htt' -> 'bout this [here](htt' (published)
en4 Английский VitaliiV 2025-12-03 07:32:36 57
en3 Английский VitaliiV 2025-12-03 07:31:40 7477 Tiny change: 's ABD and BCD. It can b' -> 's ABD and **BCD**. It can b'
en2 Английский VitaliiV 2025-12-03 07:24:10 102
en1 Английский VitaliiV 2025-12-03 07:21:34 4608 Initial revision for English translation (saved to drafts)
ru42 Русский VitaliiV 2025-12-02 20:28:55 2 Мелкая правка: ' алгоритм фортуна, пр' -> ' алгоритм Фортуна, пр'
ru41 Русский VitaliiV 2025-12-02 20:26:28 119
ru40 Русский VitaliiV 2025-12-02 20:19:02 4 Мелкая правка: 'о — такое раз' -> 'о — это такое раз'
ru39 Русский VitaliiV 2025-12-02 20:18:25 4
ru38 Русский VitaliiV 2025-12-02 20:18:12 13 Мелкая правка: ' операций флипа на каждый' -> ' операций flip на каждый'
ru37 Русский VitaliiV 2025-12-02 20:16:37 4
ru36 Русский VitaliiV 2025-12-02 20:16:25 44
ru35 Русский VitaliiV 2025-12-02 20:14:46 22
ru34 Русский VitaliiV 2025-12-02 20:13:45 80
ru33 Русский VitaliiV 2025-12-02 20:11:38 6 Мелкая правка: 'овести до \(O(n)\) операций ' -> 'овести до $O(n)$ операций '
ru32 Русский VitaliiV 2025-12-02 20:04:15 2 Мелкая правка: 'бщение**\nИтератив' -> 'бщение**\n\nИтератив'
ru31 Русский VitaliiV 2025-12-02 20:01:31 0 (опубликовано)
ru30 Русский VitaliiV 2025-12-02 20:01:03 1 Мелкая правка: ' проверить не наруша' -> ' проверить, не наруша'
ru29 Русский VitaliiV 2025-12-02 20:00:29 45
ru28 Русский VitaliiV 2025-12-02 19:59:10 255
ru27 Русский VitaliiV 2025-12-02 19:45:44 1 Мелкая правка: ' построить не исполь' -> ' построить, не исполь'
ru26 Русский VitaliiV 2025-12-02 19:44:58 1 Мелкая правка: 'зать о том что такое' -> 'зать о том, что такое'
ru25 Русский VitaliiV 2025-12-02 19:43:20 26
ru24 Русский VitaliiV 2025-12-02 19:42:43 125
ru23 Русский VitaliiV 2025-12-02 19:38:27 79
ru22 Русский VitaliiV 2025-12-02 19:37:44 116
ru21 Русский VitaliiV 2025-12-02 19:35:44 74
ru20 Русский VitaliiV 2025-12-02 19:32:56 2 Мелкая правка: 'полнить.\n![ ](htt' -> 'полнить.\n\n![ ](htt'
ru19 Русский VitaliiV 2025-12-02 19:32:40 173
ru18 Русский VitaliiV 2025-12-02 19:32:14 160
ru17 Русский VitaliiV 2025-12-02 19:31:58 2 Мелкая правка: '/ris1.png)На рисунке' -> '/ris1.png)\nНа рисунке'
ru16 Русский VitaliiV 2025-12-02 19:31:39 82
ru15 Русский VitaliiV 2025-12-02 19:31:23 238 Мелкая правка: 'полнить.\n\n![](https://' -> 'полнить.\n![ ](https://'
ru14 Русский VitaliiV 2025-12-02 19:27:11 382
ru13 Русский VitaliiV 2025-12-02 19:04:05 25
ru12 Русский VitaliiV 2025-12-02 19:03:40 8
ru11 Русский VitaliiV 2025-12-02 18:55:34 602
ru10 Русский VitaliiV 2025-12-02 18:50:10 7 Мелкая правка: '0%D1%84)\n[cut]\n\n\n**Ал' -> '0%D1%84)\n\n\n**Ал'
ru9 Русский VitaliiV 2025-12-02 18:49:59 4 Мелкая правка: 'n[cut]\n\n**Алго' -> 'n[cut]\n\n\n**Алго'
ru8 Русский VitaliiV 2025-12-02 18:49:42 8407 Мелкая правка: 'а $O(n^2)$в худшем с' -> 'а $O(n^2)$ в худшем с'
ru7 Русский VitaliiV 2025-12-02 18:38:24 784
ru6 Русский VitaliiV 2025-12-02 18:26:53 1490 Мелкая правка: '[0, 2 $\pi \)' -> '[0, 2 $\pi\)'
ru5 Русский VitaliiV 2025-12-02 18:07:01 5 Мелкая правка: '0%D1%84)\n\n**Свойст' -> '0%D1%84)\n[cut]\n**Свойст'
ru4 Русский VitaliiV 2025-12-02 18:06:43 376
ru3 Русский VitaliiV 2025-12-02 18:02:15 811 Мелкая правка: 'роного за O(n^2)\nТриангул' -> 'роного за $O(n^2)$\nТриангул'
ru2 Русский VitaliiV 2025-12-02 17:48:11 448
ru1 Русский VitaliiV 2025-12-02 17:38:34 43 Первая редакция (сохранено в черновиках)