2013-12-20 64 views
0

我希望能夠提取三角形邊界上每個邊的頂點。問題是我首先通過在域中定義約束和漏洞來定義約束三角剖分。然後我需要通過網格細化算法來細化網格。除了一個小故障,這一切都很好,很棒。我必須知道哪個邊界位於哪個邊界上。讓我給你一個例子:給定4條多義線定義域,並且是三角剖分中的約束條件(比如頂部,底部,左側和右側多段線),我必須告訴側邊在哪條多段線上。我已經將每條多段線定義爲std :: vector,可以輕鬆地對段上的點進行探測。像這樣: CDT :: Point pt1; CDT :: Point pt2;CGAL如何判斷三角形是否在邊界

for(const auto& seg : segments) 
{ 
    if(seg.has_on(pt1)) 
    { num++; } 
    if(seg.has_on(pt2)) 
    { num++; } 
    if(num==2){/*success? -> return true*/}    
} 

我知道CGAL :: bounded_side_2功能,遺憾的是在多邊形操作的。我怎麼解決這個問題?

for(CDT::Finite_edges_iterator it = cdt.finite_edges_begin(); 
      it != cdt.finite_edges_end(); ++it) 
{ 
     CDT::Edge e=*it; 
     // how can I tell if an edge is on boundary? 
} 

回答

2

您可以使用約束三角測量中的is_contrained方法。

if (cdt.is_constrained(e)) ... 

如果你能有dandling邊緣,必須先標記域就像下面example並檢查邊緣入射到兩個面具有不同nesting_level

+0

如何才能找到哪個網格細化邊緣在細化之前在哪個約束邊緣上? segment_2 :: has_on是否正確?或者有其他方法? – dodol

+1

我認爲如果你將有限的Delaunay三角剖分包裝到[本課程](http://doc.cgal.org/latest/Triangulation_2/classCGAL_1_1Constrained__triangulation__plus__2.html)中,你將有權訪問這些信息(在約束上添加的要點定義了子約束)。確實是 – sloriot

+0

。現在我不需要問邊是否受到限制,因爲我使用Subconstraint_iterator遍歷約束邊。對於慢速反饋抱歉 – dodol

相關問題