八叉树和十六叉树结构

转载 2013年11月24日 13:17:37
(1)三维和四维数据结构的提出。前面介绍的数据结构都是二维的,然而在有些信息系统中,需要有真三维的空间数据结构。例如矿山开采中的地下资源埋藏和采矿巷道的空间分布,如果用二维的坐标体系就根本无法很好表达。此外,矿山空间目标往往随时间不断变化着,这就提出了空间和时间信息系统的问题。
在时间信息系统中不考虑时间,是把时间看作不变的常数,即为当前的时间。而在时间和空间信息系统中,则把时间看作有过去、现在和将来的可变值。这种系统中,空间和时间是不可分割的信息,并起着同样重要的作用。
我们首先用三维来定义空间目标,在同一坐标系统下,用四维数据来定义时间和空间数据。根据这种方案,任何目标都可以由其坐标对({s} ,t)惟一确定。这里{s} ={x,y,z}定义空间数据,而t定义时间数据。对每一个三维坐标数据(x,y,z),必定有而且仅有一个时间t值与之相对应,但反之则不然。
为了表示三维数据和四维数据,较好的数据结构方式是在四叉树基础上发展起来的大义树和十六叉树结构。
(2)八叉树结构及其编码。八叉树结构是从四叉树结构直接发展而来的,其原理就是将空间区域不断地分解为八个同样大小的子区域(即将一个六面的立方体再分解为八个相同大小的小立方体),分解的次数越多,子区域就越小,一直到同一区域的属性单一为止。按从下而上合并的方式来说,就是将研究区空间先按一定的分辨率将三维空间划分为三维栅格网,然后按规定的顺序每次比较8个相邻的栅格单元,如果其属性值相同则合并,否则就记盘。
依次递归运算,直到每个子区域均为单值为止。
八叉树同样可分为常规八叉树和线性八叉树。常规八叉树的结点要记录十个值,即八个指向子结点的指针,一个指向父结点的指针和一个属性值(或标识号)。而线性八叉树则只需要记录叶结点的地址码和属性值。因此,它的主要优点是,一是节省存储空间,因为只需对叶结点编码,节省了大量中间结点的存储。每个结点的指针也免除了,而从根到某一特定结点的方向和路径的信息隐含在定位码之中,定位码数字的个位数显示分辨率的高低或分解程度;其次,线性八叉树可直接寻址,通过其坐标值则能计算出任何输入结点的定位码(称编码),而不必实际建立八叉树,并且定位码本身就是坐标的另一种形式,不必有意去存储坐标值。若需要的话还能从定位码中获取其坐标值(称解码);第三,在操作方面,所产生的定位码容易存储和执行,容易实现集合、相加等组合操作;此外,如果应用任务很大致使在核心存储器中不能容纳所有定位码时,也可以将定位码安排在B树中,以便划分成许多页面,并存储在外围设备中。
图2-29表示一种线性八叉树的生成。通过对八叉树及其编码方案的分析研究,可总结出下列一些自动计算定位码的有用规则:
①给定分辨率n,也即确定了坐标系统的大小。每个坐标轴的取值范围从0到。在图2-29中的分辨率等于3,则三个坐标轴的坐标范围为从0到7。
②每个八叉树点的编码采用的形式如图2_30所示。每个位置上的qi是(0,1,2,…,7)八个数之一,qi的个数取决于分辨率n。在本例中定位码以三个八进制数表示。
③对整个编码按Z字形的方式进行,其方向取决于如何选择第一、二、三和第四维坐标。
基于第一个规则,坐标(X,Y,Z)已知的八叉树点的编码可用下式表示:
式中:系数ci、di和ei(i=0, …,n-2,n-l)的取值为0或1,可通过比较方程式两边的值来确定。
根据第二、三规则的观点,qi值可由下式确定:
                        (2-1)
取n=3,(X,Y,Z)=(6,3,1)为例,则八叉树编码的表达式为
                         
因此
                         
qi的值为 
                         
因此,按给定的八义树节点所产生的定位码为136。
线性八叉树的地址码有八进制和十进制数两种。十进制地址码亦称Morton码。由于Morton码是自然数码,所以可以将二维数组转化成以Morton码为下标的一维数组。线性八叉树的自然数编码的表达式为
               (2-3)

式中:c0,d1,cn-1,d0,dn-1 和e0,e1,en-1分别是行号和列号二进制化后由低位到高位的权。
当图形、图像恢复时,可由N码经逆变换为下列十进制的行、列号:
其中
当k<n-l时;
当k=n-l时,
其中
当k<n-l时,;
当k=n-l时,
其中
当k<n-l时,;
当k=n-l时,
(3)线性叉树的自然数编码及其收敛性分析。基于线性四叉树和线性八叉树的数据结构,可以推想,对于一个四维的时空目标也可以用线性十六叉树来表示。因此推求线性2m叉树的自然数编码的通式,不仅有理论意义,还便于指导实际应用。
根据以上的推导,可以得到线性叉树自然数编码的一般公式为
其中
                  
式中:m为研究目标的维数;
Iik是m维欧氏空间中第i个坐标轴的十进制坐标。
我们知道图像分辨率n决定了栅格坐标大小,在式(2_7)中给出了二进制化的最大取余迭代次数就是图像分辨率大小。而在同一图像分辨率下,m维欧氏空间中不同的坐标取余迭代收敛次数为
表明取余迭代速度是由坐标Ii0决定的,因此线性叉树自然数编码的实用公式为
                   
其中                
m维图像恢复时,进行逆变换:
                 
其中                
当k<n-1 时,;
当k=n-1时,NK=N0
同样,为了提高逆变换式(2-10)取余迭代收敛速度,应选确定k的取余迭代初始值,即满足条件
因此实用时,式(2-10)中k的初值用式(2-12)取代。
利用式(2-10)和式(2-12)进行图像恢复的逆变换时,取余迭代是否在k=0处收敛呢?很明显要满足
                       MOD(Tk,2)≡0    (2-13)
恒成立,于是有mk+i-l≤-l。即
  
只有当i=m时,k≤-l。因此在取余迭代式(2-10)中,Ii值一定会在k=0处收敛。作为上述公式应用的一个例子,图2-31为由一维时间和三维空间复合形成的四维时空数据结构的线性十六叉树自然数编码图。
按上述公式可将四维时空坐标系中每个超体素的时空位置转换为线性24叉树自然数编码,如位于(1,3,0,1)处的超体素的编码N=43。这样十进制的自然数编码N自然地对应一维数组下标,四维图像超体素合并运算时,依次将数组中24个相邻元素进行合并操作。四维图像恢复时,利用上述逆变换为4个坐标值。
线性十六叉树构成的数学模型可扩展如下:
(1) 任何十六叉树的坐标可用下式表示:
(2) 定位码的十六位数字qi为
               
举例来说,空间和时间坐标为(X,Y,Z,T)=(3,1,2,1),则利用上面的公式得到地址码为5B,即如图2-31中后面那个立方体中灰色立方单元。而前面那个灰色单元的坐标为(2,1,0,0),它的地址码为12。

八叉树Octree

维基释义:八叉树(Octree)是一种用于描述三维空间的树状数据结构。八叉树的每个节点表示一个正方体的体积元素,每个节点有八个子节点,这八个子节点所表示的体积元素加在一起就等于父节点的体积。一般中心点...
  • Augusdi
  • Augusdi
  • 2014-06-30 16:41:08
  • 13806

基于线性八叉树的快速直接体绘制算法

  • 2013年06月13日 17:13
  • 239KB
  • 下载

八叉树 Octree

原文:http://blog.csdn.net/timzc/article/details/6060591 (一)基本原理     用八叉树来表示三维形体,并研究在这种表示下的各种操作及应用是...
  • wolf96
  • wolf96
  • 2015-07-06 19:22:34
  • 1419

八叉树算法

Octree的定义是:若不为空树的话,树中任一节点的子节点恰好只会有八个,或 零个,也就是子节点不会有0与8以外的数目。那么,这要用来做什么?想象一个 立方体,我们最少可以切成多少个相同等分的小立...
  • damenhanter
  • damenhanter
  • 2013-10-20 22:54:17
  • 1713

空间八叉树剖分

空间八叉树剖分转载自:http://hi.baidu.com/j_factory/blog/item/8bc1ca182d7f45f6af5133c3.html  空间八叉树算法是一个空间非均匀网格剖...
  • Augusdi
  • Augusdi
  • 2014-06-30 16:49:39
  • 5017

八叉树入门

八叉树入门出 处: 中国游戏开发者[ 2003-06-08 ]作 者:Jaap Suter  目 录  1 引言  2 八叉树的结构  3 创建八叉树  4 八叉树的用途  5 结论  原 文:Int...
  • Augusdi
  • Augusdi
  • 2014-06-30 17:09:31
  • 2270

基于八叉树的网格生成算法剖析

前言  对于网格生成这个主题,之前的网格生成系列的三篇博客文章分别介绍了MC算法,SMC算法以及Cuberille算法三种方法。同时还有一篇介绍网格生成与种子点生长算法高效结合的算法。本篇文章继续这一...
  • Augusdi
  • Augusdi
  • 2014-07-01 09:19:28
  • 14434

四叉树+八叉树

四叉树+八叉树: OcTree+Proximity 3D:     八叉树(octree)是一种用于描述三维空间的树状数据结构。八叉树的每个节点表示一个正方体的体积元素,每个节点有八个子节点,这八...
  • pizi0475
  • pizi0475
  • 2015-04-16 10:25:47
  • 1680

用二叉树实现Trie树

关于Trie树的简介,有点这里就不再罗嗦了,清
  • u010189459
  • u010189459
  • 2014-06-16 23:48:47
  • 817

【数据结构——树】Trie树的两种实现方式:二叉树(左孩子右兄弟)与二十六叉树

输入 输入的第一行为一个正整数n,表示词典的大小,其后n行,每一行一个单词(不保证是英文单词,也有可能是火星文单词哦),单词由不超过10个的小写英文字母组成,可能存在相同的单词,此时应将其视作不...
  • rootken
  • rootken
  • 2015-01-17 23:13:19
  • 1015
收藏助手
不良信息举报
您举报文章:八叉树和十六叉树结构
举报原因:
原因补充:

(最多只允许输入30个字)