2016-11-04 20 views
0

我需要找到带孔的凹多边形的中轴。我正在使用CGAL。我目前的做法是:如何从CGAL中的段delaunay图中提取边?

  1. 构建多边形
  2. 提取得到的输出段(平分)
  3. 测试每段发现,如果它是多边形
  4. 内产生的段组会的2D segment delaunay graph形成多边形的中轴

我可以构建SDG,并且测试边缘应该是直线前进的,但我很努力地提取SDG或相应的边缘克Voronoi图。应该有我期望的几种类型的边:点,线和抛物线。

我该怎么做?我是否在正确的轨道上?

另外我知道我可以使用提供的方法之一遍历图的边,我知道这会返回面和相对的顶点到边。但是,我怎么用这个来得到一条平分线的终点呢?

回答

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);} 
}; 
+0

这正是我需要的。谢谢。 – Frank