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

R 树动态空间索引 更多...

#include <r_tree.h>

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

Public 成员函数

void build (const std::vector< T > &items) override
 批量构建 R 树 更多...
 
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
 清空 R 树 更多...
 
size_t size () const override
 对象数量 更多...
 
size_t node_count () const
 R 树节点总数 更多...
 
- Public 成员函数 继承自 vde::spatial::SpatialIndex< T >
virtual ~SpatialIndex ()=default
 

详细描述

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

R 树动态空间索引

R 树是一种高度平衡的树,所有叶节点位于同一层。 插入时选择包围盒扩展最小的子节点;溢出时分裂节点。 支持增量插入和删除,适合数据集频繁变化的场景。

构建: O(n log n)(逐项插入) 范围查询: O(log n + k) KNN 查询: O(log n + k log k) 插入: O(log n) 删除: O(log n)

模板参数
T被索引的空间对象类型
注解
R 树在动态场景(如编辑中的几何体)中比 BVH 更合适。 BVH 查询效率更高但构建后不易修改。
RTree<Point3D> rtree;
rtree.build(points);
rtree.insert(new_point); // 增量插入
auto nearby = rtree.query_range(search_box);
参见
SpatialIndex, BVH, RStarTree

在文件 r_tree.h68 行定义.

成员函数说明

◆ build()

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

批量构建 R 树

清空已有数据,将所有 items 逐个插入。 构建复杂度 O(n log n)。

参数
items待索引的对象数组

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

◆ clear()

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

清空 R 树

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

◆ insert()

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

增量插入对象

从根节点出发选择包围盒扩展最小的子节点递归插入。 节点溢出时分裂。复杂度 O(log n)。

参数
item待插入的空间对象

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

◆ node_count()

template<typename T >
size_t vde::spatial::RTree< T >::node_count ( ) const
inline

R 树节点总数

返回
内部节点 + 叶节点数量

在文件 r_tree.h150 行定义.

◆ query_knn()

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

K 近邻查询

使用优先队列按 MBR 最小距离剪枝。

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

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

◆ query_range()

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

范围查询

从根节点遍历,仅访问与 range 相交的子节点。 复杂度 O(log n + k)。

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

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

◆ query_ray()

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

射线查询

从根节点递归,遍历被射线穿过的子节点。

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

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

◆ remove()

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

删除对象

定位到所在叶节点后移除。 复杂度 O(log n)。

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

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

◆ size()

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

对象数量

返回
当前索引的对象总数

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

在文件 r_tree.h143 行定义.


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