一种快速的等值线生成算法
- 格式:doc
- 大小:29.00 KB
- 文档页数:8
等值线算法
等值线算法是一种常用的地图制图方法,它通过将地图上的各个点按照相同的数值进行分类,然后将这些点连接起来,形成一条条等值线,从而展示出地图上的地形、气候、人口等信息。
这种算法在地理信息系统、气象学、地质学等领域都有广泛的应用。
等值线算法的基本原理是将地图上的各个点按照相同的数值进行分类,然后将这些点连接起来,形成一条条等值线。
这些等值线可以表示出地图上的各种信息,比如高度、温度、降雨量等。
等值线的密集程度可以反映出地形的陡峭程度,密集的等值线表示地形陡峭,而稀疏的等值线则表示地形平缓。
等值线算法的应用非常广泛。
在地理信息系统中,等值线可以用来展示地形、水文、土地利用等信息,帮助人们更好地了解地理环境。
在气象学中,等值线可以用来展示气压、温度、降雨量等信息,帮助人们预测天气变化。
在地质学中,等值线可以用来展示地层、矿产等信息,帮助人们寻找矿藏和研究地质构造。
等值线算法的实现需要借助计算机技术。
首先需要将地图上的各个点进行采样,得到它们的数值。
然后将这些数值进行分类,确定等值线的间隔。
接着,根据等值线的间隔,将地图上的各个点连接起来,形成一条条等值线。
最后,将等值线绘制在地图上,就可以展示出地图上的各种信息了。
等值线算法是一种非常实用的地图制图方法,它可以帮助人们更好地了解地理环境、预测天气变化、寻找矿藏等。
随着计算机技术的不断发展,等值线算法的应用范围也会越来越广泛。
一种快速的等值线生成算法作者:董肇伟卢海达倪广元王剑秦来源:《科技资讯》 2014年第10期董肇伟1 卢海达2 倪广元3 王剑秦1(1.中国农业大学信息与电气工程学院北京 100083;2.长庆油田第二采油厂甘肃庆阳 745100;3.北京中恒永信科技有限公司北京 100083)摘要:本文提出了一种新的等值点位于网格点时,对等值点的调整方法;在分析已有等值线追踪算法的基础上,提出了一种基于TIN网格的快速等值线追踪算法,实验表明该算法具有较高的执行效率。
关键词:等值线等值点 TIN网格中图分类号:TP391.41 文献标识码:A文章编号:1672-3791(2014)04(a)-0033-02等值线图能直观地展示数据的变化趋势,是众多领域展示成果的重要图件之一,被广泛应用于石油勘探、矿物开采、气象预报等众多领域。
等值线的绘制是指从大量采样数据中提取出具有相同值的点的信息,并生成形态完整、位置精确的等值线的过程,包括等值线网格化、等值线追踪、等值线光滑、等值线填充与标注几个处理步骤[1]。
其中等值线网格化是对网格边进行线性插值,进而求出等值点的过程。
等值线的追踪则是利用等值线网格化产生的等值点数据,将其中相同等值点进行连接的过程。
等值线追踪的传统方法是,在网格单元边上选取一个等值点,寻找邻近的等值点,顺次连接成线,直到等值点回到起始点或位于工区边界,完成单条等值线的追踪,并以此为基础遍历所有的等值点。
在追踪过程中,等值线分为闭合与非闭合两种情形,需要先追踪开曲线,再追踪闭曲线,否则不能确保结果正确。
特定的搜索顺序提高了处理过程的复杂性,增加了网格单元的重复搜索次数,致使效率低下。
针对此类问题,很多学者提出了在不规则三角网(TIN网格)下的改进方法,成建梅[2]等提出为三角形三边分别赋予不同的权值,以方便确定三角形单元内等值点的位置。
但是这只是对局部的改进,未涉及等值线追踪过程的优化。
黄维科[3]等基于三角形单元内等值线段容易确定的事实,提出了使用“焊接法”将相同的等值点连接从而生成整条等值线的方法。
java 生成等值线datainterval 算法摘要::1.等值线概念介绍2.Java生成等值线的数据间隔算法原理3.具体实现步骤4.算法优缺点分析5.应用场景及实战案例正文:一、等值线概念介绍等值线(Contour line)是一种地图上的线条,表示地形高度、温度、压力等物理量在不同区域的变化。
在地理信息系统(GIS)和气象学等领域具有广泛应用。
在Java编程语言中,生成等值线图可以帮助分析和展示数据分布规律,提高数据可视化的效果。
二、Java生成等值线的数据间隔算法原理1.数据准备:首先,需要收集一组数值数据,如地形高程、温度等。
这些数据通常存储在Excel、CSV或JSON等文件格式中。
2.数据预处理:对原始数据进行插值、平滑等操作,以提高等值线生成的质量。
插值方法有多种,如线性插值、二次插值、三次插值等。
在Java中,可以使用开源库如GIS有利器如GeoTools、OpenGeoSuite等进行数据处理。
3.确定数据间隔:设置数据间隔(Data Interval)是生成等值线的关键。
数据间隔决定了等值线图的精细程度。
一般情况下,数据间隔越小,等值线图越精细,但计算量也越大。
在Java中,可以通过计算数据范围和目标分辨率来确定数据间隔。
4.生成等值线:根据确定的数据间隔,使用插值算法计算等值线数据。
将计算出的等值线数据存储在文件中,如Shapefile、GeoJSON等。
5.绘制等值线图:使用Java绘图库,如JavaFX、Swift等,将生成的等值线数据可视化。
可以设置地图投影、颜色方案等参数,提高地图的可读性。
三、具体实现步骤1.导入相关库:导入Java GIS开源库,如GeoTools、OpenGeoSuite 等。
2.读取数据:读取原始数据文件,如Excel、CSV等。
3.数据预处理:使用插值算法对数据进行处理。
4.计算数据间隔:根据需求设置数据间隔。
5.生成等值线数据:使用插值算法计算等值线数据。
等值线生成方法发展历程等值线是地理信息系统(GIS)、气象学、地质学等领域中常用的一种图形表达方式,它能够直观地展示出空间数据的分布特征。
随着计算机技术的飞速发展,等值线生成方法也在不断演进。
本文将为您详细介绍等值线生成方法的发展历程。
一、手工绘制阶段在计算机技术尚未普及之前,人们主要依靠手工方法绘制等值线。
这一阶段的主要方法有:1.费马原理法:通过在数据点上画切线,找出曲率半径最小的点,连接相邻的切线交点,从而生成等值线。
2.插值法:在已知数据点之间进行插值,得到未知点的数值,然后根据这些数值绘制等值线。
3.方格网法:将研究区域划分为方格网,计算每个方格内的平均值,然后根据方格网的等值线绘制等值线图。
二、计算机辅助绘制阶段随着计算机技术的发展,人们开始利用计算机辅助绘制等值线。
这一阶段的主要方法有:1.直接法:将离散数据点输入计算机,通过插值方法生成等值线。
2.间接法:首先生成一系列规则网格点,然后在这些点上进行插值,最后生成等值线。
3.等高线追踪法:在已知数据点之间进行等高线追踪,生成等值线。
三、基于网格的等值线生成方法随着GIS技术的普及,基于网格的等值线生成方法逐渐成为主流。
这一阶段的主要方法有:1.网格插值法:对规则网格点进行插值,得到等值线。
2.等值线追踪法:在网格点上直接进行等值线追踪。
3.Marching Squares算法:通过对网格单元的编码,查找等值线经过的网格单元,从而生成等值线。
4.虚拟等值线法:在网格点上进行虚拟等值线追踪,生成等值线。
四、基于不规则三角网的等值线生成方法针对复杂地形,基于不规则三角网的等值线生成方法应运而生。
这一阶段的主要方法有:1.Delaunay三角网:首先生成不规则三角网,然后在三角网上进行等值线追踪。
2.Alpha Shapes算法:通过对三角网进行Alpha剪裁,生成等值线。
3.三角网插值法:在三角网内进行插值,得到等值线。
五、基于图形硬件加速的等值线生成方法近年来,随着图形硬件性能的提升,基于图形硬件加速的等值线生成方法逐渐受到关注。
最近学习mapgis掌握了几种mapgis等值线生成方法,简述如下:法一:先在excel里面处理数据表头如上图存为csv格式然后改文件后缀名为det(如Ag.det)打开mapgis—空间分析—DTM分析进入DTM编辑文件—打开三角剖分文件(打开Ag.detTin模型—快速生成三角剖分然后Tin模型—追踪剖分等值线在选择界面选择自己需要的选项需要注意的是1、点击注记参数—注记格式里面可以加前缀名(就是等值线标注)频度是加入标注的稀疏程度。
2、分区的时候是数值以前的值,故第一区用白色,最高值要留下。
此方法的缺点是,每次只能处理一个数据,需要多个det文件,且凸包线不能充满整个矩阵。
法二:将excel另存为txt格式(如拉屋化探数据.txt)打开mapgis—实用服务—投影变换进入投影变换投影变换—用户投影变换(打开拉屋化探数据.txt)注意用户起始数据选择按指定分隔符点击设置分割符分隔符选Tab以及空格属性所在名称所在行必须选数据类型需要选数值选双精度,文本用字符串确定后设置点图元参数不需要投影后直接生成数据另存点文件(如拉屋化探数据.wt)然后进入DTM编辑打开拉屋化探数据.wt然后选处理点线—1、高程点/线三角化(或者2、高程点/线栅格化)生成1、det未见或者2、grd文件若是1、则接下来的步骤如法一若为2、接下来的步骤在法散讨论此办法麻烦但附加功能多,编辑方便,但由于破解mapgis关系,偶尔会出问题法三:将excel另存为txt格式(如拉屋化探数据.txt)直接进入DTM编辑选Grd模型—离散数据网格化(打开拉屋化探数据.txt)X、Y、Z值都是可选的,文件换名可以选为自己需要的(如拉屋化探数据.Grd),网格化方法不变,但是点选择进入(经试验距离幂指数选4比较好,其他的不用变)确定后打开三角剖分(拉屋化探数据.Grd)选Grd模型—平面等值线图绘制就可以绘制了分区的时候是数值以前的值,故第一区用白色,最高值要留下。
在Java中生成等值线(contouring)通常涉及到数值分析和图形渲染。
`DataInterval`类可能是您用来表示数据区间的类,它通常会包含一些方法来处理和计算数据点之间的差异。
以下是一个简化的例子,展示了如何使用Java来生成等值线:1. **定义数据区间**:首先,您需要定义一个数据区间,这个区间包含了您想要等值化的数据。
```javapublic class DataInterval {private double[] data; // 数据点private int n; // 数据点的数量public DataInterval(double[] data) {this.data = data;this.n = data.length;}// 计算数据区间的均值public double calculateMean() {double sum = 0;for (double d : data) {sum += d;}return sum / n;}// 计算数据区间的标准差public double calculateStandardDeviation() {double mean = calculateMean();double sumSquared = 0;for (double d : data) {sumSquared += Math.pow(d - mean, 2);}return Math.sqrt(sumSquared / n);}// 获取数据点public double[] getData() {return data;}// 设置数据点public void setData(double[] data) {this.data = data;this.n = data.length;}}```2. **等值线算法**:接下来,您需要实现一个算法来生成等值线。
这通常涉及到找到数据点之间的等值点,并连接这些点来形成线。
一种基于TIN的等值线快速生成算法赵景昌;白润才;刘光伟;刘威【摘要】基于TIN生成等值线图是利用有限的离散空间信息恢复地质属性和地学变量空间分布状态的重要手段之一,其时间效率主要取决于起始等值边查找与等值线追踪。
通过构建以TIN三角面片单元为节点的红黑树,将起始等值边查找的时间复杂度由O(M ´ N )提高到O(lb N );基于散列与半边数据结构重建TIN拓扑,根据TIN中“边—面”拓扑关系,在等值点内插计算的同时完成等值线追踪。
实验及应用表明,算法时间效率高,生成的等值线精度可靠,可满足大数据量条件下等值线快速生成的需要,具有广泛的实际应用价值。
%Generating isogram based on TIN is one of the important means to recover the geological properties and vari-ables distribution with the finite discrete spatial information. Its time efficiency mainly depends on the initial edge with isoline point checking and isolines tracking. By building the red-black tree with triangular facets units as TIN node, the time com-plexity of the initial edge ch ecking is improved from O(M ´ N ) to O(lb N );TIN topology is reconstructed based on hash and half-edge data structure. Accordingto“side-face”topology, isolines tracking is synchronously completed with the isoline points interpolation. Experiments and practical application show that the algorithm is stable, the precision of the isolines generation is reliable, and the algorithm can meet the needs to quickly generate isolines with the large amount of data, and has a wide range of practical application value.【期刊名称】《计算机工程与应用》【年(卷),期】2014(000)024【总页数】6页(P10-15)【关键词】不规则三角网(TIN);等值线;红黑树;散列;半边数据结构;拓扑重构【作者】赵景昌;白润才;刘光伟;刘威【作者单位】辽宁工程技术大学矿业学院,辽宁阜新 123000;辽宁工程技术大学矿业学院,辽宁阜新 123000;辽宁工程技术大学矿业学院,辽宁阜新 123000;辽宁工程技术大学理学院,辽宁阜新 123000【正文语种】中文【中图分类】TP391.7在数字矿山建设过程中,应用三维地学模拟(3D Geoscience Modeling,3DGM)技术建立三维矿床地质模型是重要的基础工作之一。
如何根据离散点自动绘制等值线(等高线)之三角形法2001-04-06 16:35 6683人阅读评论(1) 收藏举报算法网格图形c自动绘制等值线的方法从技术方向上看可以分为两大类,插值和曲线拟合.其中曲线拟合总的来说效果不如插值算法经典和应用广泛,效果也较逊色.这里着重介绍插值算法.其中插值算法中,按照方式不同分为离散点客观化和三角网方式.两者区别在于三角网计算主要在生成三角网过程,省去了插值到格点的过程.而客观分析过程则是将离散点分析到格点后再内插到细网格,然后大多利用追踪法生成等值线,也有在这里再使用曲线拟合.1、三角形算法a、首先生成delaunay三角形,这一点在我的帖子"delaunay triangulation之丰衣足食“内有源程序,大家可以参考。
b、随后需要在三角形的边上插补等值点。
要确定某个三角形的边上是否有等值点,需要进行判断和处理。
注意:如果某原始数据点和等值线值相同,将该点改变一个微量。
如果一个三角形三顶点的值相同则各边无等值点。
如果一个三角形的任意边两端点(A、B〕的Z值(Za、Zb)满足满足(Zd-Za)*(Zd-Zb)<0,其中Zd代表等值线的值,则该边必有等值点,其平面位置是Xd=Xa+(Xb-Xa)*(Zd-Za)/(Zd-Za) , Yd=Ya+(Yb-Ya)*(Zd-Za)/(Zb-Za)。
每个三角形上不可能三边都有同值的等值点,另一边上必定有同值的等值点。
c、等值点的追踪。
为了能将内插的等值点顺序追踪排列,绘出等值线,还必须找出相互重叠的环形网内所计算的等值点间的平面位置关系。
因每个环形网都是由多个三角形组成的,我们先简单分析一下单个三角形中存在等值点的情况。
由于不必考虑等值线穿过端点,如果一个三角形的边上存在等值点的话,只可能在某两条边上存在等值点,而不可能三条边上同时都有。
也就是说,只要三角形一边上存在等值点,则其余的两条边中必有一边存在等值点。
如何根据离散点自动绘制等值线(等高线)之三角形法自动绘制等值线的方法从技术方向上看可以分为两大类,插值和曲线拟合.其中曲线拟合总的来说效果不如插值算法经典和应用广泛,效果也较逊色.这里着重介绍插值算法.其中插值算法中,按照方式不同分为离散点客观化和三角网方式.两者区别在于三角网计算主要在生成三角网过程,省去了插值到格点的过程.而客观分析过程则是将离散点分析到格点后再内插到细网格,然后大多利用追踪法生成等值线,也有在这里再使用曲线拟合.1、三角形算法a、首先生成delaunay三角形,这一点在我的帖子"delaunay triangulation之丰衣足食“内有源程序,大家可以参考。
b、随后需要在三角形的边上插补等值点。
要确定某个三角形的边上是否有等值点,需要进行判断和处理。
注意:如果某原始数据点和等值线值相同,将该点改变一个微量。
如果一个三角形三顶点的值相同则各边无等值点。
如果一个三角形的任意边两端点(A、B〕的Z值(Za、Zb)满足满足(Zd-Za)*(Zd-Zb)<0,其中Zd代表等值线的值,则该边必有等值点,其平面位置是Xd=Xa+(Xb-Xa)*(Zd-Za)/(Zd-Za) , Yd=Ya+(Yb-Ya)*(Zd-Za)/(Zb-Za)。
每个三角形上不可能三边都有同值的等值点,另一边上必定有同值的等值点。
c、等值点的追踪。
为了能将内插的等值点顺序追踪排列,绘出等值线,还必须找出相互重叠的环形网内所计算的等值点间的平面位置关系。
因每个环形网都是由多个三角形组成的,我们先简单分析一下单个三角形中存在等值点的情况。
由于不必考虑等值线穿过端点,如果一个三角形的边上存在等值点的话,只可能在某两条边上存在等值点,而不可能三条边上同时都有。
也就是说,只要三角形一边上存在等值点,则其余的两条边中必有一边存在等值点。
根据上面的约定,我们再研究等值线穿过任一环形网中两条及两条以上相邻的径边时,可能出现的几种情形:① 等值线不通过环形网的界边。
等值线算法:1.根据给定点生成三角形网格(具体见三角形网格生成算法),假设标量场在三角形的内部及边上满足线性分布关系。
2.根据标量场的最大值和最小值以及等值线的条数(可以设置一个缺省值比如30,用户可以改变该值),均匀划分出一系列的等值线的给定值。
3.对每一个给定值,对所有三角形单元搜索一遍。
如果这个给定值位于某三角形单元的三个顶点处的标量值的最大值和最小值之间,则必定在三角形的边上存在着两个点,这两个点的标量值等于给定值。
把这两个点连接起来就得到等值线的一部分(参见图1)。
将所有三角形单元按上述方法搜索一遍,就画出了等值线。
4.上述算法画出的等值线不够光滑,采用适当的光滑算法比如样条插值就得到光滑的等值线。
流线图算法:1.根据给定点生成三角形网格,假设矢量场在三角形的内部及边上满足线性分布关系。
2.用户可选择流线的起始点(seed)。
可以逐点选择,也可以选择一条线段,再对线段等分得到起始点。
3.起始点可能不在给定点中,这时要搜索起始点位于哪个单元(具体见搜索算法)。
通过插值可得到起始点处的矢量。
选择合适的时间步长,具体数值可以使得在该时间步长内沿矢量场方向走过的距离约等于当地网格的尺寸。
运动到下一位置后,再搜索该点位于哪个单元,插值可得到该点处的矢量,如此循环,直到点运动到边界以外或达到最大的步数(可以设成一个较大的数值如1000)。
三角形网格生成算法(Delaunay方法):参见所附论文。
搜索算法: 搜索某个点位于哪个单元将区域分为若干子矩形区域(比如50×50),先扫描所有单元,将单元按区域归类。
对于给定点,先根据区域的坐标范围判断该点位于哪个区域。
然后扫描该区域所有单元,判断该点位于哪个单元。
判断一个点是否在一个三角形内部的方法(参见图2):将该点与三角形的每条边分别相连,得到三个三角形,计算这三个三角形的面积,如果面积之和等于原三角形的面积,则该点在三角形内。
这三个三角形的面积和原三角形之比,就是该点的插值函数。
1.等值线绘制的过程分为三个步骤,离散数据网格化、等值线生成
以及等值线图的填充。
项目中的数学模型将离散数据进行了网格化,本模块需要提供等值线的生成和等值线几何体的绘制。
2.等值线的生成方法。
规则化的网格数据提供了每一个网格点上的
坐标和浓度值,基本思路是从区域边界开始,利用线性插值逐网格跟踪等值线得到等值线在其所穿过的网格边上等值点的坐标,保存这些坐标并根据一定的方位判别法对这些等值点进行排序,为下一步绘制几何体做准备。
3.等值线几何体的绘制。
一个网格内的等值线确定为直线,不需要
进行平滑处理。
首先对上一步骤中得到的各条等值线按照其起点的位置进行排序,排序的顺序与等值线追踪的顺序一致,即区域左、上、右、下、内部等值线,内部等值线按照横坐标递增排序,这样排好序的等值线按照起点坐标左、上、右、下、内部的顺序保存起来。
整个算法的基本描述如下:
1) 按起点纵坐标从下至上的顺序对起点在左边界上的等值线排序;
2) 按起点横坐标从左至右的顺序对起点在上边界上的等值线排序;
3) 按起点纵坐标从上至下的顺序对起点在右边界上的等值线排序;
4) 按起点横坐标从右至左的顺序对起点在下边界上的等值线排序;
5) 按起点横坐标从左至右的顺序对内部封闭的等值线排序;
6) 填充第三种等值线与网格下边界或左边界以及起点和终点所在的边界所围的区域。
对最后一条等值线, 则还需填充与网格上边界或右边界所围的区域;
7) 填充第二种等值线与起点和终点所在的边界以及这二边界相交的顶点所围的区域;
8) 填充第一种等值线与起点和终点所在的边界的顶点所围的区域;
9) 填充内部封闭等值线所围的区域.。
一种快速的等值线生成算法
摘要:本文提出了一种新的等值点位于网格点时,对等值点的调整方法;在分析已有等值线追踪算法的基础上,提出了一种基于TIN 网格的快速等值线追踪算法,实验表明该算法具有较高的执行效率。
关键词:等值线等值点TIN网格
等值线图能直观地展示数据的变化趋势,是众多领域展示成果的重要图件之一,被广泛应用于石油勘探、矿物开采、气象预报等众多领域。
等值线的绘制是指从大量采样数据中提取出具有相同值的点的信息,并生成形态完整、位置精确的等值线的过程,包括等值线网格化、等值线追踪、等值线光滑、等值线填充与标注几个处理步骤[1]。
其中等值线网格化是对网格边进行线性插值,进而求出等值点的过程。
等值线的追踪则是利用等值线网格化产生的等值点数据,将其中相同等值点进行连接的过程。
等值线追踪的传统方法是,在网格单元边上选取一个等值点,寻找邻近的等值点,顺次连接成线,直到等值点回到起始点或位于工区边界,完成单条等值线的追踪,并以此为基础遍历所有的等值点。
在追踪过程中,等值线分为闭合与非闭合两种情形,需要先追踪开曲线,再追踪闭曲线,否则不能确保结果正确。
特定的搜索顺序提高了处理过程的复杂性,增加了网格单元的重复搜索次数,致使效率低下。
针对此类问题,很多学者提出了在不规则三角网(TIN网格)下的
改进方法,成建梅[2]等提出为三角形三边分别赋予不同的权值,以方便确定三角形单元内等值点的位置。
但是这只是对局部的改进,未涉及等值线追踪过程的优化。
黄维科[3]等基于三角形单元内等值线段容易确定的事实,提出了使用“焊接法”将相同的等值点连接从而生成整条等值线的方法。
但是在搜索等值线段间的共同等值点时,需要对已确定的等值线段进行遍历,执行效率提高幅度有限;并且使用的是简单的坐标值判别法,容易因机器误差引起错误结果。
1 改进的等值线生成算法
现在常用的用于生成等值线的网格有矩形网格、TIN网格等。
综合考虑,本文选用TIN网格。
生成等值线的主要步骤中,等值线的网格化处理与等值线的追踪是基础与关键,直接影响等值线的准确度和生成速度。
接下来将针对TIN网格,介绍对这两个过程的改进。
1.1 等值线网格化处理方法
在TIN网格中,等值线网格化处理的作用就是在网格边上计算出各等值点,为之后的等值线追踪提供基础数据。
以三角形单元为单位,遍历整个TIN网格,判断三角形棱边上有无等值点[4],使用公式:
1.2 等值线追踪算法
本文采用的追踪思想即是:从一个等值点出发,沿任意方向搜索等值点,直到回到起点或者到达边界;再从起点开始沿反向搜索未经过的点。
最终生成一条等值线。
为了提高搜索效率,注意到在经过网格化处理后,可以保证每条三角形棱边至多有一个等值点,而与该等值点相连的等值点至多有两个。
所以在以三角形单元为单位遍历TIN网格时,给每一棱边指定唯一的序号,若找出等值点,则记录与之相连的等值点所处的棱边。
接下来以棱边为基本单元追踪等值线,这样的好处是便于构造顺序存储结构,进而使用随机存取机制,加快追踪速度。
序号的引入将问题转化为简单的数值匹配,避免了常规算法中使用的方位信息。
同时可以忽略常规等值线追踪算法中的特定追踪顺序,对于拓扑复杂TIN网格,不考虑三角形棱边是否位于边界上可以大大简化处理的复杂度。
如图3演示了该算法的一般流程,图中矩形代表的是三角单元棱边,圆角矩形代表的是等值点。
其中图3(a)、(b)分别代表了非闭合和闭合两种形式的等值线,图3(c)~(f)展示了对于非闭合等值线的追踪过程:图3(c)表示从序号为1的网格边找起,沿任意方向寻找下一个等值点,并将新找到的等值点加入自己队尾(图3(d))。
图3(e)(f)表示
该方向追踪完成后,回到搜索起点,沿另一方向寻找,并将该等值线链表加入新找到的等值点后面。
图3(g)~(i)则展示了对于闭合等值线的追踪过程:选定任意等值点,沿任意方向寻找,直到回到搜索起点,结束搜索过程。
2 算法实现
2.1 数据结构
程序要兼顾按索引查找时的快捷和等值点插入的便利,故选择混合存储结构。
具体实现如下。
等值点的数据结构见表1。
三角单元棱边的数据结构见表2。
其中访问标记指示是否追踪过该边,初始时置为False。
等值点1是位于该边上的等值点。
等值点2指针指向当前等值线上的另一个端点(队尾)。
邻接边1,2上的等值点与该边上的相连。
当完成等值线网格化处理后,所有等值点被计算出,三角网格边中的棱边序号、等值点1指针、邻接棱边1与邻接棱边2的序号均被确定。
特别的,当棱边上的等值点为一条非闭合等值线的端点时,它
只有一个有效的邻接棱边。
2.2 算法流程
(1)从TIN网格中顺次读取一个棱边E1。
如果E1上不存在等值点,或访问标记为TRUE,重复步骤(1)。
否则,置访问标记为True,根据邻接边1序号读取棱边Ei,转到步骤(2)。
(2)置Ei的访问标记为True,并将它的等值点移动到前一个等值点的末尾。
若Ei即是E1,完成单条等值线的搜索,转到步骤(1)。
否则,读取Ei上不同于前一棱边的邻接边序号。
若存在,则在读取新的棱边Ei,重复步骤(2)。
若不存在,根据E1的邻接边2序号取出棱边Ej,转到步骤(3)。
(3)置Ej的访问标记为True,将等值线头结点移动到Ej上等值点的末尾。
读取Ej上不同于后一个点所在边的邻接边序号。
若存在,则取出新的棱边Ej,重复步骤(3)。
若不存在,完成单条等值线的搜索,转到步骤(1)。
当所有棱边都在步骤(1)中被读取过后,算法完成。
3 实验结果与分析
笔者将本文提出的改进算法运用到“裂缝性储层精细描述软件”
当中,利用该算法获得层面模型的等值线,并经过平滑、着色处理后,得到如图4所示的效果图。
为进一步测试算法效率,利用图4中的层面,计算传统追踪算法和改进算法的运行时间。
层面模型包含22827个坐标点,出于确保结果有效性的考虑,指定等值线高程值的个数分别为5,10,15,…,60,从而获得12组测试数据。
随着高程值个数的增加,程序会多次调用追踪算法,相当于增多了模型坐标点与等值点的个数。
表3显示了12组实验的结果。
改进算法的时间效率明显有于传统算法。
进一步的,本文对每组测试中改进算法的速度提升率进行统计,采用的公式为:
计算得出的结果如图5所示。
采用改进算法追踪等值线,速度平均提升30%以上。
这是因为由于TIN网格拓扑复杂,追踪等值线时大量时间消耗在对网格的遍历上。
传统算法在计算等值点时需要遍历一遍网格,在进行等值线追踪时,又要遍历两遍:第一遍以位于网格边界的等值点为起点,查找非闭合等值线;第二遍再查找闭合等值线。
而本文提出的改进算法只需要在计算等值点时遍历一遍网格,由于遍历时为三角形单元的棱边设置索引,在追踪等值线时,直接按索引遍历从而避开了TIN网格的复杂性对程序的不良影响。
并且,改进算法中不区分等值线的开闭性,
可以用统一的过程追踪,又减少一次对棱边的遍历。
故改进算法的时间性能大幅优于传统算法。
4 结论
本文基于TIN网格,提出了一种快速的等值线生成算法,该算法改进了等值点位于网格顶点时,对其进行偏移的方法,尽最大限度减小偏移量的不确定性,使结果更贴合原始数据。
之后,针对现有主流追踪算法过程繁琐,实现复杂的弱点,为三角单元棱边设置索引,简化遍历过程,并将闭合和非闭合两种等值线的追踪方法统一,大大简化追踪流程。
在等值线绘图中,采用TIN网格有两大优点:一是等值线连接方式唯一,不会出现矩形网格中的二义性问题;二是TIN 网格使用的是原始数据点,避免了网格拟合带来的误差,尤其在原始数据密集的情况下,能高度还原地形地貌。
本文的工作使得TIN网格下等值线的追踪更加方便快捷,从而可以较好的应用于地质建模领域。
参考文献
[1]王鹏.等值线快速绘图方法研究及系统设计与实现[D].电子科技大学,2011.
[2]成建梅,陈崇希,孙红林.三角网格等值线自动生成方法及程序实现[J].水利学报,1998,10(10):23-26.
[3]黄维科,王弘琪.在AutoCAD中用“焊接法”绘制等高线[J].公路与汽运,2005,1:29.
[4]李瑞雪.球物理等值线构建及属性建立[D].中南大学,2012.
[5]韩丽娜.地质等值线图的生成与绘制[D].西安:西安科技大学,2006.。