浅谈跑道视距检查的编程技术

2014-08-27 00:13伍祥荣
中国高新技术企业 2014年16期
关键词:编程技术

伍祥荣

摘要:文章通过对跑道纵坡数学研究并利用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].

猜你喜欢
编程技术
复杂零件的数控加工工艺及编程技术分析
对新时期机械数控加工编程技术的探究
计算机图像处理与变成技术在检验中的应用
基于Android下电子书阅读器的技术研究
数据库基于计算机软件工程的编程技术
高职院校学生如何学好数控编程技术类课程
复杂型面数控加工工艺及编程技术的分析
浅析PLC编程技术在电工电子实验中的应用
基于计算机软件工程的数据库编程技术
C语言编程技术的分析研究