土木在线论坛 \ 水利工程 \ 水利软件 \ 河道水面线计算的可视化实现方法及软件

河道水面线计算的可视化实现方法及软件

发布于:2019-01-24 16:08:24 来自:水利工程/水利软件 [复制转发]

摘要:河道水面线推算是流域防洪和兴利规划的基础工作。笔者运用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

全部回复(0 )

只看楼主 我来说两句抢沙发
这个家伙什么也没有留下。。。

水利软件

返回版块

13.32 万条内容 · 178 人订阅

猜你喜欢

阅读下一篇

水库库容查询软件2.0

对原有软件进行结构优化,增加简单的交互式界面,整合了部分功能,虽然只是阉割版的,to be continue!其他的水库只要把后台文件的水位库容对应关系替换自己的就行。 非常非常非常重要提示:输入数据后记得按回车!

回帖成功

经验值 +10