Одна умова: жодна точка не повинна знаходитися всередині будь-якого описаного кола
Враховуючи набір точок у площині, зазвичай існує багато способів з’єднати їх трикутниками, які покривають їх випуклу оболонку. Делаunay-у триангулювання, назване на честь російсько-радянського математика Бориса Делауна, яке було описане ним у 1934 році, є конкретним триангулюванням з вражаючим властивістю: для кожного трикутника в ньому описане коло, що проходить через його три вершини – його описане коло – не містить жодної іншої точки набору всередині. Кожен трикутник має порожнє описане коло.
Ця одна умова має потужний наслідок: серед усіх можливих триангулювань набору точок, Делаunay-у триангулювання є тим, яке максимізує мінімальний кут. Воно систематично уникає довгих, вузьких трикутників-слисків, які роблять скінченні елементи чисельно нестабільними та рельєвні моделі виглядають обвугленими та неправильними. Якщо триангулювання не є Делаunay-у, існує пара сусідніх трикутників, спільний край яких можна перевернути на іншу діагональ їх чотирикутника, і цей переворот завжди покращує найгірший кут – Делаunay-у є станом, коли подібного покращення не існує.
Bowyer-Watson: вставте точку, виріжте порожнину
Алгоритм, який ви бачите вище, – Bowyer-Watson, опублікований незалежно Адріаном Боєром та Девідом Уотсоном у 1981 році. Він поступово будує триангуляцію, додаючи одну точку за раз, і це працює тому, що властивість «порожнього кола» є локальною та легкою для перевірки:
почніть із одного великого «супер-трикутника», який охоплює всі вхідні точки для кожної нової точки p: визначте трикутники, існуючі на даний момент, чия коло обробки містить p виріжте порожнину – полігон, що залишається після видалення всіх «поганих» трикутників видаліть погані трикутники перетриангулюйте: з’єднайте p з усіма краями полигову межу видаліть будь-який трикутник, який все ще торкається вершини супер-трикутника Перевірка на те, чи лежить точка всередині кола обробки трикутника, – це простий тест знаку визначників для трьох вершин та кандидатської точки – дешево, точно з використанням цілочисельної або обережної плаваючої арифметики, і тому інкрементний код Delaunay достатньо короткий, щоб поміститися на одному екрані. Завдяки хитру з «супер-трикутником» не потрібно спеціально враховувати межу опуклої оболонки: все починається всередині одного великого трикутника, а кути цього великого трикутника видаляються в кінці.
start with one huge "super-triangle" that encloses every input point
for each new point p:
bad = every existing triangle whose circumcircle contains p
cavity = the boundary polygon left after removing all "bad" triangles
remove the bad triangles
re-triangulate: connect p to every edge of the cavity boundary
remove any triangle still touching a super-triangle vertex
Вороної діаграма – це одна й та ж інформація, але перевернута
Вороної діаграма розділяє площину на одну комірку для кожної точки, де комірка містить усі місця ближче до цієї точки, ніж до будь-якої іншої. Це виглядає як зовсім інша конструкція, але це точна дуальна графа триангуляції Делоне: з'єднайте центросиметричні центри кожної пари трикутників, що мають спільний край Делоне, і ви отримаєте краї Вороної діаграми. Центросиметричний центр кожного трикутника Делоне стає вершиною Вороної діаграми, а кожен край Делоне перетинається точно однією перпендикулярною краєю Вороної діаграми. Обчислення однієї структури знаходиться в лінійному часовому віддаленні від іншої.
Delaunay triangle → Voronoi vertex (its circumcenter)
Delaunay edge (shared by
two triangles) → Voronoi edge (perpendicular, joining
the two circumcenters)
Delaunay vertex (a point) → Voronoi cell (region closest to it)
Де саме це використовується
Обчислювальні сітки (finite-element meshers) використовують уточнення Делоне для заповнення інженерної деталі добре сформованими трикутниками або тетраедрами, оскільки властивість порожнього кола визначає найгірший кут, що в свою чергу обмежує чисельну похибку симуляції, яка виконується на цій сітці. Рельєфні та геоінформаційні системи (GIS) створюють триангуляцію Делоне поверх висотних зразків (TIN – triangulated irregular network), оскільки це уникнення довгих, вузьких трикутників, які штучно загострюють вигляд ландшафту. Планувальники бездротових мереж використовують двозначну Вороної діаграму для моделювання зон покриття навколо веж, а біоінформатики – для пошуку найближчих сусідів кожної клітини в тканині. Обидві структури також безпосередньо відповідають на запити про найближчого сусіда: клітина Вороної, що містить точку запиту, ідентифікує її найближчий об’єкт даних завдяки своїй конструкції, а триангуляція Делоне є найрозрідженішою графою, яка гарантовано містить край найближчого сусіда для кожної точки.
Часті запитання
Чому триангуляція Делоне уникнення тонких, сріблястих трикутників?
Це тому, що вона максимізує мінімальний кут для будь-якого можливого триангулювання одного й того ж набору точок. Будь-яке триангулювання, яке порушує властивість порожнього кола, можна покращити шляхом перевертання спільного краю двох сусідніх трикутників, і це перевертання завжди збільшує найменший кут, який у ньому бере участь. Делоне є стаціонарною точкою цього процесу.
Яке саме відношення між Делоне та Вороної?
Це подвійні графи одного й того ж набору точок. Центр описання кожного трикутника Делоне є вершиною Вороної, а кожен край Делоне перетинається рівно одним краєм Вороної, перпендикулярним йому. Обчислення одного автоматично визначає інший.
Чи Bowyer-Watson – найшвидший спосіб побудови триангуляції Делоне?
Ні. Його найгірший випадок – O(n²) тому, що погано розташована нова точка може зробити недійсними величезну дірку з трикутників. Алгоритм «Свисток Фортуни» гарантує O(n log n) у найгіршому випадку, а також методи розділяй та володарюй. Bowyer-Watson залишається популярним завдяки його короткій реалізації, тому що він працює інкрементально при надходженні точок і має складність O(n log n) на типових, неавтентичних наборах точок.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте Delaunay & Voronoi і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію Delaunay & Voronoi