Delaunay_triangulation_3をTriangulationとし、入力点群pを母点として、それらに対応したボロノイ領域の頂点を返すコードのメモ。
incident_cellsではなく、finite_incident_cellsでトラバースしないと、仮想のボロノイ領域まで参照してしまい、思い通りにならない。
vector<vector<Point>> compute_voronoi(vector<Point> p) {
vector<vector<Point>> vor;
Triangulation T;
vector<Vertex_handle> vh;
for (int i = 0; i < p.size();i++) {
vh.push_back(T.insert(p[i]));
}
for (int i = 0; i < p.size(); i++) {
vector<Cell_handle> cells;
//T.incident_cells(vh[i], back_inserter(cells));
T.finite_incident_cells(vh[i], back_inserter(cells));
vector<Point> cell;
for (auto& cit = cells.begin(); cit != cells.end(); cit++) {
auto VP = T.dual(*cit);
cell.push_back(VP);
}
vor.push_back(cell);
}
return vor;
}