Krotos Modules 3
Loading...
Searching...
No Matches
KDTree.cpp
Go to the documentation of this file.
1namespace krotos
2{
3
5{
6 //
7}
8
10{
11 //
12}
13
14void KDTree::addDatasetItem(float x, float y, float z)
15{
16 std::vector<float> pt = {x, y, z};
17 dataset.push_back(pt);
18}
19
20void KDTree::buildIndex() { kdTree = std::make_unique<myKDTree>(3, dataset, 10); }
21
22std::size_t KDTree::knnQuery(float x, float y, float z)
23{
24 assert(kdTree);
25
26 const std::size_t num_results = 1;
27 std::vector<float> query_pt = {x, y, z};
28
29 // do a knn search
30 std::vector<std::size_t> ret_indexes(num_results);
31 std::vector<float> out_dists_sqr(num_results);
32
33 nanoflann::KNNResultSet<float> resultSet(num_results);
34
35 resultSet.init(&ret_indexes[0], &out_dists_sqr[0]);
36 kdTree->index->findNeighbors(resultSet, &query_pt[0]);
37 return ret_indexes[0];
38}
39
40std::vector<std::size_t> KDTree::knnQuery(float x, float y, float z, std::size_t k)
41{
42 assert(kdTree);
43
44 std::vector<float> query_pt = {x, y, z};
45
46 // do a knn search
47 std::vector<std::size_t> ret_indexes(k);
48 std::vector<float> out_dists_sqr(k);
49
51
52 resultSet.init(&ret_indexes[0], &out_dists_sqr[0]);
53 kdTree->index->findNeighbors(resultSet, &query_pt[0]);
54
55 return ret_indexes;
56}
57
58std::vector<std::size_t> KDTree::radiusSearch(float x, float y, float z, float search_radius)
59{
60 assert(kdTree);
61
62 std::vector<float> query_pt = {x, y, z};
63
64 std::vector<nanoflann::ResultItem<std::size_t, float>> matches;
65
67 params.sorted = false;
68
69 const std::size_t nMatches = kdTree->index->radiusSearch(&query_pt[0], search_radius, matches, params);
70
71 std::vector<std::size_t> ret_indexes(nMatches);
72 for (std::size_t i = 0; i < nMatches; i++)
73 ret_indexes[i] = matches[i].first;
74 return ret_indexes;
75}
76
77// void KDTree::removePoint(std::size_t idx) {
78// kdTree->index->removePoint(idx);
79//}
80
81} // namespace krotos
std::size_t knnQuery(float x, float y, float z)
Definition KDTree.cpp:22
std::vector< std::size_t > radiusSearch(float x, float y, float z, float search_radius)
Definition KDTree.cpp:58
void buildIndex()
Definition KDTree.cpp:20
void addDatasetItem(float x, float y, float z=0.f)
Definition KDTree.cpp:14
KDTree()
Definition KDTree.cpp:4
~KDTree()
Definition KDTree.cpp:9
myVectors dataset
Definition KDTree.h:45
std::unique_ptr< myKDTree > kdTree
Definition KDTree.h:46
Definition nanoflann.hpp:148
void init(IndexType *indices_, DistanceType *dists_)
Definition nanoflann.hpp:163
Definition AirAbsorptionFilter.cpp:2
Definition nanoflann.hpp:631
bool sorted
Definition nanoflann.hpp:635