如何从 CGAL 中的段 delaunay 图中提取边?
How do I extract the edges from a segment delaunay graph in CGAL?
我需要找到带孔的凹多边形的中轴。我正在使用 CGAL。我目前的做法是:
- 构建多边形2D segment delaunay graph
- 提取结果输出段(平分线)
- 测试每个线段以确定它是否在多边形内
- 生成的线段集将构成多边形的中轴
我可以构建 SDG,并且测试边缘应该是直截了当的,但我正在努力提取 SDG 的边缘,或者更确切地说是相应的 Voronoi 图。应该有几种类型的边缘:点、线和抛物线。
我该怎么做?我走在正确的轨道上吗?
我也知道我可以使用提供的方法之一遍历图形的边缘,我理解这个 returns 面和相对于边缘的顶点。但是我如何使用它来获取平分线的端点?
您可以使用函数draw_dual()
or draw_skeleton()。抛物线弧将被分段近似。如果您需要对输出进行更多控制,可以查看该方法的实现。
您可以使用这样的 class 来收集对象:
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);}
};
我需要找到带孔的凹多边形的中轴。我正在使用 CGAL。我目前的做法是:
- 构建多边形2D segment delaunay graph
- 提取结果输出段(平分线)
- 测试每个线段以确定它是否在多边形内
- 生成的线段集将构成多边形的中轴
我可以构建 SDG,并且测试边缘应该是直截了当的,但我正在努力提取 SDG 的边缘,或者更确切地说是相应的 Voronoi 图。应该有几种类型的边缘:点、线和抛物线。
我该怎么做?我走在正确的轨道上吗?
我也知道我可以使用提供的方法之一遍历图形的边缘,我理解这个 returns 面和相对于边缘的顶点。但是我如何使用它来获取平分线的端点?
您可以使用函数draw_dual()
or draw_skeleton()。抛物线弧将被分段近似。如果您需要对输出进行更多控制,可以查看该方法的实现。
您可以使用这样的 class 来收集对象:
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);}
};