Делоне триангулирует 2d многоугольник с отверстиями

Я хочу триангулировать сложный (но не самопересекающийся) многоугольник с отверстиями, чтобы результирующие треугольники лежали внутри многоугольника, полностью покрывали этот многоугольник и подчинялись правилам треугольника Делоне.

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

Итак, возможна ли такая триангуляция? И если да, то как я могу это сделать это?

на всякий случай-мне нужно построить аппроксимацию медиальной оси многоугольника (надеюсь, это можно сделать, связав все точки окружности результирующих треугольников).

2 ответов


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

посмотреть треугольник и poly2tri проекты для реализации.


вот один из методов, которые я придумал, когда делал navmesh для игры RTS. Обратите внимание, что это homebrew, никакие сторонние инструменты не использовались, мне потребовалось около 3 недель для реализации и исправления:

  1. кормить все точки в триангуляции Делоне (чтобы получить большинство равномерных треугольников)
  2. Проверьте вдоль отверстий контуры и флип полигональных пар, произведенных Delaunay, чтобы соответствовать контурам
  3. клип отверстия внутренности

результат (plz игнорировать фиолетовый контуры):

enter image description here