gtsam_points
Loading...
Searching...
No Matches
kdtree.hpp
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2021 Kenji Koide (k.koide@aist.go.jp)
3
4#pragma once
5
6#include <memory>
7#include <iostream>
8#include <Eigen/Core>
9
10#include <gtsam_points/ann/nearest_neighbor_search.hpp>
11
12namespace gtsam_points {
13
14template <typename PointCloud, typename Projection>
15struct UnsafeKdTree;
16struct AxisAlignedProjection;
17
22public:
23 using Index = UnsafeKdTree<KdTree, AxisAlignedProjection>;
24
25 KdTree(const Eigen::Vector4d* points, int num_points, int build_num_threads = 1);
26 virtual ~KdTree() override;
27
34 virtual size_t knn_search(
35 const double* pt,
36 size_t k,
37 size_t* k_indices,
38 double* k_sq_dists,
39 double max_sq_dist = std::numeric_limits<double>::max()) const override;
40
52 virtual size_t radius_search(
53 const double* pt,
54 double radius,
55 std::vector<size_t>& indices,
56 std::vector<double>& sq_dists,
57 int max_num_neighbors = std::numeric_limits<int>::max()) const override;
58
59public:
60 const int num_points;
61 const Eigen::Vector4d* points;
62
63 double search_eps;
64
65 std::unique_ptr<Index> index;
66};
67
68} // namespace gtsam_points
KdTree-based nearest neighbor search.
Definition kdtree.hpp:21
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.
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
Find k nearest neighbors.
Nearest neighbor search interface.
Definition nearest_neighbor_search.hpp:16