gtsam_points
Loading...
Searching...
No Matches
kdtreex.hpp
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2025 Kenji Koide (k.koide@aist.go.jp)
3
4#pragma once
5
6#include <memory>
7#include <Eigen/Core>
8#include <gtsam_points/ann/nearest_neighbor_search.hpp>
9
10// forward declaration
11namespace nanoflann {
12
13template <class T, class DataSource, typename _DistanceType>
14class L2_Simple_Adaptor;
15
16template <typename Distance, class DatasetAdaptor, int DIM, typename IndexType>
17class KDTreeSingleIndexAdaptor;
18
19} // namespace nanoflann
20
21namespace gtsam_points {
22
26template <int D = -1>
28public:
30
34 KdTreeX(const Eigen::Matrix<double, D, 1>* points, int num_points);
35 virtual ~KdTreeX() override;
36
37 int dim() const { return D != -1 ? D : points[0].size(); }
38 inline size_t kdtree_get_point_count() const { return num_points; }
39 inline double kdtree_get_pt(const size_t idx, const size_t dim) const { return points[idx][dim]; }
40
41 template <class BBox>
42 bool kdtree_get_bbox(BBox&) const {
43 return false;
44 }
45
46 virtual size_t knn_search(
47 const double* pt,
48 size_t k,
49 size_t* k_indices,
50 double* k_sq_dists,
51 double max_sq_dist = std::numeric_limits<double>::max()) const override;
52
53 virtual size_t radius_search(
54 const double* pt,
55 double radius,
56 std::vector<size_t>& indices,
57 std::vector<double>& sq_dists,
58 int max_num_neighbors = std::numeric_limits<int>::max()) const override;
59
60public:
61 const int num_points;
62 const Eigen::Matrix<double, D, 1>* points;
63
64 double search_eps;
65 std::unique_ptr<Index> index;
66};
67
68} // namespace gtsam_points
Definition intensity_kdtree.hpp:17
KdTree with arbitrary dimension.
Definition kdtreex.hpp:27
virtual size_t radius_search(const double *pt, double radius, std::vector< size_t > &indices, std::vector< double > &sq_dists, int max_num_neighbors=std::numeric_limits< int >::max()) const override
Radius search.
Definition kdtreex_impl.hpp:37
virtual size_t knn_search(const double *pt, size_t k, size_t *k_indices, double *k_sq_dists, double max_sq_dist=std::numeric_limits< double >::max()) const override
k-nearest neighbor search
Definition kdtreex_impl.hpp:23
Nearest neighbor search interface.
Definition nearest_neighbor_search.hpp:16