我是CGAL的新手,我相信我的问题非常简单。
我正在尝试使用CGAL进行一些Delaunay三角测量。我有一个在球体上有N个3D点的网格,我想用这些点作为三角形的顶点对球体进行三角测量。我只需要获得结果三角形的顶点列表:
id_triangle1 vertex_1 vertex_2 vertex_3 id_triangle2 vertex_1 vertex_2 vertex_3 .......
我已经这样做了三角测量:
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());
我遇到的问题是我不知道如何得到结果三角测量。我想出了如何获得face_iterator,但我不知道该怎么做:
Delaunay::Finite_faces_iterator it;
for (it = dt.finite_faces_begin(); it != dt.finite_faces_end(); it++){
std::cout << dt.triangle(it) << std::endl;
}
我不确定迭代三角形是否正确,如果是...... 一个三角形=面对??¿,我的意思是,每个迭代器位置只有一个三角形? 如何正确获取每个三角形的x,y和z?¿
答案 0 :(得分:5)
如记录here所示,Facet是一对(Cell_handle,int)。整数表示与facet相对的单元格的索引。因此,可以像这样进行访问方面的点:it->first->vertex( (it->second+k)%4 )->point()
,其中k = 1-> 3。
请注意,如果您对球体的三角测量(即表面三角测量)感兴趣,则需要仅考虑入射到无限单元的面。 此外,使用凸壳解决了这个问题,请参阅此example。
答案 1 :(得分:0)
如果你google for finite_faces_begin(),你可以获得很多CGAL提示。
faces迭代器将允许您以不同方式获取基础数据。这是一个很好的例子,叫做&#34; tesis&#34;使用&#39; vertex()&#39;功能
http://mati-repa-repo.googlecode.com/svn/trunk/tesis/impl/HODTs/
for( Finite_faces_iterator fi = dt.finite_faces_begin(); fi != dt.finite_faces_end(); fi++){
Point2 point0 = Point2(fi->vertex(0)->point().hx(), fi->vertex(0)->point().hy());
Point2 point1 = Point2(fi->vertex(1)->point().hx(), fi->vertex(1)->point().hy());
Point2 point2 = Point2(fi->vertex(2)->point().hx(), fi->vertex(2)->point().hy());
...
}
祝你好运。