Алгоритм Бойера – Ватсона - Bowyer–Watson algorithm
В вычислительная геометрия, то Алгоритм Бойера – Ватсона это метод вычисления Триангуляция Делоне конечного множества точек в любом количестве размеры. Алгоритм также может быть использован для получения Диаграмма Вороного точек, то есть двойственный граф триангуляции Делоне.
Описание
Алгоритм Бойера – Ватсона - это инкрементальный алгоритм. Он работает путем добавления точек по одной в действительную триангуляцию Делоне подмножества требуемых точек. После каждой вставки все треугольники, окружности которых содержат новую точку, удаляются, оставляя звездообразный многоугольник отверстие, которое затем повторно триангулируется с использованием новой точки. Используя связность триангуляции для эффективного поиска удаляемых треугольников, алгоритм может принимать O (N войти N) операций для триангуляции N точек, хотя существуют особые вырожденные случаи, когда это достигает НА2).[1]
Первый шаг: вставьте узел в охватывающий "супер" -треугольник
Вставить второй узел
Вставить третий узел
Вставить четвертый узел
Вставить пятый (и последний) узел
Убрать ребра с крайностями в супер-треугольнике
История
Алгоритм иногда называют просто Алгоритм Бойера или Алгоритм Ватсона. Адриан Бойер и Дэвид Уотсон разработали его независимо друг от друга в одно и то же время, и каждый из них опубликовал статью об этом в одном и том же номере журнала. Компьютерный журнал (Смотри ниже).
Псевдокод
Следующее псевдокод описывает базовую реализацию алгоритма Бойера-Ватсона. Его временная сложность составляет . Эффективность можно повысить несколькими способами. Например, соединение треугольников можно использовать для определения местоположения треугольников, которые содержат новую точку в их описанной окружности, без необходимости проверять все треугольники - таким образом мы можем уменьшить временную сложность до . Предварительное вычисление описанных окружностей может сэкономить время за счет использования дополнительной памяти. А если точки распределены равномерно, сортируя их по заполнению пространства Кривая Гильберта перед вставкой также можно ускорить местоположение точки.[2]
функция BowyerWatson (pointList) // pointList - это набор координат, определяющих точки для триангуляции триангуляция := пустой треугольник сетка данные структура Добавить супер-треугольник к триангуляция // должен быть достаточно большим, чтобы полностью содержать все точки в pointList за каждый точка в pointList делать // добавляем все точки по одной в триангуляцию плохие треугольники := пустой набор за каждый треугольник в триангуляция делать // сначала находим все треугольники, которые больше не действительны из-за вставки если точка является внутри описанный круг из треугольник Добавить треугольник к плохие треугольники многоугольник := пустой набор за каждый треугольник в плохие треугольники делать // находим границу многоугольного отверстия за каждый край в треугольник делать если край является нет общий к любой Другой треугольники в плохие треугольники Добавить край к многоугольник за каждый треугольник в плохие треугольники делать // удаляем их из структуры данных удалять треугольник из триангуляция за каждый край в многоугольник делать // повторно триангулируем многоугольное отверстие newTri := форма а треугольник из край к точка Добавить newTri к триангуляция за каждый треугольник в триангуляция // вставка точек завершена, теперь очищаем если треугольник содержит а вершина из оригинал супер-треугольник удалять треугольник из триангуляция возвращаться триангуляция
Рекомендации
- ^ Ребай, С. Эффективное построение неструктурированной сетки с помощью триангуляции Делоне и алгоритма Бойера-Ватсона. Журнал вычислительной физики, том 106, выпуск 1, май 1993 г., стр. 127.
- ^ Лю, Юаньсинь и Джек Снайинк. «Сравнение пяти реализаций тесселяции 3D Делоне». Комбинаторная и вычислительная геометрия 52 (2005): 439-458.
дальнейшее чтение
- Бойер, Адриан (1981). «Вычисление мозаики Дирихле». Comput. Дж. 24 (2): 162–166. Дои:10.1093 / comjnl / 24.2.162.
- Уотсон, Дэвид Ф. (1981). "Расчет п-мерная мозаика Делоне с применением к многогранникам Вороного ". Comput. Дж. 24 (2): 167–172. Дои:10.1093 / comjnl / 24.2.167.
- Эффективный алгоритм триангуляции, подходящий для моделирования местности общие пояснения с примерами исходного кода на нескольких языках.
внешняя ссылка
- pyDelaunay2D : Дидактическое Python реализация алгоритма Бойера – Ватсона.
- Bl4ckb0ne / делоне-триангуляция : C ++ реализация алгоритма Бойера – Ватсона.