Wednesday, April 28, 2010

ドロネー図の点の参照

CGALは,creationの時点で,グラフを作ります.
ですので,宣言して,insertで点を入れていくだけでグラフが形成されます.
問題はどうやってそのグラフを参照するかだったんですが,cellかvertexのiterator経由でハンドルつかんで,点を順に参照していけばよいです.
ドロネー図をFinite_cells_iterator経由で,四面体の4頂点を自作四面体クラス(Tetrahedron)に格納していく例を挙げます.
自分用メモみたいな感じですが,以下コードです.


Delaunay dt;
for(int i=0; i < _siteN; i++){
dt.insert(Point(_site[i][0], _site[i][1], _site[i][2]));
}
//std::cout << dt.number_of_finite_cells() << "\n";
tetrahedraN = dt.number_of_finite_cells();
tetrahedra = new Tetrahedron*[tetrahedraN];
for(int i=0; i < tetrahedraN; i++){
tetrahedra[i] = new Tetrahedron();
}

int cnt = 0;
for(Delaunay::Finite_cells_iterator fci = dt.finite_cells_begin(); fci != dt.finite_cells_end(); fci++){
for(int j=0;j < 4;j++){
Vertex_handle v = fci->vertex(j);
tetrahedra[cnt]->set(j, 0, v->point().x());
tetrahedra[cnt]->set(j, 1, v->point().y());
tetrahedra[cnt]->set(j, 2, v->point().z());
}
cnt++;
}



siteは母点です.tetrahedraのset関数は,インデックスと次元,位置を格納します.

No comments: