袁宝来史本宁(中交天津港航勘察设计研究院有限公司)
摘要:为了对测量数据的准确性进行估计判断,准确掌握前段时间的施工效果,以便有针对性地对下阶段的施工进行合理安排,经常需要计算航道各施工区段内及航槽外的平均水深,对测量数据进行后处理。但原有的航道水深计算软件已不能适应新工程的需要。因此,编制新的水深计算程序成为亟待解决的问题。
关键词:航道水深计算
0引言
某航道全长约43.5千米,底宽170米(其中W9+000~W14+000段180米),设计水深-14.0米(其中W9+000~W14+000段-15.0米),坡比1:5。根据航道拓宽工程要求将航道单向向南拓宽30米,即底宽达到200米(其中W9+000~W14+000段210米),设计底标高维持不变,超深0.6米,超宽3米,坡比1:5。
1程序设计的基本原理
考虑在平面直角坐标系内,点和直线有三种位置关系:点在直线的上侧、点在直线的下侧、点恰在直线上
直线AB的解析方程可由直线经过的两点坐标求出,计算公式为:f(x,y)=y-kx-y1+kx1=0,x1、y1、x2和y2为直线经过的两点的横、纵坐标。
则AB的解析方程为:
f(x,y)=y-x+1=0。
对于在直线上侧的一点C(0,0),将其坐标代入到方程中可使:
f(0,0)=0-0+1=1>0;
同理,对于在直线下侧的一点E(1,-1),将其坐标代入到方程中可使:
f(1,-1)=-1-1+1=-1<0;
对于恰在直线上的一点D(0.5,-0.5),将其坐标代入到方程中可使:
f(0.5,-0.5)=-0.5-0.5+1=0。
由此可见,当点与直线的位置关系不同时,将点坐标代入到直线解析方程中所得到的方程值的符号不同,利用此方法可判断坐标点与直线的相对位置关系。
考虑平面内点到直线的距离为:
其中:f(x,y)=0为直线的解析方程;
x0和y0为直线外一点的横、纵坐标;
其中:x1、y1、x2和y2为直线经过的两点的横、纵坐标。
由该式计算出的距离恒为正值,如果将式中的绝对值符号去掉
则J*将在实数范围内取值,并且f(x0,y0)的符号决定了J*的符号。这样,J*的数值不仅可以表示点到直线的距离,并能表示点和直线的位置关系。
假定图3中虚线所示矩形区域为航道的一个施工区段,则其范围内的点满足下列关系:0<J1*<b;
其中:J1*为平面内一点到矩形左侧实线的广义距离,由于该实线具有标示点的位置的作用,称之为定标直线;
J2*为平面内一点到航道中心线的广义距离;
a为矩形施工区段的宽度;
b为矩形施工区段的长度。
通过这种方法,实现了平面内区域的条块分割,从而判断水深测点的具体位置,进而对航道施工区段内和航道槽外的平均水深、最大水深、最小水深和测点分布情况等水深指标进行计算。
2程序的编制及使用说明
根据以上计算原理,编制了航道水深计算程序。程序采用C语言进行编写,可解决航道的水深计算问题。
使用本程序时,首先需将水深文件存于“水深数据源”文件夹内,本程序不规定水深文件名称的字符个数,与以往类似程序相比,应用较为方便。进行计算时,点击主程序“航道水深计算.exe”,按提示输入水深文件名和测点水深的分析区间数值,程序即可进行运算。当水深文件名输入错误,即“水深数据源”文件夹中找不到该水深文件时,程序将提示重新输入。
程序将生成一个excel文件以输出运算结果。通过HYPACK软件内的边界文件功能进行验算,证明程序的运算精度符合要求。
3程序的特点
本程序有以下几个特点:
3.1程序可生成可执行文件(﹡.exe),而不必依赖于foxpro等类似的编译软件进行使用。
3.2为了确保精度,程序全过程对变量采用双精度存储、运算。
3.3所有的中间变量全部在内存中存储,程序运算结束后自动释放。程序运算的过程中将产生大量的中间变量,以往类似的计算软件多采取分步计算的方法,将一些关键的数据写入数据库存入硬盘,这种处理方法符合模块化的程序设计思想,程序较易维护,但在数据的反复读写过程中可能造成数据有效数字的丢失,比如某一个数据为“1.00412”,用两位有效数字写入数据库就变为“1.00”,后续计算再将其读出并对其进行“是否小于等于1”的判断,则会得到相反的结果,从而影响运算精度。
本程序应用的这种变量存储方式解决了上述问题,从而确保了运算精度。目前一般的计算机的内存多在128M以上,为每一个中间变量分配一定的内存空间并不会影响计算机的正常工作。
3.4为了避免累积误差,程序对航道进行横向分块,使用多条定标直线。在测定定标直线的位置时,难免有微小的角度误差,随着计算的逐步推进,该误差将被逐渐放大,从而对计算精度产生一定影响。假定在测定初始定标直线的位置时有0.1′角的微小误差,如果自始至终只使用一条定标直线,则该误差将被几十千米的航道长度充分放大,进而影响计算精度。其中:
△L为由于定标直线角度误差引起的航道偏离误差;
△α为定标直线角度误差,以角度数表示,假定为0.1′角;
L为水深测点到定标直线的距离。
当L为40千米时:
即航道走向在距离定标直线40千米处偏离了1.164米,将对计算精度产生一定影响;
当L为4千米时:
即航道走向在距离定标直线4千米处偏离了0.116米,对计算精度的影响较小。
本程序采用多条定标直线,使水深测点到定标直线的距离不大于4千米,确保了运算的精确性。
3.5由于程序运算过程中只对水深文件(﹡.xyz)进行读取,只在结果文件中写数据,省略了运算过程中大量的文件读写操作,故程序的运算速度比较快。
3.6由于程序在读写文件时采用了相对路径方式,程序文件夹可存储在磁盘任意位置,相比于以往的类似程序必须存储在硬盘固定位置,应用较为方便。
3.7程序解决了航道W8+850~W9+000和W14+000~W14+150段由于航道底宽变化引起的过渡段的水深计算问题。
3.8程序的操作步骤比较简便。
4程序的发展
每一条航道都有一个特定的特点。目前该程序尚未能解决程序通用性的问题,即如果需要进行其他航道的水深计算,则必须对程序源代码进行修改。程序下一步发展将致力于解决这方面的问题,即只需输入必要的航道尺度参数即可进行相应的水深计算。