Тріангуляція ДелонеТріангуля́ція Делоне́ для множини точок P на площині — це така тріангуляція DT(P), що жодна точка множини P не знаходиться всередині описаних довкола трикутників кіл в множині DT(P). Тріангуляція Делоне дозволяє якомога зменшити кількість малих кутів. Цей спосіб тріангуляції був винайдений Борисом Делоне в 1934 році[1]. Базуючись на визначенні Делоне, коло описане навколо трикутника утворене трьома точками з вихідної множини точок називається пустим, якщо воно не містить вершин трикутника інших ніж ті три, що його задають (інші точки допускаються тільки на периметрі кола, але не всередині) Умова Делоне стверджує, що мережа трикутників є тріангуляцією Делоне, якщо всі описані кола трикутників пусті. Це є початкове визначення для двовимірного простору. Його можна використовувати для тривимірного простору, якщо використовувати описані сфери замість описаних кіл. Для множини точок на одній лінії тріангуляції Делоне не існує (фактично, поняття тріангуляції для такого випадку невизначене). Для чотирьох точок на одному колі (наприклад прямокутник) тріангуляція Делоне має два випадки, тобто можна розділити цей чотирикутник двома способами, які задовольняють умови Делоне. Зв'язок з діаграмою ВороногоТріангуляція Делоне дискретної множини точок P в загальному випадку відповідає дуальному графу розбиття Вороного для P. Особливі випадки включають існування трьох точок на одній прямій, та чотирьох точок на колі. d-вимірні тріангуляціїДля множини P точок d-вимірного Евклідового простору, тріангуляція Делоне це тріангуляція DT(P) така що жодна з точок з P не лежить всередині гіперсфери описаної навколо будь-якого симплекса з DT(P). Відомо що[2] існує єдина тріангуляція Делоне для P, якщо P множина точок в загальній позиції; така що не існує підпростору розмірності k що містить точок ні k-сфери що містить точок, для (тобто, наприклад для множини точок в не існує трьох точок що лежать на одній прямій, не існує чотирьох що лежать в одній площині, і жодні п'ять точок не лежать на одній сфері). Задача знаходження тріангуляції Делоне для множини точок в d-вимірному просторі може бути зведена до задачі знаходження опуклої оболонки множини точок в -вимірному просторі, додаючи кожній точці p додаткову координату яка дорівнює , беручи нижню частину опуклої оболонки, і відображаючи її назад в d-вимірний простір видаленням останньої координати. Так як опукла оболонка єдина, то тріангуляція теж, вважаючи, що всі сегменти опуклої оболонки — симплекси. Не симплексні сегменти з'являються лише коли різних точок лежить на одній d-гіперсфері, тобто точки не знаходяться в загальній позиції. ВластивостіНехай n — кількість точок, а d — розмірність.
Заміна спільного ребраЯкщо розглядати два трикутники ABD та BCD зі спільним ребром BD (див. малюнки), якщо , трикутники задовольняють умові Делоне. Це важлива властивість, бо дозволяє використовувати техніку заміни ребра. Якщо два трикутники не задовольняють умові Делоне, заміна спільного ребра BD на ребро AC утворює два інші трикутники які задовольняють умові Делоне:
Зауважте, що найменший кут тріангуляції збільшився. АлгоритмиБагато алгоритмів для обчислення тріангуляції Делоне спираються на швидкі операції для визначення того, чи точка знаходиться всередині описаного навколо трикутника кола, і ефективних структур даних для зберігання трикутників та ребер. В двовимірному випадку, якщо D знаходиться всередині кола описаного навколо A, B, C треба перевірити чи визначник:[4] Коли A, B та C впорядковані проти годинникової стрілки визначник додатній тоді і тільки тоді, коли D знаходиться всередині описаного кола. Алгоритм заміни ребраЯк вже згадувалось вище, якщо трикутники не задовольняють умові Делоне, ми можемо замінити ребро. З цього можна вивести очевидний алгоритм: побудувати хоч якусь тріангуляцію, а потім замінювати ребра аж поки вона не буде задовольняти умові Делоне. На жаль, це може зайняти O(n2) замін ребер, і не узагальнюється на три виміри і більші.[2] ІнкрементнийТакож досить прямим алгоритмом побудови тріангуляції Делоне є додавання до неї по одній вершині, постійно перебудовуючи тріангуляцію. Коли ми додаємо вершину v, ми розбиваємо на три частини трикутник що містить v, а потім застосовуємо алгоритм заміни ребра. При повному переборі всіх трикутників які можуть містити v ми витратимо час O(n), потім нам треба буде перевірити трикутники на відповідність умові Делоне. Загальний час робота алгоритму O(n2). Якщо ми будемо додавати вершини в випадковому порядку, виявиться (через дещо складне доведення), що кожна вставка буде замінювати в середньому лише O(1) трикутників, хоча іноді й більше.[5] Це залишає можливість оптимізувати час виявлення точки. Ми можемо зберігати історію поділів та замін ребер: кожен трикутник зберігає вказівник на два, чи три трикутники що його замінили. Щоб виявити який трикутник містить v, ми починаємо з кореневого трикутника, і ідемо по вказівнику який показує на менший трикутник що міститьv, поки не знайдемо трикутника якого ще не замінювали. В середньому, це займе час O(log n). Загалом для всіх вершин це займе час O(n log n).[2]. Алгоритм Бов'єра-Ватсона (Bowyer–Watson algorithm[en]) описує інший підхід до інкрементної побудови, без необхідності заміни ребер. Розділяй і володарюйВ цьому алгоритмі, рекурсивно проводять пряму, щоб розділити вершини на дві множини. Для кожної з них будується триангуляція Делоне, і потім дві триангуляції зливаються вздовж прямої що їх розділювала. Використовуючи деякі хитрі трюки, операцію злиття можна здійснити за O(n), і загальний час побудови буде O(n log n).[6] Для деяких видів множин точок, наприклад випадково рівномірно розподілених, розумний вибір розділювальних прямих може зменшити середній час роботи до O(n log log n), при цьому залишаючи час в найгіршому випадку таким самим. Парадигма «розділяй і володарюй» для виконання тріангуляцій в d вимірах описується в «DeWall: A fast divide and conquer Delaunay triangulation algorithm in Ed».[7] Показано що «розділяй та володарюй» є найшвидшою технікою генерації триангуляції Делоне.[8][9] ЗамітанняАлгоритм Форчуна використовує прийом замітальної прямої щоб досягти часу O(n log n) у плоскому випадку. Замітальна оболонкаЗамітальна оболонка[10] є швидкою гібридною технікою побудови двовимірної тріангуляції Делоне що використовує радіально поширювану замітальну оболонку (яка послідовно утворюється з радіально відсортованої множини точок), в парі з наступним ітеративним заміщенням ребер. Емпіричні результати показують що алгоритм працює приблизно вдвічі швидше ніж Qhull. Він має вільні реалізації на C++ та C#.[11] ЗастосуванняЕвклідове мінімальне кістякове дерево множини точок є підмножиною тріангуляції Делоне тих самих точок, і це можна використати щоб обчислювати це дерево ефективніше. Для моделювання місцевості, чи інших об'єктів що задані множиною вибраних точок, тріангуляція Делоне дає гарний набір трикутників для використання як полігони моделі. Зокрема, тріангуляція Делоне уникає вузьких трикутників (з маленькими кутами, бо вони мають великі описані кола, порівняно з власною площею). Дивіться статтю тріангульована нерегулярна мережа (triangulated irregular network[en]). Тріангуляції Делоне часто використовуються для побудови мешів для методу скінченних елементів, через гарні кути, та швидкі алгоритми побудови. Зазвичай, об'єкт для якого потрібно побудувати меш, грубо задається як симпліційний комплекс; щоб він був чисельно стабільним він має бути уточненим, наприклад за допомого алгоритму Руперта (Ruppert's algorithm[en]). Це було реалізовано Джонатаном Шевчуком, і вільно доступно в пакеті Triangle [Архівовано 10 квітня 2011 у Wayback Machine.]. Див. такожПримітки
Посилання
|