大きな 3D ポイント データセット内の隣接ノードの正確な数を見つけようとしています。目標は、データセットの各ポイントが、指定された半径の領域内のすべての可能な近隣を取得することです。FLANNは、ブルートフォース検索と比較して、より低い次元のデータが正確な隣人を取得できることを保証しますが、そうではないようです。隣人はさらなる計算に不可欠であるため、正確な数が必要です。半径を少し大きくしてテストしましたが、これが問題ではないようです。FLANNまたは他のC++ライブラリを使用して正確な隣人を計算する方法を知っている人はいますか?
コード:
// All nodes to be tested for inclusion in support domain.
flann::Matrix<double> query_nodes = flann::Matrix<double>(&nodes_pos[0].x, nodes_pos.size(), 3);
// Set default search parameters
flann::SearchParams search_parameters = flann::SearchParams();
search_parameters.checks = -1;
search_parameters.sorted = false;
search_parameters.use_heap = flann::FLANN_True;
flann::KDTreeSingleIndexParams index_parameters = flann::KDTreeSingleIndexParams();
flann::KDTreeSingleIndex<flann::L2_3D<double> > index(query_nodes, index_parameters);
index.buildIndex();
//FLANN uses L2 for radius search.
double l2_radius = (this->support_layer_*grid.spacing)*(this->support_layer_*grid.spacing);
double extension = l2_radius/10.;
l2_radius+= extension;
index.radiusSearch(query_nodes, indices, dists, l2_radius, search_parameters);