ViewDesignEngine  3.1.0
高性能 CAD 计算几何引擎
vde::spatial::KDTree< T > 模板类 参考

k-d 树空间索引 更多...

#include <kd_tree.h>

类 vde::spatial::KDTree< T > 继承关系图:
vde::spatial::KDTree< T > 的协作图:

Public 成员函数

void build (const std::vector< T > &items) override
 批量构建 k-d 树 更多...
 
void insert (const T &item) override
 插入单个对象 更多...
 
bool remove (const T &item) override
 删除对象 更多...
 
std::vector< T > query_range (const AABB3D &range) const override
 范围查询 更多...
 
std::vector< T > query_knn (const Point3D &point, size_t k) const override
 K 近邻查询 更多...
 
std::vector< T > query_ray (const Ray3Dd &ray) const override
 射线查询 更多...
 
void clear () override
 清空 k-d 树 更多...
 
size_t size () const override
 对象数量 更多...
 
- Public 成员函数 继承自 vde::spatial::SpatialIndex< T >
virtual ~SpatialIndex ()=default
 

详细描述

template<typename T>
class vde::spatial::KDTree< T >

k-d 树空间索引

在每一层选择一个坐标轴,以该轴上中位数为分割面, 将空间划分为两个半空间,递归构建二叉树。

构建: O(n log n) 使用中位数分区 范围查询: O(n^(1−1/d) + k),3D 下约为 O(n^(2/3) + k) KNN 查询: O(log n) 平均,最坏 O(n) 射线查询: O(n^(2/3) + k) 近似

模板参数
T被索引的空间对象类型
注解
k-d 树在维度约 2~6 时效率最佳。三维场景中, BVH 对于射线查询更高效,Octree 对于均匀体数据更优。
KDTree<Point3D> kdtree;
kdtree.build(points);
auto nearest = kdtree.query_knn(query_point, 1);
auto in_range = kdtree.query_range(AABB3D::from_minmax(min, max));
参见
SpatialIndex, BVH, Octree

在文件 kd_tree.h48 行定义.

成员函数说明

◆ build()

template<typename T >
void vde::spatial::KDTree< T >::build ( const std::vector< T > &  items)
overridevirtual

批量构建 k-d 树

递归选择分裂轴和分裂点进行自顶向下构建。 构建复杂度 O(n log n)。

参数
items待索引的对象数组

实现了 vde::spatial::SpatialIndex< T >.

◆ clear()

template<typename T >
void vde::spatial::KDTree< T >::clear ( )
overridevirtual

清空 k-d 树

实现了 vde::spatial::SpatialIndex< T >.

◆ insert()

template<typename T >
void vde::spatial::KDTree< T >::insert ( const T &  item)
overridevirtual

插入单个对象

参数
item待插入的空间对象

实现了 vde::spatial::SpatialIndex< T >.

◆ query_knn()

template<typename T >
std::vector<T> vde::spatial::KDTree< T >::query_knn ( const Point3D &  point,
size_t  k 
) const
overridevirtual

K 近邻查询

最优优先搜索:从根节点出发,使用优先队列按距离剪枝。 平均 O(log n),最坏 O(n)。

参数
point查询点
k返回数量
返回
最近的 k 个对象

实现了 vde::spatial::SpatialIndex< T >.

◆ query_range()

template<typename T >
std::vector<T> vde::spatial::KDTree< T >::query_range ( const AABB3D &  range) const
overridevirtual

范围查询

遍历与查询 AABB 相交的 kd 树节点。

参数
range查询包围盒
返回
与 range 相交的对象列表

实现了 vde::spatial::SpatialIndex< T >.

◆ query_ray()

template<typename T >
std::vector<T> vde::spatial::KDTree< T >::query_ray ( const Ray3Dd &  ray) const
overridevirtual

射线查询

参数
ray查询射线
返回
与射线相交的对象列表

实现了 vde::spatial::SpatialIndex< T >.

◆ remove()

template<typename T >
bool vde::spatial::KDTree< T >::remove ( const T &  item)
overridevirtual

删除对象

参数
item待删除的空间对象
返回
删除成功返回 true

实现了 vde::spatial::SpatialIndex< T >.

◆ size()

template<typename T >
size_t vde::spatial::KDTree< T >::size ( ) const
inlineoverridevirtual

对象数量

返回
当前索引的对象总数

实现了 vde::spatial::SpatialIndex< T >.

在文件 kd_tree.h115 行定义.


该类的文档由以下文件生成: