1、基于散列函数与半边数据结构的 TIN 拓 扑重构算法 赵景昌 高菲 刘光伟 白润才 王东 辽宁工程技术大学矿业学院 辽宁工程技术大学力学 与工程学院 摘 要: 在以TIN 为基础模型的数字化露天矿软件中, TIN拓扑重构是等值线追踪、TIN 求交等诸多应用重要的基础算法之一。 顶点聚合与边合并是决定 TIN 拓扑重构效 率的关键, 应用散列函数根据顶点坐标计算顶点散列地址, 并用链地址法辅以 AVL树解决地址冲突, 以O (N) 时间复杂度实现顶点聚合;采用改进的半边数据 结构存储TIN, 在顶点聚合的同时, 通过为每个顶点建立入射半边表, 完成半 边的快速合并。 实验及应用表明, 算法时间复
2、杂度近线性, 能够满足大数据量条 件下TIN 拓扑快速重构的需求。 关键词: 不规则三角网; 拓扑重构; 散列函数; 半边数据结构; 作者简介:赵景昌 (1974-) , 男, 内蒙古赤峰人, 讲师, 博士, 主要研究方向 为数字露天矿、露天开采理论与技术 () ; 作者简介:高菲 (1974-) , 女, 讲师, 博士研究生, 主要研究方向为数字矿山、 边坡稳定与控制; 作者简介:刘光伟 (1981-) , 男, 副教授, 博士, 主要研究方向为数字露天矿、 露天开采理论与技术; 作者简介:白润才 (1961-) , 男, 教授, 博导, 博士, 主要研究方向为数字矿 山、露天开采理论与技术
3、、露天矿边坡稳定与控制; 作者简介:王东 (1978-) , 教授, 博士, 主要研究方向为露天开采理论与技术、 露天矿边坡稳定与控制. 基金:国家自然科学基金资助项目 (51304104, 51104084) TIN topological reconstruction algorithm based on hash function and half-edge data structure Zhao Jingchang Gao Fei Liu Guangwei Bai Runcai Wang Dong School of Mining, Liaoning Technical Univers
4、ity; School of Mechanics Abstract: In the software of digital open pit mine based on TIN model, TIN topology reconstruction is one of the important basic algorithms in the applications of contour tracing, TIN intersection, and so on. Vertex aggregation and edge merging are the keys to determine the
5、efficiency of TIN topology reconstruction. It used hash function to calculate the vertices hash address, and used the chain address method with the AVL tree to solve the conflict of vertex hash address, vertex aggregation was achieved by O ( N) time complexity. It used the improved half-edge data st
6、ructure to store the TIN, merged the half-edges during the vertices were aggregating by establishing the incident half table for each vertex. Experiments and applications show that the time complexity of the algorithm is nearly linear, it can meet the demand of the TIN topology fast reconstruction u
7、nder large data quantity condition. Keyword: triangulated irregular network (TIN) ; topology reconstruction; hash function; half-edge data structure; 0 引言 应用三维地学模拟 (3D geoscience modeling, 3DGM) 技术建立三维矿床地质模 型是数字化露天矿重要的基础工作之一。基于等高线、高程点、地质钻孔、地质断面等地质数据建立的地表与地质层面模型是三维矿床地质模型的重要组成部 分, 可用格网 (grid) 、不规则三角网
8、(triangulated irregular network, TIN) 等进行描述。与格网数据模型相比, TIN模型在某一特定分辨率下能用更少的空 间和时间更精确地表示更加复杂的表面1。因此, 地形与地质层面模型常采用 TIN进行描述。 TIN是一种以三角形作为面元的多边形曲面, TIN模型中点、 边、 面 (三角片) 等 彼此之间并不是孤立的, 存在复杂的拓扑关系。 通过存储某一要素相对于其他要 素的位置关系来建立较为完善的拓扑结构, 可以使TIN具备一定的空间分析功 能, 并避免过于复杂的空间计算, 提高TIN 空间分析和查询的效率2。在基于 TIN模型的各种数字化露天矿应用中, 如等
9、值线追踪、TIN求交、DEM 局部更新 等, 需要根据预先建立的 TIN模型重构顶点、 边、 面 (三角片) 之间的拓扑关系, TIN拓扑重建的效率及正确性是TIN模型在数字化露天矿后续应用中的关键性基 础问题。 TIN拓扑重建的两项主要工作包括顶点聚合, 就是将TIN中所包含的重复顶点唯 一化;重复边的合并, 也就是合并两个端点完全相同的边, 从而可根据 TIN中三 角面片间的公共边建立起三角面片之间的毗邻关系3。顶点聚合效率取决于顶 点查询序列构造及重复顶点查询的效率。张宜生、崔树标等人4,5提出了三轴 分块排序的几何搜索算法用于重复顶点的剔除, 由于在划分小区域排序空间时 增加了复杂度,
10、 且需要二分法查询顶点坐标, 使其只适应小数据量的模型;刘金 义等人3采用平衡二叉树进行重复顶点的快速滤除, 该算法较适合于动态数据, 且其统计性能低于红黑树;戴宁、张必强等人6,7也采用了平衡二叉树 (AVL) 顶点聚合算法, 张必强在顶点归并和边的建立算法中采用点、 边、 面的数据结构, 与半边结构相比具有一定局限性, 戴宁则首先通过新建 V-F结构去除重复顶点, 再用虚AVL树进行快速邻边搜索, 由于需要生成V-F的中间过渡结构, 影响了算 法的整体运算效率;安涛等人8提出了一种基于红黑树的顶点归并算法, 但由 于红黑树在动态创建过程中需要耗费的时间较平衡二叉树高, 使算法整体效率 提高
11、有限;王勇等人利用散列表进行重复点的合并, 但在数据量较小时, 效率比 平衡二叉树略低, 且不能充分利用分配给散列表的内存空间, 但散列表算法具 有O (N) 的时间复杂度, 因此更适合于较大数据量的模型。重复边合并是 TIN 拓扑重构中的另一个关键问题, 主要取决于存储 TIN的数据结构设计。 本文根据数字化露天矿应用需要, 设计并实现了一种 TIN拓扑快速重构算法。 该 算法首先通过散列函数计算顶点散列地址, 并用链地址法辅以AVL树解决顶点 地址“冲突”, 从而实现重复顶点的快速聚合与搜索;在重复边合并时, 采用改 进的半边结构存储 TIN中的顶点、边和三角面片;在顶点聚合的同时, 通过
12、为每 个顶点建立入射半边索引表, 为构成三角面片的每条半边查找伙伴半边, 完成 重复边的合并。本文算法已作为 TIN求交、等值线追踪、DEM局部更新等应用的 基础算法在数字化露天矿软件中成功应用, 实验及实际应用表明, 算法具有较 高的时间效率, 拓扑重构结果正确、可靠, 可广泛应用于大数据量条件下的 TIN 拓扑重构。 1 顶点聚合 顶点聚合算法大致可分为直接法、平衡二叉树法和散列法三类。其中直接法的时 间复杂度为O (N) (N为TIN中的顶点个数) , 平衡二叉树法的时间复杂度为O (N log N) , 而基于散列的方法在理想情况下的时间复杂度为 O (N) , 且散列法尤 其适用于数
13、据量较大的模型。 本文根据算法应用域的数据特点, 选择用散列法来 实现顶点聚合。 1.1 散列函数设计 散列又称哈希 (hash) , 是数据结构中一种高效的数据查找方法。其基本思想是: 在数据的存储位置与关键字 key之间建立对应关系 H (散列函数) , 使每条数据 记录关键字key与唯一的存储位置 index (散列地址) 相对应, 即以关键字 key 为自变量, 通过散列函数 H计算函数值H (key) , 将数据记录存入 H (key) 所 对应的存储位置。查找时根据数据记录关键字用同样的函数 H计算存储位置 index, 然后到相应的存储位置查找所需数据。按照上述思想建立的表称为散
14、列 表, 散列表的一个位置称为一个槽13。构造散列函数的方法有直接定址法、数 字分析法、平方取中法、折叠法、除留余数法、随机数法等。评价散列函数的主 要指标有:a) 函数设计要简单, 以保证计算速度快;b) 最大槽长度和平均槽长 度都尽可能小;c) 平均查找长度尽可能小;d) 散列表的装填因子尽可能大, 即 散列表的利用率高;e) 散列表发生冲突的可能性小13。 结合TIN 中顶点坐标的特征, 并综合考虑评价散列函数的各项指标, 本文算法 中顶点聚合采用的散列函数为 其中:a) 、 为三角片顶点坐标 (X, Y, Z) 的系数, 、的取值 直接影响散列函数的性能 等人14通过大量实验研究认为
15、=3, =5, =7较合理;b) C为比例系数, 一般尽量使计算机所能表达的整型数的字长范围 都被利用, 若计算机 CPU为32 位, 散列表的最大长度可达 2-1。为充分利用有 效的存储空间, 并防止溢出和提高装填因子值, C值一般可通过如下步骤确定 14: (a) 计算三角形顶点的最大坐标 Xmax、 Ymax、 Zmax, 则max=Xmax+Ymax+Zmax; (b) C=minC1, C2, 其中C1max2-1, C2=2-2; (c) T为散列表的长度, 一般是 计算机所能表达的整型数的范围, 其值在 (0, 2) 。若散列表的长度为 1 024, 则T=1 023, k=10
16、。 1.2“冲突”处理 均匀的散列函数可以减少“冲突”, 但通常“冲突”都不可避免, 因此, 如何 处理“冲突”是决定散列表性能的另一个重要因素。 常用的“冲突”处理方法有 开放定址法、再哈希法、链地址法和公共溢出区法四种13。本文采用链地址法 处理顶点散列地址“冲突”, 并辅以AVL树对存储于散列表同一个槽内的顶点 进行了动态排序处理, 使顶点平均查找效率提高近 30%。 2 TIN数据结构 2.1 TIN 存储的数据结构及其特点 TIN的存储不但要存储几何信息, 而且要存储拓扑信息, 即既要存储 TIN中点、 边、面 (三角面片) 在空间直角坐标系中的位置和大小的信息, 又要存储 TIN
17、中点、边、面 (三角面片) 之间的邻接关系。可满足这种存储要求的数据结构有 基于顶点表示的数据结构、基于三角面片表示的数据结构、基于边表示的数据结 构三种。 基于顶点表示的数据结构由顶点 ID、顶点坐标及顶点邻接关系表构成。这种数 据结构最大特点是所需存储空间小、编辑方便;但由于三角片及邻接关系需要实 时生成, TIN 检索效率较低。 基于三角面片表示的数据结构主要由顶点三维坐标、 三角面片片及邻接三角面片 三个表构成。其最大特点是顶点检索效率较高;但需要的存储空间较大, 且对顶 点、边和三角片进行编辑时较不方便15。 基于边表示的数据结构有翼边结构 (winged-edge structur
18、e) 、四边结构 (quad-edge structure) 、半边结构 (half-edge structure) 、辐射边结构 (radial-edge structure) 等。 1) 翼边结构16翼边结构是 1975年由美国斯坦福大学 Baumgart作为多面体的 表示模式而被提出来的。 如图 1所示, 它是基于边表示的数据结构, 它用指针记 录了每一边的两个邻面 (即左外环和右外环) 、两个顶点、两侧各自相邻的两个 邻边 (即左上边、左下边、右上边和右下边) , 用这一数据结构表示多面体模型 是完备的, 但它不能表示带有精确曲面边界的实体。在翼边结构中, 顶点、边、 面 (三角片)
19、之间的拓扑关系可以通过推理求得。 2) 四边结构17四边结构由 Guibas等人在 1985年提出, 将每一条边分解成四 个Quad-edge, 如图2所示, 不论是在对偶图上还是原始图上它都是一个对称的 结构。 这种数据结构最大的特点就是几何与拓扑数据都存储在每一条有向边中, 在操 作时仅仅改变每一条有向边起点几何信息以及逆时针绕起点旋转的下一条边的 拓扑信息就可以快速地建立起整个表面模型, 同时可以方便地对模型中同一起 点的所有边以及逆时针环绕某一三角片的所有边进行遍历, 但由于点的拓扑信 息不足, 使得对于点的搜索产生了一定的困难。 3) 半边结构18,19半边结构是Eastman在翼边
20、结构的基础上改进而来, 其核 心思想是将每条完整边拆分成两条逆向的有向半边 (half-edge) 。TIN中每个 三角面片由三条首尾相连的有向半边组成, 两个相邻的三角面片一定存在一对 重合的、方向相反的半边, 称之为伙伴半边, 两个伙伴半边构成一条整边。每条 半边属于某个具体的三角形, 每个三角形有三条半边, 在三角形中三条半边可 以按逆时针 (或顺时针) 排列。每条半边包括半边顶点 (通常为终点) 、该半边 所在三角形的下一条邻接半边以及该半边的伙伴半边三个成员。 如图3 (a) 所示TIN, 用半边数据结构表示如图 3 (b) 所示。 经典半边结构中顶点、边 (半边) 、面 (三角面片
21、) 等数据对象的定义如图 4 所示。 4) 辐射边结构20辐射边结构是Weiler在 1986年提出主要用来表示非正则形 体的一种数据结构。本文讨论的 TIN均属于正则形体, 因此不考虑辐射边结构。 2.2 数据结构选择与设计 在上述的几种数据结构中, 半边结构可以使 TIN中三角面片之间的邻接关系更 加容易表示, 且顶点查询效率高, 点、边、面的编辑也较为方便, 因此本文选择 半边结构来存储TIN, 并根据应用需要对其进行了改进。图 5所示即为本文改进 后的半边结构中顶点、边 (半边) 、三角面片的定义。 3 TIN拓扑重构 TIN拓扑重构的两个主要任务分别为顶点聚合与重复边合并。顶点聚合就
22、是将 TIN中每条边或每个三角面片所包含的重复顶点唯一化;重复边的合并, 根据本 文采用的改进的半边结构, 就是将两个端点完全相同的半边设置成伙伴半边, 从而建立起“边边”“边面 (三角面片) ”之间的邻接关系。 本文算法首先通过散列函数计算顶点的散列地址, 当顶点散列地址有“冲突” 时, 用链地址法结合 AVL树进行顶点聚合, 在顶点聚合的同时, 通过为每个顶 点建立一个入射半边索引表完成重复边的合并, 重建TIN拓扑结构。 基于散列与半边结构的 TIN拓扑重构步骤如下21: a) 如图 6所示, 读取 TIN中的一个三角面片 Fi; b) 应用本文 1.1节中式 (1) 分别计算三角面片三
23、个顶点 V1、 V2、 V3的散列地址。 如果在散列表中与各顶点散列地址对应的槽链表非空, 则判断当前顶点与该地 址槽链表中的顶点是否重合。 若重合, 将重合顶点的 ID值赋给当前顶点;若不重 合, 将当前顶点插入到槽链表中, 并给当前顶点ID赋值num+1 (num为TIN顶点 集合中的不重合顶点数) 。 c) 图6中, 三角面片Fi的半边He1包含顶点V1、 V2, 且V1、 V2都存在重合顶点, 因 此需要找出与He1端点相同但方向相反的伙伴半边, 对半边He1进行合并。 d) 对He1进行合并, 只需以半边端点ID是否相等为条件, 在以V1为终点的半边 表中查找He1的伙伴半边即可。图
24、 6所示的 TIN模型中, 以V1为终点的半边包括 H4、H5、H6、H7四条半边, 根据确定伙伴半边的条件可知 H4为He1的伙伴半边。 e) 对以相关顶点为终点的半边表进行更新。如图 6所示, 将半边H4从以V1为终 点的半边表中删除 (每条半边至多存在一条伙伴半边) , 同时把半边 He3插入到 以V1为终点的半边表中, 半边 He2插入到以 V3为终点的半边表中。 f) 将当前三角面片 Fi的三条半边He1、He2、He3插入到TIN的半边集合中。 按照步骤a) f) 遍历 TIN中所有三角面片, 在顶点聚合与半边合并的同时, 建 立起“边边”“边面 (三角面片) ”之间的邻接关系,
25、实现TIN 的拓扑重 构。 4 实验分析与算法应用 4.1 实验分析 本文算法基于Visual Studio.NET 平台用C#语言实现, 并与AVL树算法6、红 黑树算法8进行了对比分析。测试平台为 Windows 7中文旗舰版, IntelCorei7-2720QM CPU 2.20GHz, 4 GB 内存。由于本文算法需要在 TIN数据 读入的同时进行拓扑重建, 而三轴分块排序算法需要首先读入 TIN数据以确定 TIN中顶点坐标的分布范围, 以便沿X、Y、Z轴方向对顶点坐标进行分块, 也就 是说三轴分块算法数据读入与拓扑重建是分两步来完成的, 不能满足本文算法 需求, 所以本文未将三轴分
26、块算法列为对比算法。 表1所示为应用本文算法与 AVL树、 红黑树算法对图 7所示TIN模型进行拓扑重 构的时间效率。 从表1实验结果可知, 本文提出的TIN拓扑重构算法时间效率明显高于AVL树与 红黑树算法。尽管理论上红黑树在某些方面比 AVL树更为优秀:效率更高、统计 性能更好, 但随着数据规模的增加, 红黑树在保持树的平衡时需要耗费大量时 间, 从而抵消了其相对于 AVL树的性能优势。 因此, 本文表1统计数据中红黑树 算法效率低于AVL树并不意外。 图8为三种算法在不同数据规模条件下 TIN 拓扑重构效率对比。 图8 表明, 由于 本文顶点聚合采用的散列函数法时间复杂度为 O (N)
27、, 而AVL树与红黑树均为 O (N log N) , 所以随着 TIN数据规模的增长, 本文算法的时间复杂度增长速率明 显低于另外两种算法, 更适合于大数据量条件下应用。 4.2 算法应用 TIN求交、等值线追踪、DEM局部更新等是数字化露天矿软件中建立矿床地质模 型、 进行模拟开采设计等应用的核心算法, 而 TIN拓扑重构则是这些核心算法的 重要基础算法。 TIN求交计算时, 为了建立TIN的空间索引, 必须首先建立TIN拓扑, 然后再将 TIN中的三角面片映射到各空间格网索引单元;基于TIN追踪等值线, 也需要首 先建立TIN拓扑以确定等值线的追踪路径;DEM 局部更新则需要根据 TIN
28、拓扑来 确定更新边界。关于 TIN求交、基于TIN追踪等值线, 在文献21, 22中有详细 介绍, 在此不再赘述。 图9所示是用图9 (b) 所示排土场DEM更新图9 (a) 地形局部DEM时, 应用TIN 拓扑重构算法确定更新边界 (图9 (c) 所示的蓝色线) , 并在两个更新边界间 重建TIN (图9 (d) 所示) , 最终实现两个 TIN 无缝缝合的更新过程 (图9 (e) 所示为缝合后的三维线框图, 图9 (f) 是地形 DEM局部更新后的三维渲染图) 。 图9 (a) 中黄色线是采用 TIN相交算法所得的图 9 (a) 地形DEM与图 9 (b) 排 土场DEM 的交线, 图 9
29、 (c) 蓝色线所示部分是采用本文拓扑重构算法确定的地 形DEM 被更新部分的扩展边界23, 较图9 (a) 黄色交线所示范围大 (见电子 版) 。关于扩展边界的定义参见文献23。 5 结束语 TIN拓扑重构是数字化露天矿软件重要的基础算法之一, 顶点聚合与重复边合 并是实现TIN拓扑快速重构的关键。 本文提出的 TIN拓扑重构算法, 通过散列函 数计算顶点散列地址, 用链地址法结合AVL 树解决顶点散列地址“冲突”, 并 采用改进的半边结构存储 TIN中的顶点、 半边与三角面片, 在顶点聚合的同时完 成半边合并。实验及实际应用表明, 本文算法的 TIN拓扑重构结果正确、可靠, 时间效率高,
30、且随数据规模增加耗时增长不显著, 对于由近30万个三角片构成 的TIN 模型, 拓扑重构时间仅 0.53 s, 能够满足较大规模数据量条件下 TIN拓 扑快速重构的应用需求。 参考文献 1汤国安, 刘学军, 闾国年.数字高程模型及地学分析的原理与方法M.北京: 科学出版社, 2006:109-110. 2吴立新, 史文中.地理信息系统原理与算法M.北京:科学出版社, 2003:45-51. 3刘金义, 侯宝明.STL格式实体的快速拓扑重建J.工程图学学报, 2003, 24 (4) :34-39. 4张宜生, 崔树标.STL面片邻接拓扑关系重构及其应用J.计算机应用与软 件, 2001, 18
31、 (3) :47-50. 5崔树标, 张宜生, 梁书云, 等.STL面片中冗余顶点的快速滤除算法及其应 用J.中国机械工程, 2001, 12 (2) :173-175. 6戴宁, 廖文和, 陈春美.STL 数据快速拓扑重建关键算法J.计算机辅助设 计与图形学学报, 2005, 17 (1) :2447-2451. 7张必强, 邢渊, 阮雪榆.面向网格简化的 STL拓扑信息快速重建算法J.上 海交通大学学报, 2004, 38 (1) :39-42. 8安涛, 戴宁, 廖文和, 等.基于红黑树的 STL数据快速拓扑重建算法J.机 械科学与技术, 2008, 27 (8) :1031-1034.
32、 9王勇, 潘懋.一种基于散列函数的三角面片拓扑快速建立算法J.计算机工 程与应用, 2001, 37 (17) :15-16, 31. 10成学文, 李德群, 周华民, 等.基于哈希表的 STL面片冗余顶点快速滤除算 法J.华中科技大学学报, 2004, 32 (6) :69-71. 11赵歆波, 张定华, 熊光彩, 等.基于散列的 STL拓扑信息重建方法J.机械 科学与技术, 2002, 21 (5) :827-832. 12潘胜玲, 刘学军, 黄雄, 等.基于Hash函数的TIN拓扑关系重建J.地理与 地理信息科学, 2006, 22 (2) :21-24, 29. 13严蔚敏, 吴伟民
33、.数据结构 (C语言版) M.北京:清华大学出版社, 1996:251-258. 15王家耀.空间信息系统原理M.北京:科学出版社, 2001:163-165. 16Baumgart B G.A polyhedron representation for computer visionC/Proc of National Computer Conference and Exposition.New York:ACM Press, 1975:589-596. 17Guibas L, Stolfi J.Primitives for the manipulation of general subdi
34、visions and the computation of Voronoi diagramsJ.ACM Trans on Graphics, 1985, 4 (2) :75-123. 18Eastman C M, Weiler K J.Geometric modeling using the Euler operatorsC/Proc of the 1st Annual Conference on Computer Graphics in CAD/CAM Systems.1979:248-259. 19王永会, 周磊.基于半边数据结构的逐点插入 Delaunay三角剖分算法J. 沈阳建筑大学
35、学报:自然科学版, 2008, 24 (6) :1103-1108. 20Weiler K.Edge-based data structures for solid modeling in curved-surface environmentsJ.IEEE Computer Graphics and Applications, 1985, 5 (1) :21-40. 21赵景昌, 白润才, 刘光伟, 等.一种基于 TIN的等值线快速生成算法J.计 算机工程与应用, 2014, 50 (24) :10-15. 22赵景昌, 白润才, 刘光伟, 等.基于空间索引与碰撞检测的 TIN 求交算法 J.计算机工程, 2014, 40 (12) :296-301. 23隋心, 徐爱功, 宋伟东.露天矿精细 DEM 模型的建立及更新方法J.测绘科 学, 2013, 38 (3) :148-150.