2010-01-22 20 views
3

Voici un code:CGAL 3.4: Comment obtenir des coordonnées de vertex finies à partir d'un 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 
} 

De l'manual:

« Les bords ne sont pas explicitement représentés, ils ne sont représentés implicitement par les relations de contiguïté de deux faces Chaque arête a deux représentations implicites.: le bord d'une face f qui est opposée au sommet indexé i, peut être représenté ainsi qu'un bord du voisin (i) de f. "

Cela me va bien ... mais comment obtenir les sommets de fin du bord en utilisant un CT::Finite_edges_iterator dans le code donné ci-dessus?

Mise à jour: J'ai réussi à trouver cette solution:

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

Je cherche toujours une meilleure façon de le faire.

+0

Je pense que la façon dont vous le faites est très bien. – tixxit

Répondre

2

j'ai réussi à trouver cette solution:

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

Je cherche toujours une meilleure façon de le faire.

0

Les arêtes fournissent les indices des sommets sur le visage. La face d'une triangulation n'a que 3 sommets en CGAL. Les bords sont un triplet; (visage, je, j). Vous pouvez get the i-th (either 0, 1, or 2) vertex of a face using the vertex(i) method.. Ainsi, pour obtenir les sommets, utilisez:

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

Merci ... Mais, troisième n'est pas membre de EIT ... c'est Constrained_triangulation_2 ... CGAL 3.4 J'ai mis à jour ma question avec une solution possible. Y a-t-il une meilleure manière de faire cela? –

+0

Hrmm. Vous pouvez essayer d'utiliser le ccw et le cw pour obtenir le 2ème sommet: eit-> first-> vertex (ct.ccw (eit-> second)), mais la façon dont vous l'avez fait semble être une excellente façon de le faire, et probablement mieux. – tixxit

1

j'utiliser quelque chose comme

Triangulation :: Vertex_handle fVertex = eit-> Prénom> vertex (Triangulation :: CCW (eit-> seconde));

Triangulation :: Vertex_handle sVertex = eit-> Prénom> sommet (Triangulation :: cw (eit-> secondes));