摘 要:本文提出了一种新的等值点位于网格点时,对等值点的调整方法;在分析已有等值线追踪算法的基础上,提出了一种基于TIN网格的快速等值线追踪算法,实验表明该算法具有较高的执行效率。
关键词:等值线 等值点 TIN网格
等值线图能直观地展示数据的变化趋势,是众多领域展示成果的重要图件之一,被广泛应用于石油勘探、矿物开采、气象预报等众多领域。等值线的绘制是指从大量采样数据中提取出具有相同值的点的信息,并生成形态完整、位置精确的等值线的过程,包括等值线网格化、等值线追踪、等值线光滑、等值线填充与标注几个处理步骤[1]。其中等值线网格化是对网格边进行线性插值,进而求出等值点的过程。等值线的追踪则是利用等值线网格化产生的等值点数据,将其中相同等值点进行连接的过程。等值线追踪的传统方法是,在网格单元边上选取一个等值点,寻找邻近的等值点,顺次连接成线,直到等值点回到起始点或位于工区边界,完成单条等值线的追踪,并以此为基础遍历所有的等值点。在追踪过程中,等值线分为闭合与非闭合两种情形,需要先追踪开曲线,再追踪闭曲线,否则不能确保结果正确。特定的搜索顺序提高了处理过程的复杂性,增加了网格单元的重复搜索次数,致使效率低下。
针对此类问题,很多学者提出了在不规则三角网(TIN网格)下的改进方法,成建梅[2]等提出为三角形三边分别赋予不同的权值,以方便确定三角形单元内等值点的位置。但是这只是对局部的改进,未涉及等值线追踪过程的优化。黄维科[3]等基于三角形单元内等值线段容易确定的事实,提出了使用“焊接法”将相同的等值点连接从而生成整条等值线的方法。但是在搜索等值线段间的共同等值点时,需要对已确定的等值线段进行遍历,执行效率提高幅度有限;并且使用的是简单的坐标值判别法,容易因机器误差引起错误结果。
1 改进的等值线生成算法
现在常用的用于生成等值线的网格有矩形网格、TIN网格等。综合考虑,本文选用TIN网格。生成等值线的主要步骤中,等值线的网格化处理与等值线的追踪是基础与关键,直接影响等值线的准确度和生成速度。接下来将针对TIN网格,介绍对这两个过程的改进。
1.1 等值线网格化处理方法
在TIN网格中,等值线网格化处理的作用就是在网格边上计算出各等值点,为之后的等值线追踪提供基础数据。以三角形单元为单位,遍历整个TIN网格,判断三角形棱边上有无等值点[4],使用公式:
其中z为等值线的高程,zi,zj是对应三角形顶点的高程。若存在,则等值点的坐标为:
1.2 等值线追踪算法
本文采用的追踪思想即是:从一个等值点出发,沿任意方向搜索等值点,直到回到起点或者到达边界;再从起点开始沿反向搜索未经过的点。最终生成一条等值线。
为了提高搜索效率,注意到在经过网格化处理后,可以保证每条三角形棱边至多有一个等值点,而与该等值点相连的等值点至多有两个。所以在以三角形单元为单位遍历TIN网格时,给每一棱边指定唯一的序号,若找出等值点,则记录与之相连的等值点所处的棱边。接下来以棱边为基本单元追踪等值线,这样的好处是便于构造顺序存储结构,进而使用随机存取机制,加快追踪速度。
序号的引入将问题转化为简单的数值匹配,避免了常规算法中使用的方位信息。同时可以忽略常规等值线追踪算法中的特定追踪顺序,对于拓扑复杂TIN网格,不考虑三角形棱边是否位于边界上可以大大简化处理的复杂度。
2 算法实现
2.1 数据结构
程序要兼顾按索引查找时的快捷和等值点插入的便利,故选择混合存储结构。具体实现如下。