2016-11-04 46 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