CGAL:帮助从Delaunay Triangulation获取三角形坐标

时间:2011-10-29 10:32:30

标签: triangulation cgal delaunay

我是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?¿

2 个答案:

答案 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());
    ...
}
祝你好运。