伍祥榮
摘要:文章通過對跑道縱坡數學研究并利用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].