(九)OcTree教程一--OcTree原理介绍
来源:互联网 发布:淘宝卖家电话在哪 编辑:程序博客网 时间:2024/06/05 14:13
OcTree原理介绍
八叉树是一种用于描述三维空间的树状数据结构。八叉树的每个节点表示一个正方体的体积元素,每个节点有八个子节点,将八个子节点所表示的体积元素加在一起就等于父节点的体积。八叉树是四叉树在三维空间上的扩展,二维上我们有四个象限,而三维上,我们有8个卦限。八叉树主要用于空间划分和最近邻搜索。
八叉树建立过程
伪代码:
(1). 设定最大递归深度
(2). 找出场景的最大尺寸,并以此尺寸建立第一个立方体
(3). 依序将单位元元素丢入能被包含且没有子节点的立方体
(4). 若没有达到最大递归深度,就进行细分八等份,再将该立方体所装的单位元元素全部分担给八个子立方体
(5). 若发现子立方体所分配到的单位元元素数量不为零且跟父立方体是一样的,则该子立方体停止细分,因为跟据空间分割理论,细分的空间所得到的分配必定较少,若是一样数目,则再怎么切数目还是一样,会造成无穷切割的情形。
(6). 重复3,直到达到最大递归深度。
八叉树和k-d树比较
八叉树算法的算法实现简单,但大数据量点云数据下,其使用比较困难的是最小粒度(叶节点)的确定,粒度较大时,有的节点数据量可能仍比较大,后续查询效率仍比较低,反之,粒度较小,八叉树的深度增加,需要的内存空间也比较大(每个非叶子节点需要八个指针),效率也降低。而等分的划分依据,使得在数据重心有偏斜的情况下,受划分深度限制,其效率不是太高。
k-d在邻域查找上比较有优势,但在大数据量的情况下,若划分粒度较小时,建树的开销也较大,但比八叉树灵活些。在小数据量的情况下,其搜索效率比较高,但在数据量增大的情况下,其效率会有一定的下降,一般是线性上升的规律。
也有将八叉树和k-d树结合起来的应用,应用八叉树进行大粒度的划分和查找,而后使用k-d树进行细分,效率会有一定的提升,但其搜索效率变化也与数据量的变化有一个线性关系。
- (九)OcTree教程一--OcTree原理介绍
- OCTREE 教程
- OCTREE 教程
- Octree
- Octree
- octree
- Octree
- Octree
- Octree
- 八叉树Octree原理
- (十)OcTree教程二--OcTree在PCL中的应用-空间划分和近邻搜索
- (十二)OcTree教程四--OcTree在PCL中的应用-点云压缩
- 叉树Octree原理及简单实现(C++版)
- (十一)OcTree教程三--OcTree在PCL中的应用-无序点云在空间中的动态检测
- OCTREE 简介
- OCTREE详解
- 八叉树 Octree
- 八叉树 Octree
- Android 绘图机制与处理技巧-1
- [iOS]Objective-C中字符串数据类型与基础数据类型的相互转换
- 从硬件获得内存布局--e820
- Scr888 Recommend iBET iPHONE 7 Red Lucky Draw
- java 递归全排列 (数组,容器两种实现)
- (九)OcTree教程一--OcTree原理介绍
- 51nod 1333 无聊的数学家们
- ZOJ-3261(并查集续路径压缩,灵活应用)
- [树的直径] BZOJ 1999 [Noip2007]Core树网的核
- Linux进程IPC浅析[进程间通信概述与管道]
- C++中string erase函数的使用
- 史上最简单侧滑菜单,0耦合,支持任意ViewGroup。一步集成侧滑(删除)菜单,高仿QQ、IOS。~
- Treeset保证元素唯一且排序的代码示例
- c++primer学习笔记-----3.1命名空间的using 声明