如何从CGAL中的段delaunay图中提取边?

时间:2016-11-04 04:22:55

标签: c++ axis cgal segment delaunay

我需要找到带孔的凹多边形的中轴。我正在使用CGAL。我目前的做法是:

  1. 构建多边形的2D segment delaunay graph
  2. 提取生成的输出段(bisectors)
  3. 测试每个段以查找它是否在多边形内
  4. 生成的线段组将形成多边形的中轴
  5. 我可以构建SDG,测试边缘应该是直接的,但我很难提取SDG的边缘,或相应的Voronoi图。我应该有几种类型的边缘:点,线和抛物线。

    我该怎么做?我甚至走在正确的轨道上吗?

    此外,我知道我可以使用提供的方法之一迭代图形的边缘,我理解这会将面和相反的顶点返回到边缘。但是,如何使用它来获得二等分线的端点?

1 个答案:

答案 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);}
};