Как извлечь ребра из сегмента графика Делоне в CGAL?

Мне нужно найти среднюю ось вогнутого многоугольника с отверстиями. я использую CGAL. Мой текущий подход:

  1. Построить Двухмерный сегментный график Делоне многоугольника
  2. Извлечь полученные выходные сегменты (биссектрисы)
  3. Протестируйте каждый сегмент, чтобы найти, находится ли он внутри многоугольника
  4. Результирующий набор сегментов будет формировать среднюю ось многоугольника

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

Как мне это сделать? Я даже на правильном пути?

Также я знаю, что могу перебирать края графа, используя один из предоставленных методов, и я понимаю, что это возвращает грань и противоположную вершину к ребру. Но как я могу использовать это, чтобы получить, скажем, конечные точки пополам линии?

0

Решение

Вы можете использовать функции draw_dual() или же draw_skeleton (). Дуга параболы будет аппроксимирована отрезками. Вы можете посмотреть на реализацию метода, если вам нужно больше контроля над выводом.

Вы можете использовать такой класс для сбора предметов:

struct Collector
{
std::vector<Ray_2> rays;
std::vector<Line_2> lines;
std::vector<Segment_2> segs;

void operator<<(const Ray_2& p){rays.push_back(p);}
void operator<<(const Line_2& p){lines.push_back(p);}
void operator<<(const Segment_2& p){segs.push_back(p);}
};
1

Другие решения

Других решений пока нет …