2012-03-13 11 views
5

Ho un set di punti 2D ciascuno con un ID associato. (ad esempio se i punti sono memorizzati in una matrice, l'ID è l'indice in ogni punto 0, ...., n-1).Triangolazione delaunay CGAL 2D: come ottenere i bordi come coppie di ID dei vertici

Ora creo una triangolazione di Delaunay di questi punti e voglio elencare tutti i bordi finiti. Per ogni spigolo, mi piacerebbe avere gli ID dei punti rappresentati dai corrispondenti 2 vertici. Esempio: se c'è un margine tra il punto 0 e il punto 2, allora (0,2). È possibile?

#include <vector> 
#include <CGAL\Exact_predicates_inexact_constructions_kernel.h> 
#include <CGAL\Delaunay_triangulation_2.h> 

typedef CGAL::Exact_predicates_inexact_constructions_kernel K; 
typedef CGAL::Delaunay_triangulation_2<K> Delaunay; 
typedef K::Point_2 Point; 

void load_points(std::vector<Point>& rPoints) 
{ 
    rPoints.push_back(Point(10,10)); // first point 
    rPoints.push_back(Point(60,10)); // second point 
    rPoints.push_back(Point(30,40)); // third point 
    rPoints.push_back(Point(40,80)); // fourth point 
} 

void main() 
{ 
std::vector<Point> points; 
load_points(points); 

Delaunay dt; 
dt.insert(points.begin(),points.end()); 

for(Delaunay::Finite_edges_iterator it = dt.finite_edges_begin(); it != dt.finite_edges_end(); ++it) 
{ 
    } 
} 

risposta

7

In primo luogo è necessario utilizzare un tipo di vertice con informazioni come in these examples. Quindi un bordo è una coppia che contiene una maniglia per una faccia e l'indice del vertice nella faccia opposta al bordo.

se si dispone di:

Delaunay::Edge e=*it; 

indici che stai cercando sono:

int i1= e.first->vertex((e.second+1)%3)->info(); 
int i2= e.first->vertex((e.second+2)%3)->info(); 
+0

sloriot: molto utile. Grazie. – 911

+0

Così chiaro! grazie. – LoveMeow

Problemi correlati