[发明专利]一种修正STL文件外法线的方法有效
申请号: | 202011032555.6 | 申请日: | 2020-09-27 |
公开(公告)号: | CN112150599B | 公开(公告)日: | 2022-11-04 |
发明(设计)人: | 张进;宋文艳;王泽江;刘赟;何国毅 | 申请(专利权)人: | 南昌航空大学 |
主分类号: | G06T15/06 | 分类号: | G06T15/06;G06F17/12 |
代理公司: | 南昌洪达专利事务所 36111 | 代理人: | 刘凌峰 |
地址: | 330000 江*** | 国省代码: | 江西;36 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 修正 stl 文件 法线 方法 | ||
本发明公开了一种修正STL文件外法线的方法,用以解决STL文件中法线方向不一致的问题;通过该算法后,STL文件中所有三角面元法线全部是外法线或全部为内法线。以STL文件三角面元中心点为起点的法线为射线,在考虑射线可能与两个三角面元的公共边相交或射线刚好穿过多个三角面元的公共顶点这两种情况下,根据射线与其他面元网格交点数为奇偶判断法线是否为内法线。
技术领域
本发明涉及数据结构与算法技术领域,具体涉及一种修正STL文件外法线的方法。
背景技术
STL(stereo lithography)是三维图形文件接口,已被工业界认为是目前快速成型领域的标准零件描述文件格式。它采用一系列三维的三角形记录实体模型的边界,包括三角形所在平面的法线和它所包含的三个顶点坐标。STL文件中三角形法线与三个顶点之间遵循右手定则,在生成STL文件时,三角顶点记录顺序是紊乱的,导致法线有的是外法线,有的是内法线,法线方向不一致。
邱元庆等采用从一个三角面元开始遍历,比较其法向量和周围其他三角面元法向量,看差值是否在一定阈值内,若不是,则判定法向量有错。这种方法由于人为主观性和法向量方向的多样性,很难修复所有的法向量错误,尤其在曲率较大的面或面面相交的地方。李正洲等采用在三角面元附近沿法线方向取一点,从该点沿任意方向作射线,射线与三角面元交点为偶数,该三角面元法线为外法线,否则,为内法线。这一方法简单快捷,但在其公开文献中,并没考虑射线刚好穿过两个三角面元的公共边或射线刚好穿过多个三角面元的公共顶点情况。
发明内容
本发明所要解决的问题是:提供一种修正STL文件外法线的方法,以STL文件三角面元中心点为起点的法线为射线,在考虑射线可能与两个三角面元的公共边相交或射线刚好穿过多个三角面元的公共顶点这两种情况下,根据射线与其他面元网格交点数为奇偶判断法线是否为内法线。
本发明为解决上述问题所提供的技术方案为:一种修正STL文件外法线的方法,所述方法包括以下步骤,
(1).从STL文件中读取三角面元信息给A;
(2).通过三角形三顶点计算出三角形中点,以中点为起点,三角面元法线为方向,按数学公式(1)建立射线方程;设置统计交点数的变量count=0;
p=ps+t*v (1)
(3).从STL文件中读取三角面元信息给E,如E等于A则读取下一个三角面元给E;
(4).通过公式(1)(2)(3)计算出t值,根据t判断射线是否与三角面元E所在平面相交,如相交,再用公式(4)计算交点与三角面元E三顶点组成的三个三角形面积,根据三个三角形面积和是否等于三角面元E的面积,判断射线是否与三角面元E相交;
n*(p-p0)=0 (2)
t=-(ps–p0)*n/(v*n) (3)
S=|AB×AC|/2 (4)
(5).如射线与三角面元E相交,则判断这一交点与前面已求出的交点是否重合,如不重合,count变量加1;
(6).重复进行(3)、(4)、(5)步骤,直至STL文件中无三角面元赋给E;
(7).判断count是否为奇数,如为奇数,则三角面元A法线为内法线,将三角面元A内法线取反改为外法线;
(8).重复进行(1)、(2)、(3)、(4)、(5)、(6)、(7)步骤,直至STL文件中无三角面元赋给A,算法结束。
优选的,所述步骤(1)中三角面元信息包含三角形三顶点和三角面元所在平面法线。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南昌航空大学,未经南昌航空大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011032555.6/2.html,转载请声明来源钻瓜专利网。