stl clocklist 查找元素_基于半边结构的STL文件快速拓扑算法

本文提出了一种基于哈希表和半边结构的STL文件拓扑重建算法,旨在解决STL文件中数据冗余和拓扑关系建立效率低下的问题。通过在读取数据时同时剔除冗余信息和建立拓扑关系,减少了数据存储量,提高了算法效率。算法在读取每个三角面时,维护一个未添加邻接面的半边集合,读取完成后,构建无重复数据的点表和面表,完善了三角面间的拓扑关系。
摘要由CSDN通过智能技术生成

自3D打印技术问世之后,凭借其复杂性低、成本低廉、软件开源、易于推广等特点在国内外得到了迅速的发展[1]。STL(Stereo Lithography)文件是由美国3D System公司于1987年制定的接口协议,由于其格式简单、读写便利,成为3D打印过程中最常用的数据存储格式[2]。STL文件由离散的三角面片组成,存放了模型的点云的位置信息和三角面片的法向量,但其丢失了面与面之间的拓扑关系,同时,单个点被多次记录,造成了大量的数据冗余[3]。在快速成型过程中,待支撑位置查询、模型分层切片等操作均需要三角面间的拓扑关系[4],因此,建立合理的数据结构剔除冗余信息,采用高效的算法建立拓扑关系就显得尤为重要。

针对STL文件读写的局限,国内外专家提出多种解决方案。侯聪聪等[5]提出基于链表的数据存储和拓扑结构,建立点、边、面表进行数据存储,虽剔除了STL文件中的重复点,但每次建立拓扑关系时,均对整个边表进行遍历,算法性能较低;王增波[6]采用作为基础结构,将有效数据仅保存一次,提升了数据的添加和查找速度,几乎可以在常数时间内快速完成,但建立拓扑关系时,依旧是对已存数据进行遍历,不仅效率较低,还存在部分数据查找遗漏的现象;王彦云等[7]优化了哈希表的冲突解决方案,采用二分查找的方法对相同key值的链表进行查找,提升了查表速度,但效率依旧较低;钱乘等[8]也采用哈希表进行数据存储,存储数据的同时对每个点记录其所属三角面片,全部存储完毕后,再对所有面片进行遍历,建立拓扑关系,不存在遗漏,但读取完成后,需要再次遍历面表寻找邻接面;张应中等[9]利用进行拓扑关系建立,巧妙地将点与面的信息存入边,利用三角面中顶点的存放顺序来保存边的信息,精简了存储结构,但拓扑算法复杂,并且需要在读入全部顶点的情况下建立拓扑关系。

基于以上算法的研究,本文提出一种基于哈希表的、利用半边结构的数据存储和三角面拓扑算法,在读取数据过程中,一方面剔除冗余数据,一方面快速建立面的拓扑关系,每读入一个三角面信息,进行数据存放的同时,在点表中维护一个未添加邻接面的半边集合。当数据读取完成后,建立无重复数据的点表和面表,完善三角面间的拓扑关系。

1 STL文件

STL格式文件分为ASCII码和二进制两种,其中,二进制格式的文件数据结构如图1所示,与ASCII相比存储更加紧凑,占用空间较小,会在文件起始位置记录三角面片总数Num,在后续建立哈希表时也能依据此选择更加合适的表长。

dff520e2776b81d20084cd185c8f5289.gif

由欧拉公式可知,存储正确的三角网格文件,三角面的数量约为顶点的2倍[10],而在STL文件中,每存储一次面片信息,都会重复存储3个点的位置坐标,使得存的储顶点数量是面片数量的3倍[11]。由此可得,每个顶点在STL文件中平均记录了6次,所以在进行拓扑关系建立前,需要先对冗余信息进行辨别和剔除,使每个顶点仅存储一次,减少数据存储量,提升算法效率。

2 采用半边结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值