cpp-toolbox  0.0.1
A toolbox library for C++
Loading...
Searching...
No Matches
base_knn.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <type_traits>
5
6#include <cpp-toolbox/cpp-toolbox_export.hpp>
10
11namespace toolbox::pcl
12{
13
15
21template<typename Element, typename Metric>
23{
24 using element_type = Element;
25 using metric_type = Metric;
26 using distance_type = typename Metric::result_type;
27};
28
67template<typename Derived, typename Element, typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
68class CPP_TOOLBOX_EXPORT base_knn_generic_t
69{
70public:
75 using container_type = std::vector<element_type>;
76 using container_ptr = std::shared_ptr<container_type>;
77
83 std::size_t set_input(const container_type& data)
84 {
85 return static_cast<Derived*>(this)->set_input_impl(data);
86 }
87
93 std::size_t set_input(const container_ptr& data)
94 {
95 return static_cast<Derived*>(this)->set_input_impl(data);
96 }
97
104 template<typename T = typename Element::value_type,
105 typename = std::enable_if_t<std::is_same_v<Element, point_t<T>>>>
107 {
108 return set_input(cloud.points);
109 }
110
117 template<typename T = typename Element::value_type,
118 typename = std::enable_if_t<std::is_same_v<Element, point_t<T>>>>
119 std::size_t set_input(const std::shared_ptr<toolbox::types::point_cloud_t<T>>& cloud)
120 {
121 if (!cloud) return 0;
122 return set_input(cloud->points);
123 }
124
129 void set_metric(const metric_type& metric)
130 {
131 static_cast<Derived*>(this)->set_metric_impl(metric);
132 }
133
139 template<typename T = typename Element::value_type>
140 void set_metric(std::shared_ptr<toolbox::metrics::IMetric<T>> metric)
141 {
142 static_cast<Derived*>(this)->set_metric_impl(metric);
143 }
144
150 template<typename T = typename Element::value_type>
151 void set_metric(std::unique_ptr<toolbox::metrics::IMetric<T>> metric)
152 {
153 static_cast<Derived*>(this)->set_metric_impl(std::move(metric));
154 }
155
179 bool kneighbors(const element_type& query,
180 std::size_t num_neighbors,
181 std::vector<std::size_t>& indices,
182 std::vector<distance_type>& distances)
183 {
184 return static_cast<Derived*>(this)->kneighbors_impl(
185 query, num_neighbors, indices, distances);
186 }
187
209 distance_type radius,
210 std::vector<std::size_t>& indices,
211 std::vector<distance_type>& distances)
212 {
213 return static_cast<Derived*>(this)->radius_neighbors_impl(
214 query, radius, indices, distances);
215 }
216
217protected:
220
221public:
226}; // class base_knn_generic_t
227
228} // namespace toolbox::pcl
Definition metric_factory.hpp:23
KNN算法的基类(CRTP模式) / Base class for KNN algorithms (CRTP pattern)
Definition base_knn.hpp:69
base_knn_generic_t(const base_knn_generic_t &)=delete
bool kneighbors(const element_type &query, std::size_t num_neighbors, std::vector< std::size_t > &indices, std::vector< distance_type > &distances)
K近邻搜索 / K-nearest neighbors search.
Definition base_knn.hpp:179
std::size_t set_input(const toolbox::types::point_cloud_t< T > &cloud)
设置点云输入数据(仅当Element为point_t时可用) / Set point cloud input data (only available when Element is point_t)
Definition base_knn.hpp:106
typename traits_type::metric_type metric_type
Definition base_knn.hpp:73
base_knn_generic_t & operator=(const base_knn_generic_t &)=delete
void set_metric(std::shared_ptr< toolbox::metrics::IMetric< T > > metric)
设置度量方式(运行时版本 - shared_ptr) / Set metric (runtime version - shared_ptr)
Definition base_knn.hpp:140
void set_metric(std::unique_ptr< toolbox::metrics::IMetric< T > > metric)
设置度量方式(运行时版本 - unique_ptr) / Set metric (runtime version - unique_ptr)
Definition base_knn.hpp:151
typename traits_type::distance_type distance_type
Definition base_knn.hpp:74
void set_metric(const metric_type &metric)
设置度量方式(编译时版本) / Set metric (compile-time version)
Definition base_knn.hpp:129
base_knn_generic_t & operator=(base_knn_generic_t &&)=delete
base_knn_generic_t(base_knn_generic_t &&)=delete
std::shared_ptr< container_type > container_ptr
Definition base_knn.hpp:76
typename traits_type::element_type element_type
Definition base_knn.hpp:72
bool radius_neighbors(const element_type &query, distance_type radius, std::vector< std::size_t > &indices, std::vector< distance_type > &distances)
半径近邻搜索 / Radius neighbors search
Definition base_knn.hpp:208
std::size_t set_input(const std::shared_ptr< toolbox::types::point_cloud_t< T > > &cloud)
设置点云输入数据(智能指针版本) / Set point cloud input data (smart pointer version)
Definition base_knn.hpp:119
std::size_t set_input(const container_type &data)
设置输入数据 / Set input data
Definition base_knn.hpp:83
std::vector< element_type > container_type
Definition base_knn.hpp:75
std::size_t set_input(const container_ptr &data)
设置输入数据(智能指针版本) / Set input data (smart pointer version)
Definition base_knn.hpp:93
包含点和相关数据的点云类 / A point cloud class containing points and associated data
Definition point.hpp:268
std::vector< point_t< T > > points
点坐标 / Point coordinates
Definition point.hpp:270
Definition base_correspondence_generator.hpp:18
KNN算法的特征定义 / KNN algorithm traits definition.
Definition base_knn.hpp:23
typename Metric::result_type distance_type
距离类型 / Distance type
Definition base_knn.hpp:26
Element element_type
元素类型 / Element type
Definition base_knn.hpp:24
Metric metric_type
度量类型 / Metric type
Definition base_knn.hpp:25
3D点/向量模板类 / A 3D point/vector template class
Definition point.hpp:48