2011-07-01 86 views
6

我有一組多邊形,我想測試它和一個段的交集。 我檢查了手冊,但找不到匹配的功能。 點,線,段,三角形,平面之間的交集確實存在。 多邊形之間的交集也在那裏。 我的問題是:CGAL:段與多邊形之間的交點?

  1. 有沒有這樣的功能?
  2. 如果不是,是否意味着我需要將多邊形分解爲多個分段並在這些分段之間進行交集? (我不願意這樣做的原因是,我認爲CGAL實際上可能會用這種方式來完成多邊形之間的相交。怎麼會有這樣一個函數來交叉線和多邊形?)還是還有其他更好的方法如何做到這一點?

回答

7

最簡單的方法是創建一個可能包含多個多邊形的Polygon_set_2對象。要測試外部多邊形與此集合的交集,只需應用do_intersect方法。

例如:

typedef CGAL::Polygon_set_2<Kernel, std::vector<Kernel::Point_2>> Polygon_set_2; 
Polygon_set_2 ps; 
Polygon_2  poly; 
Polygon_2  line; // line is a polygon defined by 2 points 

ps.insert(poly); 
bool intersect = ps.do_intersect(line); 

更多polygon_set_2:

我希望這是明確的, 基里爾·

+0

哦,我沒有意識到一個多邊形只能包含兩個點。似乎有效! –

+1

是否 ps.insert(poly); ps.insert(line); ? – sabbir

+0

我收到此錯誤: 說明:多邊形邊界自我重疊。 – sabbir