关于二叉树、四叉树和八叉树

树(tree)是一种常用的数据结构。它是由一个或多个节点组成的有限集T,它有一个特定节点,成为根节点。其余节点分为m(m大于等于0)个互不相交的有限集T0,T1,...,Tm-1,其中每个集合又是一棵树,称T0~Tm-1为根节点的子树。树结构的类型有二叉树(Binary Space Partitioning Trees)、四叉树、八叉树(octree)、十六叉树等。为了适应各种应用问题的需要,多种不同的存储结构也相应地建立起来。

二叉树是一种表示最简单、运算最简便的树形结构。简称BSP树,即为二叉树空间细分。BSP树通过一细分平面将一空间细分为两个区域。树的叶节点表示空间体元,分枝节点表示细分空间的分割平面。对于虚拟场景的实时绘制而言,BSP树的最大优点是可以构造较好的均衡树,尤其是当场景中对象不均衡分布时,从而减少树的深度。这样实时渲染时,可以快速遍历整个场景,加速场景绘制。然而,对于场景中的动态对象渲染需要花费昂贵的树结构更新代价,每一次动态对象渲染时将其加入到静态树结构中绘制,然后重新移去动态对象。

四叉树作为数据处理表达技术的一个方法已经有很多年了,特别是地形渲染引擎都能利用他很有效的作为剔出机制,四叉树被描述通过对应每个父节点传递四个子节点,在一个地形渲染上下文里,根节点将会表达为这个围绕地形的正方形区域集,自节点表示为"左上","右上","左下"和"右下"象限,这些象限由根节点组成并且每一个都是由四个字节点递归的定义.

八叉树结构(图4-39)就是将空间区域不断地分解为八个同样大小的子区域(即将一个六面的立方体再分解为八个相同大小的小立方体),分解的次数越多,子区域就越小,一直到同—区域的属性单一为止。

按从下而上合并的方式来说,就是将研究区空间先按—定的分辨率将三维空间划分为三维栅格网,然后按规定的顺序每次比较3个相邻的栅格单元,如果其属性值相同则合并,否则就记盘。依次递归运算,直到每个子区域均为单值为止。八叉树主要用来解决GIS中的三维问题。

八叉树可分为常规八叉树和线性八叉树。常规八叉树的结点要记录十个位,即八个指向子结点的指针,—个指向父结点的指针和一个属性值(或标识号)。而线性八叉树则只需要记录叶结点的地址码和属性值。它有两个优点:一、节省存储空间;二、线性八叉树可直接寻址,通过其坐标值则能计算出任何输入结点的定位码(称编码),而不必实际建立八叉树,并且定位码本身就是坐标的另—种形式,不必有意去存储坐标值;三、在操作方面,所产生的定位码容易存储和执行,容易实现象集合、相加等组合操作。

八叉树采用类似于二维的四叉树结构对场景进行空间细分,整个三维空间被细分成小的立方体。这些立方体通过采用递归表的方式组织成层次结构,以便对每个区域所包含的对象进行细分直到满足所需的分辨率为止。场景的八叉树层次结构在预处理阶段生成,实时绘制时依据视点变化对树结构进行自适应的修改。树结构也可用于对场景进行视域体裁减计算和其它可见性计算以及虚拟场景的碰撞检测等。对场景进行八叉树体细分能很好的支持建筑场景空间几何剖分。图表示使用八叉树细分地形模型,其中黄色线条表示空间划分,绿色代表地形模型。如图(a)所示,以地形模型中相隔最远的两顶点之间距离作为外包立方体的边长,使用一次剖分时,将立方体平均分成上下、前后、左右共8快,使用二次剖分时,对包含有地形模型的每一小块接着分割,将产生细分方格,依此类推,使用三次剖分时,会将整个空间分隔成更加细致的方格,如图(b)所示。

其实,八叉树是四叉树在高度空间的一种扩展,它们之间有很多的相似点。四叉树是以一种"空间曲面"的形式来描述3D地形,而八叉树是以一种"空间立方体"的形式来描述3D地形。从地形外貌的复杂度来说,八叉树更胜一筹,但代价却是效率的降低。从某种程度来说,八叉树可以完全实现室内和室外两种地形,并且可以将二者融合起来,对于这一点,国外的研究者已经实现了。但因为着眼于效率的考虑,还是觉得应该根据游戏场景的不同类型而选择各自不同的管理方式并连接起来。

总的来说,二叉树大概是上世纪80年代出现的,当时由于还没有出现支持"Z_buffer"的硬件,为了避免重绘,人们用二叉树来实现室内场景各种多边形的深度顺序排列上,以实现"从后往前绘制"的作用。这些年,由于支持"Z_buffer"的硬件的出现,二叉树的这一作用逐渐降低;现在,它的主要用途是用于"可见性判断"及"碰撞检测"上,而对于室内场景的管理上,它只是非常适合"静态室内场景"的渲染管理上,对于动态的场景,它还是有很多缺陷的,因为每当动态地在室内场景添加或删除一个多边形的时候,二叉树就要重新构造一次,这在效率上是很大的降低。为什么要重新构造一次呢?我想可能是因为二叉树的分割面是以多边形为基准的缘故吧,从这一点上说,八叉树是个不错的选择,因为八叉树的分割面并不以多边形为基准面。

为知笔记

转载于:https://www.cnblogs.com/jack-wangchong/p/6541383.html

【转载】关于二叉树、四叉树和八叉树 - Chinamming的专栏 - 博客频道 - CSDN.NET相关推荐

  1. 【Tools】怎样转载博客到CSDN博客(很实用)

    下面方法对于文字和图片是正常的,但是每张图片会出现两次,另外,对于Latex公式和代码是会混乱的,需要自己对混乱的部分重新整理.. 1.在想转载的博客页面,鼠标右键,选择Inspect检查,或者直接F ...

  2. 程序员小抄 (转载自酷壳,一个专注技术的博客)

    你是否会经常忘记一些CSS中的函数名或是一些属性名,那个时候,你一定觉得,如果手边有一个"小抄"(Cheat Sheet)就好了.当然,这个"小抄"不是给你作弊 ...

  3. [转载]Qt之解决中文乱码_vortex_新浪博客

    博主很给力 原文地址:Qt之解决中文乱码作者:一去二三里 在项目开发的过程中,中文乱码是比较常见的问题!用Qt开发也不例外,之前在做界面的时候没有发现什么问题,但是在程序移植的过程中问题出现了! 在W ...

  4. python读取data_转载 “ 理想国@Data ”重拾Python(5):数据读取 博客

    本文主要对Python如何读取数据进行总结梳理,涵盖从文本文件,尤其是excel文件(用于离线数据探索分析),以及结构化数据库(以Mysql为例)中读取数据等内容. 约定: import numpy ...

  5. [转载]STL之priority_queue_彭世瑜_新浪博客

    原文地址:STL之priority_queue作者:李大宝 STL之优先队列 原本以为priority_queue很简单,才知道原来懂的只是最简单的形式. 头文件:#include<queue& ...

  6. [转载]FAE及其发展前景_史蒂文森sun_新浪博客

    原文地址:FAE及其发展前景作者:Robby FAE Field Application Engineer(现场应用工程师) ,其他的说法就叫技术支持   主要工作内容: 1.提供产品技术支持,包括咨 ...

  7. 推荐一款自己的软件作品[豆约翰博客备份专家],新浪博客,QQ空间,CSDN,cnblogs博客备份,导出CHM,PDF(转载)...

    推荐一款自己的软件作品[豆约翰博客备份专 豆约翰博客备份专家是完全免费,功能强大的博客备份工具,博客电子书(PDF,CHM和TXT)生成工具,博文离线浏览工具,软件界面美观大方,支持多个主流博客网站( ...

  8. CSDN如何转载别人的博客

    <转> 前言   对于喜欢逛CSDN的人来说,看别人的博客确实能够对自己有不小的提高,有时候看到特别好的博客想转载下载,但是不能一个字一个字的敲了,这时候我们就想快速转载别人的博客,把别人 ...

  9. 【转载】windows 如何一键关闭所有进程程序 --- (博客园 - 木人子韦)

    [转载]Windows 如何一键关闭所有进程程序 --- (博客园 - 木人子韦) 1.桌面创建一个快捷方式,点击鼠标右键跳出的菜单=> 新建=>快捷方式 01 在"请键入对象的 ...

最新文章

  1. oracle数据库 gbk,oracle 数据库编码转换(转GBK) | 学步园
  2. 中国女博士的「水淹食堂」大法:单目视频完美重建3D场景,画面毫无违和感...
  3. 最小公倍数 最大公约数
  4. 进入保护模式(四)设置一些公用的方法
  5. 处理selinux方法
  6. PHP调用tushare,python调用tushare获取沪股通、深股通成份股数据
  7. 软件工程中的所有内聚类型【吐血整理,附带排名!】
  8. spring mvc学习(11):eclipse的环境maven项目创建前期工作
  9. websocket一直无法链接_.NET Core 实现基于Websocket的在线聊天室
  10. SpringBoot2.1.5(34)--- SpringBoot 实例
  11. 基于Session的认证方式_实现授权功能_Spring Security OAuth2.0认证授权---springcloud工作笔记118
  12. Android九宫格闪烁,js实现九宫格点击按钮随机三个格子闪烁,发生错误
  13. linux下查看mysql安装的版本
  14. scala 基础 ——关键字与特殊符号
  15. wiki.openwrt.org无法打开的解决办法
  16. vue.draggable的中文文档链接
  17. Swift游戏实战-跑酷熊猫 02 创建熊猫类
  18. 迅睿cms模板,迅睿cms模板建站,迅睿模板主题开发
  19. 彻底干掉霸占我任务栏的2345好压的垃圾广告搜索以及天气预告工具栏
  20. linux 彻底删除oracle,Linux下完美卸载Oracle

热门文章

  1. 144Hz和60Hz显示器差别很大吗?
  2. 领导想提拔别人,让我让位置,我该怎么办?
  3. 什么是大平层?大平层比别墅好吗?
  4. 《贫穷的本质》这本书让我找到为什么不少人缺钱和赚钱少的原因
  5. 苹果XR信号差,可否要求苹果公司召回?
  6. 计算机网络————P1 概念、组成、功能和分类
  7. SQL Server Profiler概述
  8. Power BI Desktop中的分解树
  9. SQL Server登录名,用户和安全标识符(SID)
  10. sql 查询超时已过期_监视来自SQL Server代理作业的查询超时过期消息