Триангуляция набора плоских точек с известной границей

У меня есть плоское множество точек P. Я уже знаю, какие точки p в P принадлежат границе B(p). Указанная граница может быть выпуклой или невыпуклой. Теперь я хотел бы найти триангуляцию P с границей B (p). Мои вопросы:

  • Есть ли алгоритм, который достигает этого напрямую? Близким кандидатом может быть триангуляция Делоне с ограничениями (CDT). Однако я не думаю, что CDT здесь применим: я мог бы ввести все ребра в B(p) в качестве ограничения, чтобы все ребра содержались в триангуляции. Однако это не обязательно означает, что это будет граница триангуляции. Поправьте меня, если я ошибаюсь здесь.

  • Если вы знаете такой алгоритм, можете ли вы указать мне (облегченную) библиотеку C, которая обеспечивает реализацию?

  • В качестве альтернативы: я мог бы, конечно, просто триангулировать P, используя стандартную триангуляцию Делоне из GTS. Затем мне нужно было бы обрезать все грани с вершиной за пределами B (p). Возможно ли это с ГТС?


person Matthias    schedule 27.09.2013    source источник
comment
Знаете ли вы порядок точек на границе? Граница проста?   -  person David Eisenstat    schedule 27.09.2013
comment
если простой означает непересекающиеся, то да и да   -  person Matthias    schedule 27.09.2013


Ответы (3)


Я мог бы ввести все ребра в B(p) в качестве ограничения, чтобы все ребра содержались в триангуляции. Однако это не обязательно означает, что это будет граница триангуляции.

Вы правы в том, что триангуляция Делоне с ограничениями может заполнить вогнутости границы. Каждый треугольник, однако, находится либо полностью внутри, либо полностью вне границы, поэтому достаточно легко удалить треугольники снаружи, пройдя двойственный планарный прямолинейный граф, начиная с бесконечной грани, рассматривая граничные ребра как непроходимые. Библиотека Джонатана Шевчука Triangle, например, делает это. Лицензия может вам не понравиться, но если у вас уже есть другая библиотека для вычисления триангуляции Делоне с ограничениями, мы не говорим о большом количестве дополнительного кода.

person David Eisenstat    schedule 27.09.2013
comment
Спасибо за ваш очень полезный вклад. Я хотел бы добавить к вашему ответу, что gts_remove_hull() достигает именно того, что вы описали как последний шаг вашей процедуры (удаление треугольников за пределами границы) - person Matthias; 01.10.2013

poly2tri находит CDT плоской области с учетом ее границы. Его легко построить и использовать.

person lhf    schedule 06.12.2016

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

person abenci    schedule 30.09.2013