摘要:河道水面线推算是流域防洪和兴利规划的基础工作。笔者运用VB6.0计算机语言,编制了可视化的水面线推算程序,通过便捷的人机交互界面和方便的数据接口,提高了工作效率。本文介绍了可视化编程的思路及一些基本方法。 关键词:水面线推算,VB,可视化 1 引言 河道治理经常需要推算河道水面线。传统的计算方法有试算法和图解法,不仅十分烦琐,而且精度不高。随着计算机技术的快速发展和各种开发平台及应用软件的涌现,人们不仅摆脱了手工计算的繁复工作,实现了计算的程序化,而且,可视化开发平台为实现交互式演算创造了条件,极大地提高了工作效率。笔者运用VB6.0计算机语言编制了可视化水面线计算程序,在南水北调东线工程规划等项目中得到了应用,本文介绍了实现可视化计算的主要方法。
摘要:河道水面线推算是流域防洪和兴利规划的基础工作。笔者运用VB6.0计算机语言,编制了可视化的水面线推算程序,通过便捷的人机交互界面和方便的数据接口,提高了工作效率。本文介绍了可视化编程的思路及一些基本方法。
关键词:水面线推算,VB,可视化
1 引言
河道治理经常需要推算河道水面线。传统的计算方法有试算法和图解法,不仅十分烦琐,而且精度不高。随着计算机技术的快速发展和各种开发平台及应用软件的涌现,人们不仅摆脱了手工计算的繁复工作,实现了计算的程序化,而且,可视化开发平台为实现交互式演算创造了条件,极大地提高了工作效率。笔者运用VB6.0计算机语言编制了可视化水面线计算程序,在南水北调东线工程规划等项目中得到了应用,本文介绍了实现可视化计算的主要方法。
2 VB6.0简介
Visual Basic 6.0是基于Windows平台的可视化开发工具,实现了面向对象的编程,简单易学,特别便以设计人机交互界面及生成图形,实现计算过程和结果的可视化。
3 水面线推算方法
3.1 基本方程
根据伯努力能量方程式的理论,推算水面线基本公式为:
△Z=Q^2(α/2g(1/A2^2-1/A1^2)+(1/K^2)l)
3.2 推算方法
采用逐段试算法[1],根据工程或实际情况的需要,将需进行水面线计算的整个河段,分成若干个计算河段,从下游到上游对这些计算河段逐段进行计算求解,从而可得到整个河段的水面线。采用二等分迭代法进行计算。
3.3 断面特征数据计算
横断面数据文件采用通用格式,即桩号、断面点数、起点距、高程、起点距、高程…。
以各测点作已知水面或假定水面的垂线,形成了三角形、矩形或梯形断面,计算相应的面积和湿周,对计算方法来说矩形和三角形均为梯形的特例,均可利用相同的程序完成,考虑到规划阶段受资料限制,糙率不可能定得太细,且要进行多方案比较,要求快捷、简便,各分段(河段)只设深槽和滩地两种糙率。根据各梯形断面所处的位置,分别计算不同的糙率相应的流量模数(K)。
4 水面线计算的可视化实现
4.1 可视化功能
包括从断面数据文件读入数据,在“选断面特征值”窗体上绘出带有座标方格横断图,以鼠标点击横断图,分别确定过水断面的有效边界、滩地与深槽的分界点、深泓、两堤顶的位置,输入断面名称、糙率、纵断桩号及测量断面与平均流向相互不垂直的偏角(见图1);在“推算水面线”窗体内,生成纵断图,以鼠标点击选择任意上下游两断面进行之间的水面线计算,可随时改变起始断面水位、糙率、流量,将不同边界条件和水力参数的推算结果绘在纵断图上,便以比较和选择。点击纵断图可即时查询对应位置横断的平均流速、水位、堤顶高程等信息(见图2)。
4.2 可视化实现
(1)图形的生成
首先利用以下语句得到窗口的大小(象素个数),并适当缩小(*17/20)后,确定绘图的窗口。由于VB是以左上角为缺省原点,需通过必要的语句进行坐标系变换。
Height = Screen.Height * 17 / 20 ‘获得窗口大小
Width = Screen.Width ‘获得窗口大小
ScaleTop = Height * 0.85
ScaleLeft = -Width * 0.05
ScaleWidth = Width * 0.95
ScaleHeight = -Height * 1 ‘坐标系变换
w = Width * 0.8 ‘确定绘制断面的屏幕宽度
h = Height * 0.55 ‘确定绘制断面的屏幕高度
在确定绘制图形的窗口之后,为使测量空间坐标与屏幕坐标能够一一对应,并达到绘图窗口正好容纳下整个断面图,需计算两者之间的比例系数,以后都以该系数进行转换。以x1、y1代表最小空间坐标,以x2、y2代表最大值,则比例系数为:
kx = w / (x2 - x1)
ky = h / (y2 - y1)
线条绘制以循环执行Line语句实现。
(2)屏幕坐标的获取及空间坐标的转换
VB6.0提供了获取鼠标位置的语句,并对鼠标点击事件进行响应,利用此功能,可实现断面特征点(如深泓等)及纵断图中的横断面选择,进行相关数据查询,计算任意两测量点之间的距离和边坡。计算所有测量点与点击坐标的距离,最近的点即为所要的测量点。
获取鼠标位置的语句为:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.Text = X ‘得到鼠标X坐标
Text2.Text = Y ‘得到鼠标X坐标
If Button = 1 Then ‘如果点击屏幕就转换为空间坐标
x0 = X / kx + x1
y0 = Y / ky + y1
End If