浅谈跑道视距检查的编程技术
2014-08-27伍祥荣
伍祥荣
摘要:文章通过对跑道纵坡数学研究并利用VS2010编程技术解决了跑道视距检查问题。在已知跑道各段坡度、坡长和变坡竖曲线曲率半径或者已有道面各分块高程后,通过建立平面坐标系,分析跑道各坡段方程、连接相邻坡段之间的竖曲线方程和视线方程后,设计出跑道视距检查程序。通过试验,设计出的跑道视距检查程序不仅能检查新建跑道视距问题,而且能检查已有道面跑道视距问题。
关键词:跑道视距;视距检查;平面坐标系;编程技术
中图分类号:V351文献标识码:A文章编号:1009-2374(2014)24-0095-04
在民用机场飞行区地势设计中,跑道纵断面设计对整个机场土石方量影响非常大,特别在西南地区修建机场,跑道纵坡对整个机场的投资影响更为明显。在纵断面设计中,通常会根据原地形走势分段设计纵坡,这就不可避免地需要进行跑道视距检查。
本文通过分析跑道各个坡段坡度、坡长及变坡竖曲线曲率半径之间的数学关系,推导出了跑道纵断面上各点的高程,然后比较跑道纵断面高程和相应段的视线高程之间的大小,根据大小判断跑道视距是否满足要求。
1跑道纵断面高程分析
1.1求各坡段的方程
在进行跑道纵断面设计中,通常先设计出每一段的坡度和坡长,即坡度和坡长已知。设第一坡段的坡长和坡度分别为pc1和pd1(升坡为正,降坡为负),……第n坡段的坡长和坡度分别为pcn和pdn。
通过建立平面坐标系,定义第一坡段的起点为(x0,y0)=(0,0),终点为(x1,y1),通过两点式方程可知第一坡段的平面方程为:
(y-y0)/(x-x0)=(y1-y0)/(x1-x0)
pd1=(y1-y0)/(x1-x0)
x1=pc1
y1=pc1×pd1
经整理:y=pd1×(x-x0)+y0
第n坡段的起点为(xn-1,yn-1),终点为(xn,yn),通过两点式方程可知第n坡段的平面方程为:
y=pdn×(x-xn-1)+yn-1
xn=pci
yn=(pci×pdi)
1.2求连接各坡段的竖曲线方程
要想求得连接各坡段的竖曲线方程,必先求出竖曲线的圆心坐标,设连接第n-1段跑道和n段坡段的竖曲线半径为Rn、圆心坐标为(Onx,Ony)。分以下两种情况:
1.2.1当pdn-1<pdn,即后一坡段的坡段大于前一坡段的坡度时,连接这两坡段的竖曲线为凹曲线。竖曲线圆心坐标为以下两条直线的交点:
y=pdn-1(x-xn-2)+yn-2+Rn(1+pdn-12)0.5
y=pdn(x-xn-1)+yn-1+Rn(1+pdn2)0.5
即:
Onx=[pdnxn-1-pdn-1xn-2+Rn(1+pdn-12)0.5-Rn(1+pdn2)0.5+yn-2-yn-1]/(pdn-pdn-1)
Ony=pdn-1{[pdnxn-1-pdn-1xn-2+Rn(1+pdn-12)0.5-Rn(1+pdn2)0.5+yn-2-yn-1]/(pdn-pdn-1)-xn-2}+yn-2+Rn(1+pdn-12)0.5
1.2.2当pdn-1>pdn,即后一坡段的坡段小于前一坡段的坡度时,连接这两坡段的竖曲线为凸曲线。竖曲线圆心坐标为以下两条直线的交点:
y=pdn-1(x-xn-2)+yn-2-Rn(1+pdn-12)0.5
y=pdn(x-xn-1)+yn-1-Rn(1+pdn2)0.5
即:
Onx=[pdnxn-1-pdn-1xn-2-Rn(1+pdn-12)0.5+Rn(1+pdn2)0.5+yn-2-yn-1]/(pdn-pdn-1)
Ony=pdn-1{[pdnxn-1-pdn-1xn-2-Rn(1+pdn-12)0.5+Rn(1+pdn2)0.5+yn-2-yn-1]/(pdn-pdn-1)-xn-2}+yn-2-Rn(1+pdn-12)0.5
1.2.3求竖曲线方程。在已知圆心坐标及圆半径的情况下,圆的方程为:
(x-Onx)2+(y-Ony)2=Rn2
1.3求竖曲线与其前坡段和后坡段的交点
1.3.1竖曲线与其前坡段的交点。设连接第n-1段坡段和n段坡段的竖曲线On,则On和第n-1段坡段的交点为下列两直线的交点(xnq,ynq):
y=pdn-1×(x-xn-2)+yn-2
y=(Onx–x)/pdn-1+Ony
xnq=(Ony+Onx/pdn-1+pdn-1xn-2-yn-2)/(pdn-1+1/pdn-1)
ynq=pdn-1×[(Ony+Onx/pdn-1+pdn-1xn-2-yn-2)/(pdn-1+1/pdn-1)-xn-2]+yn-2
1.3.2竖曲线与其后坡段的交点。设连接第n-1段坡段和n段坡段的竖曲线On,则On和第n段坡段的交点为下列两直线的交点(xnh,ynh):
y=pdn×(x-xn-1)+yn-1
y=(Onx–x)/pdn+Ony
即:
xnh=(Ony+Onx/pdn+pdnxn-1-yn-1)/(pdn+1/pdn)
ynh=pdn×[(Ony+Onx/pdn+pdnxn-1-yn-1)/(pdn+1/pdn)-xn-1]+yn-1
2视线高程分析
通过前面跑道纵断面高程分析,然后建立一系列方程可以求出跑道纵断面上各点的高程。
根据《民用机场飞行区技术标准》(MH5001-2013)6.1.6.2条规定,当跑道纵向变坡不能避免时,应具有下列无障碍视线:
——飞行区指标Ⅱ为C、D、E、F的跑道,在高于跑道3m的任何一点能通视至少半条跑道长度内的高于跑道3m的任何其他点;
——飞行区指标Ⅱ为B的跑道,在高于跑道2m的任何一点能通视至少半条跑道长度内的高于跑道2m的任何其他点;
——飞行区指标Ⅱ为A的跑道,在高于跑道1.5m的任何一点能通视至少半条跑道长度内的高于跑道1.5m的任何其他点。
设跑道长度为pdqc,第n段视线检查的范围为(a,b),有b=a+pdqc/2,对应于a点的跑道高程为ya,对应于b点的跑道高程为yb,在高于跑道hm的任何一点能通视至少半条跑道长度内的高于跑道hm的任何其他点,则此范围内的跑道视线高程方程为:
y=2(yb-ya)(x-a)/pdqc+ya+h
3视线高程和跑道纵断面高程的比较
在已知跑道纵断面高程和相应需要检查段视线高程的基础上,通过比较两者相应点的高程,如果视线高程高于跑道纵断面高程则视距检查符合要求,反之则视距检查不符合要求。
4程序设计
通过对上述分析过程的整理,采用VS2010编程设计,完整的实现了跑道视距检查问题。
程序:
intmain()
{
intmoshi;
cin>>moshi;(输入视距检查模式,1为新建工程;2为既有工程)
if(moshi==1)
{
intbpds;//声明变坡段数
struct
{
intpc;//坡长
doublepd;//坡度
}pdpc[100];//记录坡度和坡长
cin>>bpds;//输入变坡段数
intnum=0;//总坡长统计
intbj[50];//声明竖曲线半径
intbc;//跑道高程和视线高程比较时所取的步长
doublexdg;//相对于跑道的物体高
struct
{
intx;//横坐标
doubley;//纵坐标
}pcdd[100];//坡长端点坐标
FILE*fp2;//记录坡长端点坐标文 struct
{
intx;//横坐标
doubley;//纵坐标
}pdgc[10000];//跑道高程坐标
FILE*fp1;//记录跑道上按步长写入的点纵横坐标
intp=0;
intb=0;
for(intq=0;q { while(pcdd[q].x<=p&&p<=pcdd[q+1].x&&p<=num) { pdgc[b].x=p; pdgc[b].y=(pcdd[q+1].y-pcdd[q].y)/(pcdd[q+1].x-pcdd[q].x)*(p-pcdd[q].x)+pcdd[q].y; p=p+bc; b=b+1; } } struct { doublex;//横坐标 doubley;//纵坐标 }yxzb[50];//竖曲线圆心坐标 FILE*fp3;//记录竖曲线圆心纵横坐标 for(intjd=0;jd { if(pdpc[jd+1].pd<=pdpc[jd+2].pd) if(pdpc[jd+1].pd==pdpc[jd+2].pd) else { yxzb[jd].x=(pcdd[jd].x*pdpc[jd+1].pd-pcdd[jd+1].x*pdpc[jd+2].pd+pcdd[jd+1].y-pcdd[jd].y+bj[jd]*(pow((1.0000+pow(pdpc[jd+2].pd,2.0)),0.5)-pow((1.0000+pow(pdpc[jd+1].pd,2.0)),0.5)))/(pdpc[jd+1].pd-pdpc[jd+2].pd); yxzb[jd].y=pcdd[jd].y+pdpc[jd+1].pd*(yxzb[jd].x-pcdd[jd].x)+bj[jd]*pow((1.0000+pow(pdpc[jd+1].pd,2.0)),0.5); } else { yxzb[jd].x=(pcdd[jd].x*pdpc[jd+1].pd-pcdd[jd+1].x*pdpc[jd+2].pd+pcdd[jd+1].y-pcdd[jd].y+bj[jd]*(pow((1.0000+pow(pdpc[jd+1].pd,2.0)),0.5)-pow((1.0000+pow(pdpc[jd+2].pd,2.0)),0.5)))/(pdpc[jd+1].pd-pdpc[jd+2].pd); yxzb[jd].y=pcdd[jd].y+pdpc[jd+1].pd*(yxzb[jd].x-pcdd[jd].x)-bj[jd]*pow((1.0000+pow(pdpc[jd+1].pd,2.0)),0.5); } fprintf(fp3,”%lf
%lf
”,yxzb[jd].x,yxzb[jd].y);//将竖曲线圆心坐标写入文件 } struct { doublex;//横坐标 doubley;//纵坐标 }yzzjd[100];//竖曲线与直线的左交点坐标 struct { doublex;//横坐标 doubley;//纵坐标 }yzyjd[100];//竖曲线与直线的右交点坐标 FILE*fp4;//记录竖曲线与直线交点的纵横坐标 for(intjd=0;jd { yzzjd[jd].x=(yxzb[jd].y+yxzb[jd].x/pdpc[jd+1].pd+pdpc[jd+1].pd*pcdd[jd].x-pcdd[jd].y)/(pdpc[jd+1].pd+1/pdpc[jd+1].pd);//竖曲线与左边直线的交点横坐标 yzzjd[jd].y=pcdd[jd].y+pdpc[jd+1].pd*yzzjd[jd].x-pdpc[jd+1].pd*pcdd[jd].x;//竖曲线与左边直线的交点纵坐标 yzyjd[jd].x=(yxzb[jd].y+yxzb[jd].x/pdpc[jd+2].pd+pdpc[jd+2].pd*pcdd[jd+1].x-pcdd[jd+1].y)/(pdpc[jd+2].pd+1/pdpc[jd+2].pd);//竖曲线与右边直线的交点横坐标 yzyjd[jd].y=pcdd[jd+1].y+pdpc[jd+2].pd*yzyjd[jd].x-pdpc[jd+2].pd*pcdd[jd+1].x;//竖曲线与右边直线的交点纵坐标 fprintf(fp4,”%lf
%lf
”,yzzjd[jd].x,yzzjd[jd].y);//写入竖曲线和竖曲线左边直线的交点坐标 fprintf(fp4,”%lf
%lf
”,yzyjd[jd].x,yzyjd[jd].y);//写入竖曲线和竖曲线右边直线的交点坐标 doublejhz=bc*ceil(yzzjd[jd].x/bc); doublejhy=bc*floor(yzyjd[jd].x/bc); intgzz=(int)ceil(yzzjd[jd].x/bc); while(jhz<=jhy) { if(pdpc[jd+1].pd pdgc[gzz].y=yxzb[jd].y-pow((pow(bj[jd],2.0)-pow((jhz-yxzb[jd].x),2.0)),0.5);//对两直线之间的凹圆弧高程重新赋值 else pdgc[gzz].y=yxzb[jd].y+pow((pow(bj[jd],2.0)-pow((jhz-yxzb[jd].x),2.0)),0.5);//对两直线之间的凸圆弧高程重新赋值 jhz=jhz+bc; gzz++; } } intbb=0; intqq=num/bc; for(intq=0;q { fprintf(fp1,”%8d
%lf
”,pdgc[q].x,pdgc[q].y); } intpp=qq/2; struct { intx;//横坐标 doubley;//纵坐标 }sxgc[10000];//视线高程坐标 FILE*fp5;//记录视线高程的纵横坐标 FILE*fp6;//记录未通过视距检查的起始点横坐标 for(intq=0;q<=qq/2;q++)//视线高程和跑道高程相比较 { intzhzb=pdgc[q].x; for(intsy=0;sy<=qq/2;sy++) { sxgc[sy].x=zhzb; sxgc[sy].y=2*(pdgc[pp].y-pdgc[q].y)*(sxgc[sy].x-pdgc[q].x)/num+pdgc[q].y+xdg; zhzb=zhzb+bc; fprintf(fp5,”%8d
%lf
”,sxgc[sy].x,sxgc[sy].y); } inttu=q; for(intsk=0;sk<=qq/2;sk++) { if(sxgc[sk].y { cout< fprintf(fp6,”%d
%d
”,q*bc,num/2+q*bc); break; } tu++; } cout<<”正在进行检查,请稍候......”< pp++; } fclose(fp1); fclose(fp2); fclose(fp3); fclose(fp4); fclose(fp5); fclose(fp6); getch(); } else { 省略既有跑道高程的视距检查 } return0; } 图1跑道纵坡示意图 5结语 通过对跑道纵断面高程和相应段视线高程逐一比较,能准确的判断跑道视距是否满足规范要求,为跑道纵断面的科学设计奠定了基础。 参考文献 [1] 民用机场飞行区技术标准(MH5001-2013)[S].