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

八叉树空间索引 更多...

#include <octree.h>

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

Public 成员函数

 Octree (int max_depth=8, int max_items=16)
 构造八叉树 更多...
 
void build (const std::vector< T > &items) override
 批量构建八叉树 更多...
 
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
 清空八叉树 更多...
 
size_t size () const override
 当前索引中的对象数量 更多...
 
- Public 成员函数 继承自 vde::spatial::SpatialIndex< T >
virtual ~SpatialIndex ()=default
 

详细描述

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

八叉树空间索引

将三维空间递归划分为 8 个等大的子立方体区域。 每个节点维护自身包围盒与所含对象列表。 当节点中对象数超过 max_items 且未达到最大深度时自动剖分。

构建: O(n) 逐项插入 范围查询: O(8^d + k),d 为最大深度,k 为结果数 KNN 查询: O(8^d + k log k) 射线查询: O(8^d + k)

模板参数
T被索引的空间对象类型
注解
适用于体积数据、粒子系统、空间哈希等场景。 对非均匀分布的数据(如细长三角网格),BVH 通常更优。
Octree<Point3D> octree(8, 16 // max_depth, max_items);
octree.build(points);
auto neighbors = octree.query_knn(query_point, 5);
参见
SpatialIndex, BVH, KDTree

在文件 octree.h51 行定义.

构造及析构函数说明

◆ Octree()

template<typename T >
vde::spatial::Octree< T >::Octree ( int  max_depth = 8,
int  max_items = 16 
)
explicit

构造八叉树

参数
max_depth最大递归深度(默认 8,对应 256³ 分辨率)
max_items节点剖分前可容纳的最大对象数(默认 16)

成员函数说明

◆ build()

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

批量构建八叉树

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

参数
items待索引的对象数组

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

◆ clear()

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

清空八叉树

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

◆ insert()

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

增量插入对象

从根节点递归,到达容纳它的最深层节点。 若节点超出 max_items 且未达 max_depth,自动剖分。

参数
item待插入的空间对象

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

◆ query_knn()

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

K 近邻查询

使用优先队列按距离剪枝遍历八叉树节点。

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

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

◆ query_range()

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

范围查询

从根节点递归,只访问与 range 相交的子节点。

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

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

◆ query_ray()

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

射线查询

遍历被射线穿过的八叉树节点,收集其中相交对象。

参数
ray查询射线
返回
按命中顺序排列的相交对象列表

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

◆ remove()

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

删除对象

参数
item待删除的空间对象
返回
删除成功返回 true;对象不存在返回 false

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

◆ size()

template<typename T >
size_t vde::spatial::Octree< T >::size ( ) const
overridevirtual

当前索引中的对象数量

返回
对象总数

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


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