当前位置: 首页 > news >正文

离散点插值方法、等值线的绘制及平滑技巧

离散点插值方法、等值线的绘制及平滑技巧
吕勇平 戴景茹
(广东省气候应用研究所 510080)
  由于等值线图看起来非常直观、形象,因此在天气预报、气候预测分析等方面用得非常多,已成为预报员不可缺少的工具之一。如各等压面层的位势高度图、高空环流、温度及降水分布图等等。目前也有一些非常好的微机用绘图软件,如SUFER、GRADS 等。这些软件一般都只有DOS 版,在流行的WINDOWS平台上,虽然可以调用,但不能使用鼠标操作,故不如使用在WINDOWS 环境中开发的软件方便。因此,许多希望在自己开发的应用程序中能方便地显示及打印各类等值线图的人,都想知道绘制等值线图的原理方法。如何用格点资料绘制等值线图在文献〔1〕中已有介绍,而离散点(如气象台站) 的资料必须通过插值才能绘制等值线图。插值的方法有几种,比如三角网插值,它是将相邻的三个点连成一个个三角形,然后用文献〔1〕介绍的追踪法或其它方法在三角形边上进行插值。此方法的优点是需要插的值少,插值算法简单,数据处理量少。缺点是三角网的生成随意性很大,任意四个点可生成二组不同的三角形,不同的三角网插值得出的等值线也不可能完全相同。若人为固定三角网,当有资料缺测时,就不得不重新调整三角网,因此程序的通用性不高。目前比较流行的是通用性好的网格化方法。
1  离散点网格化
  理论上,离散点网格化可采用局部曲面拟
合方法,用多元回归方法建立
V ( X , Y) = a + bX + c Y
或二次方程
V ( X , Y) = a + bX + c Y + dX2 + eY2 + f X Y
所谓局部,是指采用拟合点周围一定范围的部
分离散点进行拟合。这种做法虽然在许多情
况下效果不错,但通常总是有些地方与实际情
况有较大出入。因此根据人工绘制等值线时
的直接内插方式,采用以下几个步骤。
111  定 点
(1) 根据离散点的分布范围确定整个网格
的范围及网格距,网格距不宜过大或过细。
(2) 确定每个离散点属于哪一个网格,也
即每个网格包含哪些离散点。
(3) 在欲插值的网格点周围一定范围内
(约3~4 个网格距如图1) ,按其4 个象限各
找一个合适的离散点,剔除距离插值点最远的
一个点(或其对面象限的点,使网格点处于另
三点组成的三角形之内) 。若有2 个象限找不
到离散点,则要判别是否有已插值的格点值可
替代,若也没有已插值可替代,则该格点暂时
不插值,并记下该格点位置,留最后补插值。
图1  离散点网格化
找合适点的原则:
A bs ( Xi - X0) ×A + A bs ( Yi - Y0) ×B = 最小
式中:X0 、Y0 ———为网格点坐标,
A、B ———为权重系数, (可根据其相邻象
限有无离散点不断调整) 。
112  插 值
当某离散点与网格点距离小于011 个网
9 6 199814 (增2)               广东气象
. 1995-2004 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.

格距时,可近似作为该网格点值。
一般情况下,先由3 个点插出与纬向线相
交点的2 个值,最后这2 个值内插出网格点上
的值。为了使内插值更准确,可以考虑所选的
3 个离散点各点与网格点的距离,内插时乘上
权重系数,距离越近权重系数越大。
当4 个离散点的值如图2 的情况时,有可
能是高中心,正常插值肯定小于这4 个点的最
大值,不成为高中心,因此要根据周围离散点
的值作特殊处理。
图2  高中心特殊处理
113  补 插
将初次无法进行插值记录下来的格点,重
新检查是否可插值。
114  外围点插值
采用此方法插值,得到的网格点值只能在
外围离散点所包的范围内。为了使插值的网
格点尽可能包围外围离散点,可以在外围采用
外延的方法,将插值网格点扩大一圈。方法
是:对于任一个无插值网格点,在其周围应有
8 个(边线上5 个) 方向,任何一个方向,只要
最近的两个格点有值,则可外推出该格点值,
将8 方向可能推出的两个以上的值求算术平
均作为该格点的插值。
115  技 巧
为方便下一步连等值线,所有格点的值不
要与等值线的值相等,可对插出的格点值增减
一个非常小的值ε(如0101) 。若周围有一个
格点的值比该值大,则减去ε,否则加上ε。
2  绘制等值线
  网格点资料如何绘制等值线,文献〔1〕介
绍了直接追踪法, 这里介绍另一种方法。
(1) 先将每个已插值的网格点与其右边及
下边两个网格点值进行比较,若满足条件
Sgn ( Z( x , y) - Z0) + Sgn ( Z ( x + 1 , y) - Z0) = 0
则记录一竖线段两个坐标
Sgn ( Z( x , y) - Z0) + Sgn ( Z ( x , y + 1) - Z0) = 0
则记录一横线段两个坐标
式中: Z ( 3 ) ———格点值;
Z0 ———等值线的值;
Sgn (  ) ———求正负号函数。
即把所有格点值看成只有两值,一是大于
Z0 ,一是小于Z0 (前面插值处理使任何一格点
值不等于Z0) ,最后可得到若干条线段(图3) 。
图3  两值化的等值线图
(2) 线段连接。对于某一线段X , 根据其
终点,顺序查找与之共点的起点或终点的线段
Y ,确定他们相连关系,根据线段X 两边格点
值插出等值线值的位置,作为等值线的一个点
坐标并记录下来。再根据Y 的终点或起点继
续查找..,当再也找不到时,即为该连线的
一个端点,同样要插值确定并记录该线终点坐
标。再回过头从线段X 的起点继续找,直至
找到另一个端点。当等值线起点终点属于同
一个网格时,该等值线是闭合的。
当某一线段起点终点均找不到与之相连
的其它线段时,可以考虑不要该线段。当某一
线段一头与另外3 个线段共点时(如图4) ,即
图4  多线段共点
0 7 广东气象         1998. 4 (增2)
. 1995-2004 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.

当等值线的值为10 时,按顺序会记下4 个线
段A、B、C、D ,4 个线段的都有一个共同的端
点。这种情况下则应根据等值线值与4 个格
点值,按相互间距离最近的两个相连,另外两
个相连来处理(图中虚线) 。
(3) 当组成一条折线的点少于4 时,可以
不要该条折线。
3  等值线的平滑
  前面连成的等值线,其实是一条条折线,
当网格距足够小时(可在粗网格上插细网格) ,
这些折线看起来就比较平滑。但这样处理有
两个缺点,一是要做很细的网格插值,但无论
如何细,曲线还是会随着图形的放大而逐渐变
成了折线。二是要记录很细的格点值及等值
线,可能就要开一个很大的数组,若要存放在
磁盘上则会占用较大的磁盘容量。为节省存
储空间,又要较精确地描绘曲线,唯一的办法
是增加数据处理工作量,必须从折点数据中找
到一系列的函数关系,使之完全通过这些折
点。根据这些函数加密数据点画出的折线是
看起来是连续而平滑的。图形越放大,需加密
数据点越多。目前,采用的平滑方法有多项式
拟合、样条函数、拉格郎日插值函数、斜轴抛物
线平均加权法等方法进行逐段拟合。不管是
哪种方法,直接使用都可能会出现不合理的情
况(图5) ,解决办法是先对拟合点或自变量作
些初步处理或称预处理,最后进行坐标(旋转)
变换后,用拉格郎日插值函数绘制平滑曲线。
图5  直接插值曲线
311  预处理
(1) 检查闭合线
当一条曲线的第一点与最后一点同属一
个网格时,则可以认为这条线是闭合的,在最
后点之后加上第一点坐标作为最后点。
(2) 合并紧邻点
相连的两个点距离小于012 个网格距时,
可在中间插一个点,而将这两个点取消。
(3) 将大折角减小
当3 个相邻点之间的夹角小于一定角度
时,通过逐步调整3 个点的Y 坐标,将夹角加
大(角β减小) 。可以通过多次的合并及减小
折角,使得曲线逐步平滑。
312  配函数绘线
加密数据点的拉氏插值函数程序如下:
For I = 1 To N :Z( I) = 1 :Next I
For I = 1 To N :For J = 1 To N
  If I < >J Then Z(J ) = Z(J ) ×(XX -
X( I) ) / (X(J ) - X( I) )
Next J :Next I
YX = 0 : For I = 1 To N : YX = YX + Z( I)
×Y( I) :Next I
N 是样本点数, 对应数组X ( ) 、Y ( ) ,
XX 是插值X 坐标, Y X 是插出的Y 坐标。
采用3 点样本插值的具体做法是:
(1) 采用3 点在第一、二点之间进行插值。
(2) 为了避免出现如图5 那样的不合理插
值,可采用坐标转换方式。即根据第一点与第
二点连线和第二点与第三点连线的夹角来确
定新坐标旋转角度γ(图6) ,使角α等于角β。
(3) 在新的坐标系下进行第一、二点之间
进行插值。插值步长可以根据网格距大小及
图6  确定新坐标旋转角(
下转第73 页)
1 7 199814 (增2)               广东气象
. 1995-2004 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.

数据文件调入后,返回Random 子菜单选
择Output , 填入输出文件名, 扩展名应为
1GRD ,然后选择Begin 即可将输入文件网格
化,生成输出文件。
Begin 生成的1GRD 文件,产生的数据分
布在给定的经、纬度极大值、极小值之间的每
一段。若直接由TOPO1EXE 调用,等值线将
布满整张图。为了不出现等值线,必须使用
Modify 进行空白化处理,空白化步骤如下:
(1) 编辑一空白化文件, 扩展名为生成
1BLN。格式:第一行: (点数- 1)  0
第二行:第一点横坐标(经度)  第一点纵
坐标(纬度)
第三行:第二点横坐标(经度)  第二点纵
坐标(纬度)
  ..
这些点相联成的闭合区域外将空白化。
(2) 在主菜单依次选择Modify →Blank ,出
现对话框,
在Input grid file : 填入欲空白化的
1GRD 文件,在Output grid file : 填入输
出文件,扩展名1GRD ,
在Blank file : 填入上一步生成的
1BLN 文件,
在Begin creating grid with current param2
eters ? 填YES ,即空白化生成输出文件。
312  运行TOPO1EXE
主菜单如下:
[ Topo ] Input Level Scale Conline Title
Border Xyline Grid Post Output Equip
用到的各选项功能如下:
Input :填入输入文件名,它是GRID1EXE
的输出文件。
Level :调整等值线的最大、最小值、间距。
Scale :调节屏幕图形的大小(F2 键显示) 。
Title :输入标题。
Post :将单点及其数值标注在指定位置,
若在此填入地图文件名,可调入地图。
Output :将显示的图形输出打印。
4  全屏幕修改
  SURFER 软件包绘制的等值线精度高,
光滑不足,可进行全屏幕修改。
F2 显示后再按任意键,图上出现一小十
字架,按AL T - E ,屏幕底部出现下面的字样:
X = 110  Y = 25  Z = 19173  ESC  
AL T - S  OR  NEW  Z:
表示当前小十字架坐标为(110 ,25) ,数值
为19173 ,填入新的Z 值,就可部分修改图形。
修改后的图形可按AL T - S 存盘。
5  等值线标值标准化
  上述方法绘制的等值线上标值有的没有,
有的多于两个,这是SURFER 的缺陷。笔者
对程序进行了修正,可绘制出等值线标值标准
的气候图。其基本思路是:采用汇编编译器找
出此部分地址,将修改后的子程序写入。
(上接第71 页) 图的放大倍数由程序自动确定。
每一个插值要还原到原坐标系下进行连线。
(4) 这样我们可用1 、2 、3 点绘出1 、2 点之
间曲线,2 、3 、4 点绘出2 、3 点之间曲线,最后2
点的曲线,只须将最后一点与倒数第三点调换
位置,调用同一个子程序便可绘出。
4  不足之处
  由于不能插出比样本离散点最大值更大
或最小值更小的值,因此,当高(低) 中心的离
散点的值只比等值线的值略大时,绘出的高
(低) 中心最内的闭合线所包围的面积比手工
绘的要小,这种情况需作进一步的改进。
参考文献
1  冯业荣,谷德军1DOS 下天气图形的屏幕表现和识别
(四) 1 广东气象,199614
3 7 199814 (增2)               广东气象
. 1995-2004 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.

相关文章:

  • sql使用正则表达式替换字符中的一个字
  • html水平镜像和垂直镜像,css实现镜像翻转的方法有哪些
  • 小胖子5个月了
  • 计算机等级考试两天是,2017计算机等级考试考前最后两天如何调整备考心态
  • Widows Mobile Workshop开发培训邀请函-西安站
  • 计算机基础作业3考试客户端答案,2015年12月份考试作业计算机基础第3次作业满分答案...
  • 深入探索Symbian活动对象开发
  • 计算机信息技术ppt,计算机信息技术基本.ppt
  • 大话2正在连接登录服务器,大话西游手游服务器连接失败进不去解决办法
  • SqlServer下数据库链接的使用方法
  • outlook邮箱怎么配置服务器地址多少,Outlook如何设置?Outlook设置方法
  • 将SQL Server 2005中的数据同步到Oracle中
  • 服务器日志文件可以自动删除吗,宝塔面板/www/server/total/logs/里面日志文件 删除方法...
  • 热烈庆祝自己的blog的点击量突破5000
  • excel打开时显示只读或服务器没响应而打不开怎么办,Excel打开时显示只读或服务器没响应而打不开怎么办...
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • C++11: atomic 头文件
  • css系列之关于字体的事
  • DOM的那些事
  • eclipse的离线汉化
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • git 常用命令
  • gitlab-ci配置详解(一)
  • Java到底能干嘛?
  • Java教程_软件开发基础
  • Python学习笔记 字符串拼接
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 复习Javascript专题(四):js中的深浅拷贝
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 记录:CentOS7.2配置LNMP环境记录
  • 记录一下第一次使用npm
  • 力扣(LeetCode)21
  • 前端临床手札——文件上传
  • 前端之Sass/Scss实战笔记
  • 前端自动化解决方案
  • 使用SAX解析XML
  • 线性表及其算法(java实现)
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #define 用法
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (4)logging(日志模块)
  • (C语言)球球大作战
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • . Flume面试题
  • .Net - 类的介绍
  • .Net 4.0并行库实用性演练
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET4.0并行计算技术基础(1)
  • .NET分布式缓存Memcached从入门到实战
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)