I'm new with CGAL, i'm sure my question is very simple.
I am trying to use CGAL to do some Delaunay triangulation. I have a grid with N 3D points over a sphere and I want to triangulate the sphere using those points as the vertex of the triangles. I just need to get a list of the vertex of the resulting triangles like that:
id_triangle1 vertex_1 vertex_2 vertex_3 id_triangle2 vertex_1 vertex_2 vertex_3 .......
I have done that to perform the triangulation:
std::vector<Point> P;
for(i=0;i<NSPOINTS;i++)
P.push_back(Point(GRID[i].x,GRID[i].y,GRID[i].z));
// building Delaunay triangulation.
Delaunay dt(P.begin(), P.end());
The problem I have is that I have no idea how to get the resulting triangulation. I figured out how to get the face_iterator, but I don't know what to do from there:
Delaunay::Finite_faces_iterator it;
for (it = dt.finite_faces_begin(); it != dt.finite_faces_end(); it++){
std::cout << dt.triangle(it) << std::endl;
}
I'm not sure if that is correct to iterate over the triangles, and if it is... a triangle = face ??¿ , i mean , each iterator position have only a triangle¿? How can I get correctly the x,y and z of each triangle¿?¿
As documented here, a Facet is a pair (Cell_handle,int). The integer indicate the index of the cell opposite to the facet. So getting access to the points of the facet can be done like this: it->first->vertex( (it->second+k)%4 )->point()
with k=1->3.
Note that if you are interested in a triangulation of a sphere (i.e. a surface triangulation), you need to consider only facets incident to an infinite cell. Also, using the convex-hull solves this problem, see this example.