cpp-toolbox  0.0.1
A toolbox library for C++
Loading...
Searching...
No Matches
toolbox::pcl::base_knn_generic_t< Derived, Element, Metric > Class Template Reference

KNN算法的基类(CRTP模式) / Base class for KNN algorithms (CRTP pattern) More...

#include <base_knn.hpp>

Inheritance diagram for toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >:

Public Types

using traits_type = knn_traits< Element, Metric >
 
using element_type = typename traits_type::element_type
 
using metric_type = typename traits_type::metric_type
 
using distance_type = typename traits_type::distance_type
 
using container_type = std::vector< element_type >
 
using container_ptr = std::shared_ptr< container_type >
 

Public Member Functions

std::size_t set_input (const container_type &data)
 设置输入数据 / Set input data
 
std::size_t set_input (const container_ptr &data)
 设置输入数据(智能指针版本) / Set input data (smart pointer version)
 
template<typename T = typename Element::value_type, typename = std::enable_if_t<std::is_same_v<Element, point_t<T>>>>
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)
 
template<typename T = typename Element::value_type, typename = std::enable_if_t<std::is_same_v<Element, point_t<T>>>>
std::size_t set_input (const std::shared_ptr< toolbox::types::point_cloud_t< T > > &cloud)
 设置点云输入数据(智能指针版本) / Set point cloud input data (smart pointer version)
 
void set_metric (const metric_type &metric)
 设置度量方式(编译时版本) / Set metric (compile-time version)
 
template<typename T = typename Element::value_type>
void set_metric (std::shared_ptr< toolbox::metrics::IMetric< T > > metric)
 设置度量方式(运行时版本 - shared_ptr) / Set metric (runtime version - shared_ptr)
 
template<typename T = typename Element::value_type>
void set_metric (std::unique_ptr< toolbox::metrics::IMetric< T > > metric)
 设置度量方式(运行时版本 - unique_ptr) / Set metric (runtime version - unique_ptr)
 
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.
 
bool radius_neighbors (const element_type &query, distance_type radius, std::vector< std::size_t > &indices, std::vector< distance_type > &distances)
 半径近邻搜索 / Radius neighbors search
 
 base_knn_generic_t (const base_knn_generic_t &)=delete
 
base_knn_generic_toperator= (const base_knn_generic_t &)=delete
 
 base_knn_generic_t (base_knn_generic_t &&)=delete
 
base_knn_generic_toperator= (base_knn_generic_t &&)=delete
 

Protected Member Functions

 base_knn_generic_t ()=default
 
 ~base_knn_generic_t ()=default
 

Detailed Description

template<typename Derived, typename Element, typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
class toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >

KNN算法的基类(CRTP模式) / Base class for KNN algorithms (CRTP pattern)

这是一个通用的K近邻搜索算法基类,使用CRTP(Curiously Recurring Template Pattern)实现静态多态。 支持任意元素类型和度量方式。 / This is a generic base class for K-nearest neighbor search algorithms, using CRTP (Curiously Recurring Template Pattern) for static polymorphism. Supports arbitrary element types and metrics.

Template Parameters
Derived派生类类型 / Derived class type
Element元素类型(如point_t<float>) / Element type (e.g., point_t<float>)
Metric度量类型(默认为L2度量) / Metric type (default is L2 metric)
// 使用示例 / Usage example
using MyKNN = bfknn_generic_t<point_t<float>, L2Metric<float>>;
MyKNN knn;
// 设置输入数据 / Set input data
std::vector<point_t<float>> points = {...};
knn.set_input(points);
// K近邻搜索 / K-nearest neighbors search
point_t<float> query = {1.0f, 2.0f, 3.0f};
std::vector<std::size_t> indices;
std::vector<float> distances;
knn.kneighbors(query, 5, indices, distances);
std::size_t set_input(const container_type &data)
设置输入数据 / Set input data
Definition base_knn.hpp:83
暴力K近邻搜索算法的通用实现 / Generic brute-force K-nearest neighbors search implementation
Definition bfknn.hpp:45
3D点/向量模板类 / A 3D point/vector template class
Definition point.hpp:48
// 使用点云数据 / Using point cloud data
point_cloud_t<float> cloud = load_point_cloud();
knn.set_input(cloud); // 自动使用cloud.points / Automatically uses cloud.points
// 半径搜索 / Radius search
float radius = 2.0f;
knn.radius_neighbors(query, radius, indices, distances);

Member Typedef Documentation

◆ container_ptr

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
using toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::container_ptr = std::shared_ptr<container_type>

◆ container_type

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
using toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::container_type = std::vector<element_type>

◆ distance_type

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
using toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::distance_type = typename traits_type::distance_type

◆ element_type

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
using toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::element_type = typename traits_type::element_type

◆ metric_type

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
using toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::metric_type = typename traits_type::metric_type

◆ traits_type

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
using toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::traits_type = knn_traits<Element, Metric>

Constructor & Destructor Documentation

◆ base_knn_generic_t() [1/3]

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::base_knn_generic_t ( )
protecteddefault

◆ ~base_knn_generic_t()

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::~base_knn_generic_t ( )
protecteddefault

◆ base_knn_generic_t() [2/3]

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::base_knn_generic_t ( const base_knn_generic_t< Derived, Element, Metric > &  )
delete

◆ base_knn_generic_t() [3/3]

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::base_knn_generic_t ( base_knn_generic_t< Derived, Element, Metric > &&  )
delete

Member Function Documentation

◆ kneighbors()

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
bool toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::kneighbors ( const element_type query,
std::size_t  num_neighbors,
std::vector< std::size_t > &  indices,
std::vector< distance_type > &  distances 
)
inline

K近邻搜索 / K-nearest neighbors search.

Parameters
query查询点 / Query point
num_neighbors要查找的最近邻数量 / Number of nearest neighbors to find
indices[out] 找到的最近邻索引 / Indices of found nearest neighbors
distances[out] 对应的距离 / Corresponding distances
Returns
是否成功 / Whether successful
// 示例:查找5个最近邻 / Example: Find 5 nearest neighbors
point_t<float> query = {1.0f, 2.0f, 3.0f};
std::vector<std::size_t> indices;
std::vector<float> distances;
if (knn.kneighbors(query, 5, indices, distances)) {
for (size_t i = 0; i < indices.size(); ++i) {
std::cout << "邻居 / Neighbor " << i << ": "
<< "索引 / index = " << indices[i]
<< ", 距离 / distance = " << distances[i] << std::endl;
}
}

◆ operator=() [1/2]

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
base_knn_generic_t & toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::operator= ( base_knn_generic_t< Derived, Element, Metric > &&  )
delete

◆ operator=() [2/2]

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
base_knn_generic_t & toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::operator= ( const base_knn_generic_t< Derived, Element, Metric > &  )
delete

◆ radius_neighbors()

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
bool toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::radius_neighbors ( const element_type query,
distance_type  radius,
std::vector< std::size_t > &  indices,
std::vector< distance_type > &  distances 
)
inline

半径近邻搜索 / Radius neighbors search

Parameters
query查询点 / Query point
radius搜索半径 / Search radius
indices[out] 半径内所有点的索引 / Indices of all points within radius
distances[out] 对应的距离 / Corresponding distances
Returns
是否成功 / Whether successful
// 示例:查找半径2.0内的所有点 / Example: Find all points within radius 2.0
point_t<float> query = {1.0f, 2.0f, 3.0f};
std::vector<std::size_t> indices;
std::vector<float> distances;
if (knn.radius_neighbors(query, 2.0f, indices, distances)) {
std::cout << "找到 / Found " << indices.size()
<< " 个点在半径内 / points within radius" << std::endl;
}

◆ set_input() [1/4]

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
std::size_t toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::set_input ( const container_ptr data)
inline

设置输入数据(智能指针版本) / Set input data (smart pointer version)

Parameters
data输入数据容器的智能指针 / Smart pointer to input data container
Returns
数据点的数量 / Number of data points

◆ set_input() [2/4]

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
std::size_t toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::set_input ( const container_type data)
inline

设置输入数据 / Set input data

Parameters
data输入数据容器 / Input data container
Returns
数据点的数量 / Number of data points

◆ set_input() [3/4]

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
template<typename T = typename Element::value_type, typename = std::enable_if_t<std::is_same_v<Element, point_t<T>>>>
std::size_t toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::set_input ( const std::shared_ptr< toolbox::types::point_cloud_t< T > > &  cloud)
inline

设置点云输入数据(智能指针版本) / Set point cloud input data (smart pointer version)

Template Parameters
T点云数据类型 / Point cloud data type
Parameters
cloud输入点云的智能指针 / Smart pointer to input point cloud
Returns
点的数量 / Number of points

◆ set_input() [4/4]

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
template<typename T = typename Element::value_type, typename = std::enable_if_t<std::is_same_v<Element, point_t<T>>>>
std::size_t toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::set_input ( const toolbox::types::point_cloud_t< T > &  cloud)
inline

设置点云输入数据(仅当Element为point_t时可用) / Set point cloud input data (only available when Element is point_t)

Template Parameters
T点云数据类型 / Point cloud data type
Parameters
cloud输入点云 / Input point cloud
Returns
点的数量 / Number of points

◆ set_metric() [1/3]

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
void toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::set_metric ( const metric_type metric)
inline

设置度量方式(编译时版本) / Set metric (compile-time version)

Parameters
metric度量对象 / Metric object

◆ set_metric() [2/3]

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
template<typename T = typename Element::value_type>
void toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::set_metric ( std::shared_ptr< toolbox::metrics::IMetric< T > >  metric)
inline

设置度量方式(运行时版本 - shared_ptr) / Set metric (runtime version - shared_ptr)

Template Parameters
T数据类型 / Data type
Parameters
metric度量接口的智能指针 / Smart pointer to metric interface

◆ set_metric() [3/3]

template<typename Derived , typename Element , typename Metric = toolbox::metrics::L2Metric<typename Element::value_type>>
template<typename T = typename Element::value_type>
void toolbox::pcl::base_knn_generic_t< Derived, Element, Metric >::set_metric ( std::unique_ptr< toolbox::metrics::IMetric< T > >  metric)
inline

设置度量方式(运行时版本 - unique_ptr) / Set metric (runtime version - unique_ptr)

Template Parameters
T数据类型 / Data type
Parameters
metric度量接口的独占指针 / Unique pointer to metric interface

The documentation for this class was generated from the following file: