4

私はCGALを初めて使用しています。私の質問は非常に簡単だと確信しています。

Delaunay 三角形分割を行うために CGAL を使用しようとしています。球体上に 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 を正しく取得するにはどうすればよいですか??

4

2 に答える 2

6

ここに記載されているように、ファセットはペア (Cell_handle,int) です。整数は、ファセットの反対側のセルのインデックスを示します。したがって、ファセットのポイントへのアクセスは、次のように行うことができます: it->first->vertex( (it->second+k)%4 )->point()k=1->3 を使用します。

球の三角形分割 (つまり、表面三角形分割) に関心がある場合は、無限セルに付随するファセットのみを考慮する必要があることに注意してください。また、凸包を使用すると、この問題が解決されます。このを参照してください。

于 2011-10-31T07:34:26.920 に答える