2012-03-13 6 views
5

Tengo un conjunto de puntos 2D cada uno con un id. Asociado. (por ejemplo, si los puntos se almacenan en una matriz, la identificación es el índice en cada punto 0, ...., n-1).Triangulación CGAL 2D Delaunay: Cómo obtener bordes como pares de id. De vértice

Ahora creo una triangulación Delaunay de estos puntos y quiero enumerar todos los bordes finitos. Para cada borde, me gustaría tener los identificadores de los puntos representados por los 2 vértices correspondientes. Ejemplo: si hay un borde entre el punto 0 y el punto 2, entonces (0,2). es posible?

#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) 
{ 
    } 
} 

Respuesta

7

En primer lugar es necesario utilizar un tipo de vértice con la información, en these examples. Luego, un borde es un par que contiene un mango en una cara, así como el índice del vértice en la cara que está opuesto al borde.

si tiene:

Delaunay::Edge e=*it; 

índices que usted está buscando son:

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

sloriot: muy útil. Gracias. – 911

+0

¡Tan claro! gracias. – LoveMeow

Cuestiones relacionadas