[发明专利]一种基于八叉并运用于web的非结构化网格切割方法在审
申请号: | 201811534537.0 | 申请日: | 2018-12-14 |
公开(公告)号: | CN109614522A | 公开(公告)日: | 2019-04-12 |
发明(设计)人: | 杨新武;王碧瑾;杜鹏 | 申请(专利权)人: | 北京工业大学 |
主分类号: | G06F16/901 | 分类号: | G06F16/901 |
代理公司: | 北京思海天达知识产权代理有限公司 11203 | 代理人: | 沈波 |
地址: | 100124 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种基于八叉并运用于web的非结构化网格切割方法,具体采用八叉树数据结构存储网格数据时全新的数据插入方案,并在有限面切割网格时提取相交网格和去除重复网格的一种快速有效方法。先利用数据结构存储节点数据,并提出新的数据插入方式;然后给定任意平面对网格进行切割,切割过程中涉及到对切割面的确定、判断与切割面相交的四面体、修改网络拓扑,最后删除重复的四面体等一系列操作;本发明在几何切割方面提供了完整的解决方案,针对网格数据量大的特点,首先切割八叉树并从切割面穿过的节点中提取四面体,然后切割四面体再修改拓扑,大大减少了计算量。 | ||
搜索关键词: | 切割 四面体 网格 非结构化网格 切割面 相交 数据结构存储 树数据结构 插入方式 存储网格 节点数据 切割过程 网格数据 网络拓扑 计算量 重复 拓扑 去除 删除 穿过 | ||
【主权项】:
1.一种基于八叉并运用于web的非结构化网格切割方法,数组介绍:·当前节点的最大容量var:最大容量指可以存储在当前节点中点(point)的最大数量值;如希望一个节点内存储5个点,则最大容量为5;初始需要为节点分配一个最大容量值;如果没有赋值,设置默认值为10;当超过最大容量时,需对八叉树进行分叉;·当前节点的边界范围arr[]:当前节点的边界包含两组三维数据,一组是原点坐标,另一组是当前节点包围的三维空间的长宽高;·当前节点存储的点索引arr[]:判断如果新插入的点point[][]在当前节点的内并没达到当前节点的最大容量,那么此点point[][]的第一比特位将被存储在当前节点的点索引中;·当前节点存储的四面体索引arr[]:存储所有穿过这个节点的四面体,这也是八叉树结构的最终返回;·当前节点存储的子索引arr[]:判断当前节点是否有子节点;如果没有,将被赋为null;如果有,是[0,1,2,3,4,5,6,7],表示它的8个子元素;其特征在于:包括以下步骤,步骤1,在用网格描述蛋白质分子结构的.mesh数据文件中,包含两部分主要数据:一是点数据,包含点的逻辑序号、坐标等信息;二是四面体数据,包含四面体的逻辑序号、构成四面体的点序号即4个点可构成一个四面体等信息;(1)插入点:读取点的x、y、z空间坐标,即依次读取point[][]的第二比特位,并与所有节点的边界范围进行比较;如果点坐标和某个节点的边界范围满足公式:lx≤x<lx+length&&ly≤y<ly+width&&lz≤z≤lz+height (1)且不达到某个节点的最大容量,则将点存储在特定节点的点索引中;x,y,z,分别表示点的空间坐标;lx,ly,lz分别表示某节点的边界起点;length,width,height分别当前节点包围的三维空间的长宽高;(2)四面体插入:四面体和单元cell的位置情况有多种;以立方体来表示单元,若四面体的所有顶点的坐标都大于或小于立方体的八个顶点的坐标,则判断四面体在节点外;若四面体的一个或多个顶点的坐标在立方体的边界范围内,则判断四面体部分在节点内;若情况不符合上述两种判断,则属于需要特殊处理的两种可能性;判定方法如下:根据四面体的三点坐标:T1(x1,y1,z1),T2(x2,y2,z2),T3(x3,y3,z3)和立方体的四点坐标:L1(lx1,ly1,lz1),L2(lx2,ly2,lz2),L3(lx3,ly3,lz3),L4(lx4,ly4,lz4)得到这两个无限的面方程:i1x+j1y+k1z+d1=0i2x+j2y+k2z+d2=0 (2)三点确定一平面,i1,i2,j1,j2,k1,k2,d1,d2都代表面方程参数;确定两个面的法向量是否在同一方向:i1/i2=j1/j2=k1/k2 (3)如果不是,则确定两个面具有交叉线,求解联立方程并得到交点方程:(x‑x0)/a=(y‑y0)/b=(z‑z0)/c (4)让Ix1为x1,x2,x3的最大值,Ix2为x1,x2,x3的最小值;将Ix1和lx2代入公式(4)得到两点的交点坐标:I1(Ix1,Iy1,Iz1),I2(Ix2,Iy2,Iz2)I1为交点1,I2为交点2;使用交叉乘数法确定交叉线是否与有限三角形边界或有限四边形边界相交;if(I1‑T1)×(T2‑T1)×(I2‑T1)×(T2‑T1)<0&&(I1‑T2)×(T1‑T2)×(I2‑T2)×(T1‑T2)<0 (5)如果任何边界满足公式(5),确定交叉线在该面中;如果交叉线同时在两个有限面中,则可以判断四面体在叶节点中;步骤2,用切割面对网格进行切割并提取相应单元集合;边界区域存储在八叉树叶节点中;这样得到叶节点中8个顶点的坐标;将立方体对角线坐标带入切割面方程,确定切割面是否通过节点;令切割面方程为ix+jy+kz+d=0 (6)i,j,k,d都为切割面方程参数;将立方体对角线坐标D(xd,yd,zd)、F(xf,yf,zf)代入公式(7),若结果小于0,则可证明切割面通过该叶片节点;(i×xd+j×yd+k×zd+d)×(i×xf+j×yf+k×zf+d) (7)由于每条对角线都可能与一个面相交,每个叶节点计算4次;递归地确定所有叶节点,即可提取所有满足条件的叶节点中的四面体和索引号并将它们存储到一个新的IntersectTetrahedra[]中;同理,提取在切割面下方的节点中的所有四面体,并将其保存到新的数组UnderTerahedra[]中;步骤3,获得相交的四面体;(1)读取IntersectTetrahedra[]数组,得到切割面通过的单元内的四面体的顶点坐标,将四个顶点分成两组带入公式(7);如果结果小于0,则将四面体的顶点存储在新数组CutTetrahedra[].s中;(2)计算交叉点坐标;令A和B为四面体的两个顶点;根据拓扑关系,可以得到A和B的坐标,得到AB线的方程:(x‑x0)/a=(y‑y0)/b=(z‑z0)/c (8)由切面方程式(6)和式(8)得出四面体与切割面的两侧交点坐标;步骤4,修改网络拓扑;步骤5,删除重复的四面体;删除切割面下方四面体集中通过切割面的四面体集。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京工业大学,未经北京工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201811534537.0/,转载请声明来源钻瓜专利网。