2010-01-22 23 views
3

下面是一些代碼:CGAL 3.4:如何從Finite_edges_iterator獲取末端座標?

struct K : CGAL::Exact_predicates_inexact_constructions_kernel {}; 

typedef CGAL::Triangulation_vertex_base_2<K>    Vb; 
typedef CGAL::Constrained_triangulation_face_base_2<K>  Fb; 
typedef CGAL::Triangulation_data_structure_2<Vb,Fb>  TDS; 
typedef CGAL::Exact_predicates_tag       Itag; 
typedef CGAL::Constrained_triangulation_2<K, TDS, Itag> CT; 
typedef CT::Point           Point; 

for (CT::Finite_edges_iterator eit = ct.finite_edges_begin(); 
    eit != ct.finite_edges_end(); ++eit){ 
    // TODO: list vertex co-ordinates here 
} 

manual

「邊緣沒有明確表示,他們只是含蓄地通過兩個面的鄰接關係來表示每個邊有兩個隱含的陳述:可以將與索引爲i的頂點相對的臉部f的邊緣以及f的鄰居(i)的邊緣表示爲「。

這對我來說很好......但是如何在上面給出的代碼中使用CT::Finite_edges_iterator得到邊緣的頂點?

更新: 我設法想出了這個解決方案:

Segment s = ct.segment(eit); 
const Point& p1 = s.point(0); 
const Point& p2 = s.point(1); 

我仍然在尋找一個更好的方式來做到這一點。

+0

我認爲你這樣做的方式很好。 – tixxit

回答

2

我設法想出了這個解決方案:

Segment s = ct.segment(eit); 
const Point& p1 = s.point(0); 
const Point& p2 = s.point(1); 

我仍然在尋找一個更好的方式來做到這一點。

0

邊緣提供臉部頂點的索引。三角測量的面只有CGAL中的3個頂點。邊緣是三重的; (臉,我,j)。你可以get the i-th (either 0, 1, or 2) vertex of a face using the vertex(i) method.。因此,要獲得頂點,使用方法:

v1 = eit->first->vertex(eit->second); 
v2 = eit->first->vertex(eit->third); 
+0

謝謝......但是,第三不是eit的成員...這是Constrained_triangulation_2 ... CGAL 3.4 我已經用可能的解決方案更新了我的問題。有一個更好的方法嗎? –

+0

Hrmm。你可以嘗試使用ccw和cw來獲得第二個頂點:eit-> first-> vertex(ct.ccw(eit-> second)),但是你做的方式似乎是一個完美的方法,而且可能更好。 – tixxit

1

我已經使用類似

三角:: Vertex_handle fVertex = eit->一階>頂點(三角:: CCW(eit->第二));

Triangulation :: Vertex_handle sVertex = eit-> first-> vertex(Triangulation :: cw(eit-> second));