面拓扑重建过程中,保持网格曲面顶点KD树叶节点层数据存储的开放性,在 网格曲面顶点的数据结构中加入半边结构并记录所有W该顶点为起点的半边信息,提高了 半边面片邻接关系的重建效率; (3) 半边结构与KD树相融合所得网格曲面动态空间索引,在保证曲面拓扑重建效率的 前提下,有效支持网格曲面拓扑邻域信息的快速查询。
[0010] 附图表说明 图1是本发明支持S化数据源的动态空间索引构建方法的程序实现流程图; 图2是S化文件中网格S角面片的分布列表示意图; 图3是相邻S角面片间的冗余顶点示意图; 图4~图9是构建KD树动态索引及近邻查询的示意图; 图10是半边结构的示意图; 图11是KD树与半边结构融合后的动态索引示意图; 图12~17是实施实例中的数字模型图; 图18是KD树建树时间与最近邻查询时间对比图; 图19是顶点数据复本消除所用时间图; 图20是网格曲面拓扑重建所用时间图; 图21是基于数字模型中任一点的1-环域查询示意图; 图22是网格曲面上随机点的1-环域查询时间图。
【具体实施方式】
[0011] 下面结合附图及实例对本发明作进一步说明。
[0012] 图1是本发明支持S化数据源的动态空间索引构建方法的程序实现流程图,可采 用C程序设计语言实现。支持S化数据源的动态空间索引构建方法的程序主要模块包括 动态空间索引KD树的建立、S化文件格式中网格曲面顶点冗余的消除、结合KD树叶结点的 开放性融入半边结构、通过半边结构中对偶半边的匹配实现网格曲面拓扑结构的快速重建 等。
[0013] 图2是S化文件中网格S角面片的分布列表示意图,S化文件格式分为ASCII 与二进制格式两种形式,其中前者具有自解释性,后者存储效率较高且易于解析,但无论是 ASCII还是二进制形式的S化文件,本质上均表达为图2所示的面片列表结构。
[0014] 图3是相邻S角面片间的冗余顶点示意图,在S化数据中存在大量具有邻接关系 的面片,若S角面片/g与马邻接,则数据区段中必定有两个顶点巧日图3中A挪J点) 在马的数据区段中存在复本。网格中=角面片的理想状态是等边=角形,即对于每一个顶 点,理想状态下会被6个=角形共用,因此在文件中会产生5/6的冗余顶点。由此可见,顶 点数据的复本是造成S化文件信息冗余的主要因素。因此在对S化数据进行曲面拓扑重建 之前,通过构建网格顶点集合,W顶点数据的引用代替数据复本,消除S化文件中的数据冗 余,进而提高拓扑重建效率。
[0015] 图4~图8是构建KD树动态索引的示意图,图9是KD树A-近邻查询的示意图。 对于含有n个=角面片数据区段的SIl文件,设网格曲面顶点集合为K其一般构建过程为: 解析STL文件中的S角面片数据区段,所得顶点数据若非冲某个顶点的复本,则将其添加 至冲。由于该一过程需对冲网格顶点数据进行线性遍历,导致順建过程的时间复杂 度为0(n2),效率较低。为解决该一问题,现有方法主要是借助散列表、AW4对、红黑树等一 维动态索引将顶点复本捜索范围缩小为贿]子集,并W该子集进行复本判断。顶点数据的 复本判断本质上是=维空间中的点查询运算,虽然一维索引可辅助改善查询效率,但其数 据结构容易在S维空间中的某一方向发生恶化而使查询效率降低,与一维索引相比,KD树, R树及变体等多维动态空间索引可为空间点查询运算提供更为稳健的支持。本文采用基于 均值聚类的KD树作为网格顶点索引结构,并采用KD树的最近邻查询(1-近邻)算法实 现顶点数据复本的判断,从而将网格顶点集合贿]构建问题转化为构建网格顶点索引化 [001引 图10是半边结构的示意图,半边结构W有向线段的形式记录网格曲面中各个面 片及其邻接面片的信息,对于网格曲面中的任一面片只其顶点为与C),设面片/'为 /的一个邻接面片,则/'与端]邻接边界是端点为a与如勺线段,该线段在两个面片中 体现为方向相反但长度相同的半边a/与知,将a/?(或知)称为知(或<3的的对偶半边,如 图10所示。若在半边数据结构中完备的记录上述信息,则至少需包含4个数据域;(1)半 边终点(或起点)6; (2)下一条半边4; (3)所属面片/; (4)对偶半边4,因此任意一条半 边姑匀可表示为四元组A(e,4,/,与);由于S化文件中缺乏面片的邻接关系,为便于重建该 一关系,可在网格顶点的数据结构中包含该顶点所有的出射半边信息,即;对于半边铺勺终 点所对应的网格顶点6,若/为e的出射半边集合,利用网格曲面顶点KD树的叶节点数据结 构的存储开放性,将/的信息存储于e在KD树中对应的叶节点数据结构中。为基于任一顶 点快速获取所属的半边集合,需在网格顶点的数据结构中至少包含一条W该顶点为起点的 半边一一出射半边,但是该一数据结构仅适用于具有完备曲面拓扑信息的半边结构。由于 S化文件中缺乏面片的邻接关系,为便于重建该一关系,可在网格顶点的数据结构中包含该 顶点所有的出射半边信息,即;对于半边A的终点所对应的网格顶点6,若/为e的出射半 边集合,利用网格曲面顶点KD树的叶节点数据结构的存储开放性,将/的信息存储于e在 KD树中对应的叶节点数据结构中。
[0017] 图11是KD树与半边结构融合后的动态索引示意图,利用STL中存储S角面片的 信息,将=角面片的信息依次转化为半边结构的=条半边,并W半边终点e记录该半边的 信息,通过将半边的终点e表示为KD树中顶点信息的引用实现半边结构与KD树叶结点(顶 点信息)的巧妙融合,完成每个S角面片的拓扑重建,利用半边结构的半边环序和对偶半边 信息实现相邻S角面片的连接,最终完成整个网格曲面的拓扑重建。其中KD树的叶节点记 录了全部的网格曲面顶点数据,同时也记录了该顶点一条出射半边的信息。在半边结构中, 每条半边的终点均为KD树叶节点层存储的网格曲面顶点的引用,最终所得网格曲面顶点 的KD树与半边结构之间的关系如图11示。
[0018] 12~17是实施实例中的数字模型,为验证本文算法的有效性,对6个不同数据规 模的S角网格曲面模型对应的S化文件应用本文算法分别进行顶点数据复本消除、网格曲 面拓扑重建和网格曲面拓扑邻域查询实验并记录所用时间。
[0019] 实施例一:在顶点数据复本消除过程中构建网格顶点的KD树,建树时间复杂度 为如alogn),空间复杂度为Ob),最近邻查询的时间复杂度为功log,其中为网格顶点 的个数。从图18中可W看出,相比于消除顶点数据复本而对所有网格顶点进行最近邻查询 所用的时间,建树时间要小2个数量级,即便是数据量近100万面片的数据文件,建树时间 大约是0.2s,几乎可W忽略。本文算法在顶点数据复本判断过程中采用=维动态空间索引, 利用KD树高效的查询性能对S化文件中所有顶点进行最近邻查询运算,冗余顶点去除的总 时间为建树时间与查询时间的总和。从图19中可W看出,本文采用KD树去除冗余顶点,效 率非常高,在处理90多万面片的数据模型时,仅仅用时11. 96s。
[0020] 实施例二:在曲面拓扑重建过程中,时间复杂度为0(m),其中W为半边集合用片 的半边条数。通过数据复本消除过程中所构建的网格索引,将半边结构中的出射半边信息 加入到索引结构的叶节点中,利用KD树的近邻算法进行对偶半边的信息快速查询,提高 邻接面片匹配的效率,实现网格曲面的快速拓扑重建。从图20中可看出,本文算法在处理 90多万面片的模型时