Мне нужно найти среднюю ось вогнутого многоугольника с отверстиями. я использую CGAL. Мой текущий подход:
Я могу построить SDG, и тестирование ребер должно быть прямым, но я изо всех сил пытаюсь извлечь ребра из SDG или, скорее, соответствующего графа Вороного. Должно быть несколько типов ребер: точки, линии и параболы.
Как мне это сделать? Я даже на правильном пути?
Также я знаю, что могу перебирать края графа, используя один из предоставленных методов, и я понимаю, что это возвращает грань и противоположную вершину к ребру. Но как я могу использовать это, чтобы получить, скажем, конечные точки пополам линии?
Вы можете использовать функции 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);}
};
Других решений пока нет …