CN109614522A - 一种基于八叉并运用于web的非结构化网格切割方法 - Google Patents
一种基于八叉并运用于web的非结构化网格切割方法 Download PDFInfo
- Publication number
- CN109614522A CN109614522A CN201811534537.0A CN201811534537A CN109614522A CN 109614522 A CN109614522 A CN 109614522A CN 201811534537 A CN201811534537 A CN 201811534537A CN 109614522 A CN109614522 A CN 109614522A
- Authority
- CN
- China
- Prior art keywords
- node
- point
- tetrahedron
- coordinate
- cut surface
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种基于八叉并运用于web的非结构化网格切割方法,具体采用八叉树数据结构存储网格数据时全新的数据插入方案,并在有限面切割网格时提取相交网格和去除重复网格的一种快速有效方法。先利用数据结构存储节点数据,并提出新的数据插入方式;然后给定任意平面对网格进行切割,切割过程中涉及到对切割面的确定、判断与切割面相交的四面体、修改网络拓扑,最后删除重复的四面体等一系列操作;本发明在几何切割方面提供了完整的解决方案,针对网格数据量大的特点,首先切割八叉树并从切割面穿过的节点中提取四面体,然后切割四面体再修改拓扑,大大减少了计算量。
Description
技术领域
本发明属于在web中进行非结构化网格的可视化领域。具体是采用八叉树数据结构存储网格数据时全新的数据插入方案,并在有限面切割网格时提取相交网格和去除重复网格的一种快速有效方法。
背景技术
在描述科学模拟产生的数据的许多不同形式中,非结构化网格代表了最复杂和最困难的形式之一。在进行可视化操作过程中,三维显示非结构化网格元素或单元的连通性往往很复杂,所产生的存储开销也会不小。许多可视化算法不仅需要访问存储在此类网格顶点的变量值,还需要应用插值来重建连续字段。对于非结构化网格,这个问题尤其困难:对于每个插值点,必须识别包含该点的单元格。这种单元(cell)定位问题需要应用空间数据结构,这些数据结构可以快速缩小候选单元的范围,然后测试候选单元是否包含插值点。
在这种情况下,对这种数据结构的挑战是双重的:首先,它们必须能够考虑到现代自适应非结构化网格中常见的大小不同的单元大小。其次,更重要的是,这种支持数据结构的内存大小不得超出合理范围。由于单元位置数据结构的设计和实现的复杂性,许多有趣的矢量场可视化方法通常不针对非结构化网格进行设计或测试。这个创新领域几乎没有非结构化网格。
再有,在可视化系统中,GitHub上有一些web数据可视化的例子,但是很多都是引用已经生成的模型,不能查看和修改它们的底层数据。其程序也过于复杂。中国科学院计算数学与科学/工程计算研究所完成了一个名为VCMM的程序,该程序可以实现网格标记、网格质量分析、数值结果插值、提取和绘制等功能。它的功能非常复杂和完善,但是该系统是一个独立的应用程序,并不能在web上得到广泛的运用。
发明内容
针对现有技术中存在的上述问题,本发明提出一种基于八叉树数据结构的数据插入和非结构化网格切割方法。对于想在web上进行非结构化网格可视化,本发明提出的方法整体思路是,先利用数据结构存储节点数据,并提出新的数据插入方式;然后给定任意平面对网格进行切割,切割过程中涉及到对切割面的确定、判断与切割面相交的四面体、修改网络拓扑,最后删除重复的四面体等一系列操作。
为实现上述目的,本发明采用的技术方案为一种基于八叉并运用于web的非结构化网格切割方法,包括以下步骤:
主要数组介绍:
步骤1,创建八叉树octree数据结构。八叉树中的每个节点node都包含以下五项:
·当前节点的最大容量var:最大容量指可以存储在当前节点中点(point)的最大数量值。如希望一个节点内存储5个点,则最大容量为5。初始需要为节点分配一个最大容量值。如果没有赋值,设置默认值为10。当超过最大容量时,需对八叉树进行分叉。
·当前节点的边界范围arr[]:当前节点的边界包含两组三维数据,一组是原点坐标,另一组是当前节点包围的三维空间的长宽高。
·当前节点存储的点索引arr[]:判断如果新插入的点point[][]在当前节点的内并没达到当前节点的最大容量,那么此点point[][]的第一比特位将被存储在当前节点的点索引中。
·当前节点存储的四面体索引arr[]:存储所有穿过这个节点的四面体,这也是八叉树结构的最终返回。
·当前节点存储的子索引arr[]:判断当前节点是否有子节点。如果没有,将被赋为null;如果有,是[0,1,2,3,4,5,6,7],表示它的8个子元素。
在用网格描述蛋白质分子结构的.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=0
i2x+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,删除重复的四面体。
删除切割面下方四面体集中通过切割面的四面体集。
与现有技术相比,本发明具有以下优势:
(1)本发明在几何切割方面提供了完整的解决方案,针对网格数据量大的特点,首先切割八叉树并从切割面穿过的节点中提取四面体,然后切割四面体再修改拓扑,大大减少了计算量。
(2)本发明将四面体插入八叉树转为判断两个有限面之间的交叉。
附图说明
图1为特殊情况的四面体与节点之间的相对位置。
图2为特殊情况的四面体和节点的扩展面。
图3为切割面通过叶子节点中的四面体。
图4为切割面下方叶子节点中的四面体。
图5为与切割面相交的四面体。
图6为修改网络拓扑后的切割面效果。
图7为切割表面的凸起。
图8为一个四面体存在于两个叶子节点中。
图9最终切面。
具体实施方式
下面将结合附图和实例对发明做进一步说明。
图1为特殊情况的四面体与节点之间的相对位置,
图2为特殊情况的四面体和节点的扩展面,由虚线围成的三角形是四面体的底面,实线围成的三角形为延伸面;虚线包围的四边形是立方体的正面,实线包围的四边形是扩展面;红线是两个膨胀面相交的线。
图3为切割面通过叶子节点中的四面体,本发明用1mag.mesh数据进行测试,将叶节点的最大容量设为100,原始网格数据共170,000个四面体。在切割完八叉树后,只剩10,390个四面体。
图4切割面下方叶子节点中的四面体。
图5为与切割面相交的四面体。
图6为修改网络拓扑后的切割面效果。
图7为切割表面的凸起。
图8为一个四面体存在于两个叶子节点中,,四面体穿过节点1和节点2,因此它由两个节点存储。当切割面通过节点2时,节点2显示的切割图像如(b)所示,节点1显示的切割图像如(c)所示。
图9为最终切面图。
Claims (1)
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=0
i2x+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,删除重复的四面体;
删除切割面下方四面体集中通过切割面的四面体集。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811534537.0A CN109614522A (zh) | 2018-12-14 | 2018-12-14 | 一种基于八叉并运用于web的非结构化网格切割方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811534537.0A CN109614522A (zh) | 2018-12-14 | 2018-12-14 | 一种基于八叉并运用于web的非结构化网格切割方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109614522A true CN109614522A (zh) | 2019-04-12 |
Family
ID=66009209
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811534537.0A Pending CN109614522A (zh) | 2018-12-14 | 2018-12-14 | 一种基于八叉并运用于web的非结构化网格切割方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109614522A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110555910A (zh) * | 2019-07-11 | 2019-12-10 | 北京云上作科技有限责任公司 | 一种网格切割方法、装置、终端及存储介质 |
CN111695281A (zh) * | 2020-06-01 | 2020-09-22 | 电子科技大学 | 一种四面体网格划分有限元粒子模拟的粒子快速定位方法 |
CN112015735A (zh) * | 2020-08-20 | 2020-12-01 | 西安数峰信息科技有限责任公司 | 一种非结构化网格的数据存储结构及数据存储方法 |
CN112199900A (zh) * | 2020-08-27 | 2021-01-08 | 西安交通大学 | 一种多面体交接的快速计算方法 |
CN114219899A (zh) * | 2022-02-21 | 2022-03-22 | 墨研计算科学(南京)有限公司 | 一种基于改进叉树算法的网格生成方法及装置 |
-
2018
- 2018-12-14 CN CN201811534537.0A patent/CN109614522A/zh active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110555910A (zh) * | 2019-07-11 | 2019-12-10 | 北京云上作科技有限责任公司 | 一种网格切割方法、装置、终端及存储介质 |
CN111695281A (zh) * | 2020-06-01 | 2020-09-22 | 电子科技大学 | 一种四面体网格划分有限元粒子模拟的粒子快速定位方法 |
CN111695281B (zh) * | 2020-06-01 | 2023-04-25 | 电子科技大学 | 一种四面体网格划分有限元粒子模拟的粒子快速定位方法 |
CN112015735A (zh) * | 2020-08-20 | 2020-12-01 | 西安数峰信息科技有限责任公司 | 一种非结构化网格的数据存储结构及数据存储方法 |
CN112199900A (zh) * | 2020-08-27 | 2021-01-08 | 西安交通大学 | 一种多面体交接的快速计算方法 |
CN112199900B (zh) * | 2020-08-27 | 2022-12-09 | 西安交通大学 | 一种多面体交接的快速计算方法 |
CN114219899A (zh) * | 2022-02-21 | 2022-03-22 | 墨研计算科学(南京)有限公司 | 一种基于改进叉树算法的网格生成方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109614522A (zh) | 一种基于八叉并运用于web的非结构化网格切割方法 | |
Trotts et al. | Simplification of tetrahedral meshes with error bounds | |
CN106204446B (zh) | 一种地形图的建筑物合并方法 | |
CN104574472B (zh) | 基于嵌入网格的固体碎裂模拟和动画方法 | |
CN110555266B (zh) | 用于仿真测试的模拟道路网数据随机生成方法及系统 | |
JPH01106266A (ja) | 3次元図形処理方法およびその装置 | |
CN112288807B (zh) | 一种高精度地图中路口数据生成方法及装置 | |
CN110309248A (zh) | 一种基于Voronoi图的交通道路网络自动划分交通小区的方法 | |
Calvo et al. | All-hexahedral element meshing: Generation of the dual mesh by recurrent subdivision | |
CN104732589B (zh) | 快速混合网格生成方法 | |
US7181377B1 (en) | Method of modifying a volume mesh using sheet extraction | |
CN112288854B (zh) | 立交桥三维模型的构建方法 | |
Fößmeier et al. | Nice drawings for planar bipartite graphs | |
CN113129443A (zh) | 一种拓扑关系保持的三维建筑物简化方法及系统 | |
CN115937466B (zh) | 一种融合gis的三维模型生成方法、系统及存储介质 | |
Lohou et al. | A new 3D 6-subiteration thinning algorithm based on p-simple points | |
Brandenburg | T-shape visibility representations of 1-planar graphs | |
CN110532670A (zh) | 一种适分析样条实体模型构建方法及系统 | |
Eppstein et al. | Geometric graphs with unbounded flip-width | |
CN115087983A (zh) | 使用几何面片进行混合建模的方法和系统 | |
Terlep et al. | Euclidean distance approximations from replacement product graphs | |
Chae et al. | Volume triangulation from planar cross sections | |
US20140313195A1 (en) | 3D Model Mapping | |
Lohou et al. | A new 3D 12-subiteration thinning algorithm based on P-simple points | |
KR20030046372A (ko) | 단면 도시 시스템 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190412 |
|
RJ01 | Rejection of invention patent application after publication |