我需要找到带孔的凹多边形的中轴。我正在使用CGAL。我目前的做法是:
我可以构建SDG,测试边缘应该是直接的,但我很难提取SDG的边缘,或相应的Voronoi图。我应该有几种类型的边缘:点,线和抛物线。
我该怎么做?我甚至走在正确的轨道上吗?
此外,我知道我可以使用提供的方法之一迭代图形的边缘,我理解这会将面和相反的顶点返回到边缘。但是,如何使用它来获得二等分线的端点?
答案 0 :(得分:1)
您可以使用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);}
};