胡 博
(秦皇島市測(cè)繪大隊(duì) 河北秦皇島 066001)
在隧道工程中,快速、準(zhǔn)確地計(jì)算隧道的超欠挖面積,對(duì)保障施工安全、控制工程成本、推進(jìn)工程進(jìn)度有著重要意義。智能全站儀的出現(xiàn),為隧道斷面檢測(cè)提供了強(qiáng)大、便捷的方法。通過編寫相應(yīng)的應(yīng)用程序,可以實(shí)現(xiàn)隧道斷面的自動(dòng)化檢測(cè)和實(shí)時(shí)計(jì)算。目前,已有大量針對(duì)隧道斷面檢測(cè)的機(jī)載應(yīng)用程序的研究,但現(xiàn)有的超欠挖面積計(jì)算的方法,多是將超挖面積和欠挖面積分解成多個(gè)三角形,再對(duì)各個(gè)三角形的面積求和,計(jì)算出單個(gè)超欠挖區(qū)域的面積[1,2]。此方法計(jì)算過程較為繁瑣,需要判斷不同的隧道斷面情形,并且將弧形的隧道設(shè)計(jì)斷面分解為若干個(gè)小三角形,是一種近似計(jì)算的方法,并非嚴(yán)密計(jì)算的方法。
基此,本文提出應(yīng)用格林公式,以快速、精確計(jì)算隧道超欠挖面積。
格林公式,描述了平面上沿閉曲線L對(duì)坐標(biāo)的曲線積分與曲線L所圍成封閉區(qū)域D上的二重積分之間的密切關(guān)系,提供了計(jì)算封閉區(qū)域面積的精確方法[3],由其推導(dǎo)出的面積表達(dá)式為:
由于隧道斷面線實(shí)質(zhì)上為平面上的直線和曲線,因此,應(yīng)用格林公式計(jì)算隧道超欠挖面積具有可行性。本文由此出發(fā),研究適用于智能型全站儀編程的數(shù)學(xué)模型、數(shù)據(jù)結(jié)構(gòu)以及程序算法。
首先,建立斷面坐標(biāo)系,坐標(biāo)系原點(diǎn)定義為軌面零高程線和斷面中心軸的交點(diǎn),以軌面零高程線為X軸,面向隧道前進(jìn)方向水平向右為正方向,以斷面中心軸為Y軸,豎直向上為正方向。
如圖1所示,在斷面坐標(biāo)系下中,虛線為設(shè)計(jì)斷面線,實(shí)線為實(shí)測(cè)斷面點(diǎn)的連線,JD1、 JD2、JD3……為隧道斷面實(shí)測(cè)點(diǎn)連線與設(shè)計(jì)斷面的若干交點(diǎn)。JD1和JD2、JD2和JD3之間的實(shí)測(cè)線段和設(shè)計(jì)線段分別構(gòu)成了封閉的面域A12和A23。面域A12的面積為JD1和JD2之間的超挖面積,面積A23的面積為JD2和JD3之間的欠挖面積。
圖1 實(shí)測(cè)與設(shè)計(jì)元素圍成的超欠挖面域
基此,將包圍超欠挖面域的封閉路徑的前進(jìn)方向定義為:“從起始交點(diǎn)出發(fā),沿實(shí)測(cè)線段順時(shí)針方向行進(jìn),到達(dá)下個(gè)交點(diǎn)后沿設(shè)計(jì)線段逆時(shí)針返回”。如圖1所示,包圍面域A12的封閉曲線的路徑為:由JD1出發(fā)沿實(shí)測(cè)線段順時(shí)針行進(jìn)到JD2,再由JD2沿設(shè)計(jì)斷面線逆時(shí)針行進(jìn)回到JD1;包圍面域A23的封閉曲線的路徑為:由JD2沿實(shí)測(cè)線段順時(shí)針行進(jìn)到JD3,再由JD3沿設(shè)計(jì)斷面線逆時(shí)針行進(jìn)回到JD2(這里的順、逆時(shí)針是相對(duì)于整個(gè)封閉的隧道斷面而言)。
這樣,包圍超挖面域的封閉路徑前進(jìn)方向相對(duì)其包圍的面域始終是順時(shí)針,如A12。包圍欠挖面域的封閉路徑的前進(jìn)方向相對(duì)于其所包圍的面域始終是逆時(shí)針,如A23。按照這樣定義的曲線積分的路徑,應(yīng)用格林公式計(jì)算出的超挖部分面積和欠挖部分面積正負(fù)號(hào)正好相反,于是通過積分結(jié)果的正負(fù)號(hào)來判定屬于超挖還是欠挖,相同正負(fù)號(hào)的計(jì)算結(jié)果累加,就能得到總的超挖面積和欠挖面積。
當(dāng)前的隧道工程中,常見的設(shè)計(jì)斷面形狀,主要有圓形、矩形、馬蹄形。其中,矩形斷面是由直線段相接構(gòu)成的,馬蹄形斷面則由弧度、長(zhǎng)短不同的多段圓弧相接構(gòu)成,而圓形斷面亦可看作圓心角為360°圓弧。因此,可以認(rèn)為,隧道的設(shè)計(jì)斷面由直線段和圓弧兩種元素構(gòu)成,設(shè)計(jì)斷面與實(shí)測(cè)斷面相交所形成的各超欠挖部分,也均由圓弧和線段兩種元素來表達(dá)。
為了便于計(jì)算機(jī)編程實(shí)現(xiàn),需要將線段和圓弧表示為參數(shù)式。
線段的參數(shù)表達(dá)式為:
x(t)=x1+tLcosA
y(t)=y1+tLsinA
其中,x1、y1分別為線段起始點(diǎn)坐標(biāo);
L為直線的長(zhǎng)度;
A為直線的方位角;
t為從0到1變化的參數(shù)。
圓弧的參數(shù)表達(dá)式為:
x(t)=xc+Rcos(A1-At)
y(t)=yc+Rsin(A1-At)
其中,xc,yc為圓心坐標(biāo);
A1為圓弧起始方位角;
A為圓弧的圓心角;
R為圓弧半徑;
t為從0變化到1的參數(shù)。
這樣,將公式(1)轉(zhuǎn)化為:
即針對(duì)組成封閉面域的各線段和圓弧進(jìn)行0到1的分段積分,并將積分結(jié)果求和,得出該封閉面域的面積。
綜上所述,利用格林公式積分可計(jì)算出超欠挖部分的面積,利用積分結(jié)果的正負(fù)號(hào)可以判斷出所計(jì)算出的面積屬于超挖還是欠挖。這樣,對(duì)不同正負(fù)值的面積計(jì)算結(jié)果進(jìn)行累加,便可得到總的超挖面積和欠挖面積。
搭載Windows Mobile操作系統(tǒng)的智能全站儀提供了C#語言的開發(fā)工具,在此用C#語言設(shè)計(jì)隧道斷面的元素類如下:
//圓弧類
Public class Arc
{
//圓心點(diǎn)坐標(biāo)
Private point2d center_point;
//起始方位角
Private double begin_angle;
//圓弧圓心角
Private double angle;
//圓弧半徑
Private double r;
//起點(diǎn)坐標(biāo)
Private point2d begin_point;
//終點(diǎn)坐標(biāo)
Private point2d end_point;
//構(gòu)造函數(shù)
Public void Arc(point2d center_point,double begin_angle,double angle,double r)
}
//線段類
Public class Line
{
//起點(diǎn)坐標(biāo)
private point2d begin_point;
//終點(diǎn)坐標(biāo)
Privte point2d end_point;
//線段方位角
Private double a;
//線段長(zhǎng)度
Private double length;
//構(gòu)造函數(shù)
Public void Line(point2d begin_point,point2d end_point);
}
在Arc和Line類中,所有成員變量均設(shè)置為只讀變量,僅由類的構(gòu)造函數(shù)進(jìn)行賦值。將設(shè)計(jì)斷面以及實(shí)測(cè)斷面表示為Arc和Line的鏈表,采用.net平臺(tái)的ArrayList數(shù)據(jù)結(jié)構(gòu)進(jìn)行順序存儲(chǔ)。
求解兩交點(diǎn)間封閉面域的面積,需要求得各交點(diǎn)的坐標(biāo),以及兩個(gè)交點(diǎn)間的設(shè)計(jì)斷面和實(shí)測(cè)斷面的元素信息。因此,設(shè)計(jì)交點(diǎn)類如下:
public class JD
{
//交點(diǎn)的坐標(biāo)
private point2d crd;
//交點(diǎn)所在的設(shè)計(jì)元素段鏈表中的索引
Private int id_survey;
//交點(diǎn)所在的實(shí)測(cè)元素段鏈表中的索引
Private int id_design;
//構(gòu)造函數(shù)
Public void JD(point2d crd,int id_survey,int id_design)
}
首先,讀取隧道斷面的全站儀實(shí)測(cè)坐標(biāo),生成實(shí)測(cè)元素鏈表list_survery,讀取隧道斷面的設(shè)計(jì)元素,生成設(shè)計(jì)元素鏈表list_design,并遍歷鏈表所有元素,求出實(shí)測(cè)斷面與設(shè)計(jì)斷面的所有交點(diǎn):
for(int i=0;i for(int j=0;j CalculateJD(list_survey[i],list_design[i]); CalcualteJD為計(jì)算兩線段、圓弧元素交點(diǎn)的函數(shù)。此處遍歷設(shè)計(jì)斷面和實(shí)測(cè)斷面中所有的元素,兩兩組合求解其交點(diǎn)坐標(biāo),若交點(diǎn)存在,則創(chuàng)建JD類的實(shí)例,存儲(chǔ)交點(diǎn)坐標(biāo)和生成交點(diǎn)的元素在其list_survey和list_design鏈表中的索引i和j。所有的JD實(shí)例依次存儲(chǔ)于鏈表list_JD中。 接下來,求解各個(gè)面域的超欠挖面積: for(int i=0;i { CalculateArea(list_JD[i],list_JD[i+1]); } CalcualteArea(list_JD[list_JD.Count-1],list_JD[0]); CalculateArea為依據(jù)list_JD鏈表中相鄰的兩個(gè)交點(diǎn),計(jì)算兩交點(diǎn)間封閉面域面積的函數(shù)。此函數(shù)中,首先依據(jù)JD類中存儲(chǔ)的實(shí)測(cè)斷面元素和設(shè)計(jì)斷面元素的索引,找出list_JD[i]和list_JD[i+1]之間以及l(fā)ist_JD[list_JD.Length-1]和list_JD[0]之間的所有設(shè)計(jì)與實(shí)測(cè)元素,并用交點(diǎn)對(duì)其所在的線段和圓弧元素進(jìn)行截取,生成新的構(gòu)成兩交點(diǎn)間封閉面域的Arc和Line元素序列;然后,應(yīng)用公式(2)對(duì)此序列進(jìn)行分段積分,再求和算出兩點(diǎn)間面域的面積。 最后,判斷積分結(jié)果的正負(fù)號(hào)并分別累加,正的總和即為總超挖面積,負(fù)的總和即為總欠挖面積。 應(yīng)用武漢地鐵二號(hào)線虎泉-名都區(qū)間DK25+24.546和DK25+34.858斷面檢測(cè)數(shù)據(jù)作為實(shí)驗(yàn)數(shù)據(jù),輸出AutoCAD文件格式的計(jì)算報(bào)告,并用AutoCAD圖上面積量算數(shù)據(jù)作為比較基準(zhǔn),以驗(yàn)證本文算法的正確性和精度。 該斷面為典型的多段圓弧組成的馬蹄形斷面。由于斷面實(shí)測(cè)數(shù)據(jù)均為超挖,為了充分驗(yàn)證算法有效性,人為修改了DK25+34.858斷面的實(shí)測(cè)數(shù)據(jù),使其出現(xiàn)欠挖部分。計(jì)算報(bào)告,如圖2~圖3所示。 圖2 DK25+24.546斷面計(jì)算報(bào)告 圖3 DK25+34.858斷面(修改后)計(jì)算報(bào)告 本文算法計(jì)算結(jié)果與AutoCAD圖上量算結(jié)果如表1所示。 表1 對(duì)比分析結(jié)果 對(duì)比表明,本文提到的算法計(jì)算結(jié)果與CAD圖上量算結(jié)果完全吻合,具有很高的精度。 應(yīng)用格林公式能夠方便精確地計(jì)算出不規(guī)則封閉區(qū)域的面積,本文從此思路出發(fā),結(jié)合隧道斷面的特點(diǎn),給出了適合于計(jì)算機(jī)編程的數(shù)據(jù)結(jié)構(gòu)和具體的計(jì)算過程,并應(yīng)用地鐵隧道斷面檢測(cè)數(shù)據(jù)進(jìn)行了實(shí)驗(yàn)驗(yàn)證。 相較于現(xiàn)有的將超欠挖面域分解為若干個(gè)三角形,分別求解各個(gè)三角形面積再求和的近似計(jì)算方法,提出的方法具有以下優(yōu)點(diǎn): (1)精度高。采用函數(shù)式表達(dá)設(shè)計(jì)和實(shí)測(cè)斷面的各個(gè)元素,應(yīng)用積分的方法計(jì)算超欠挖面積,數(shù)學(xué)模型嚴(yán)密,計(jì)算結(jié)果精確。 (2)通用性好。從單一思路出發(fā),不必事先判斷是超挖還是欠挖;應(yīng)用統(tǒng)一的線段、圓弧模型來表達(dá)隧道斷面,無需考慮各種各樣復(fù)雜的隧道斷面形式,都能夠得出計(jì)算結(jié)果。 (3)易于編程。本文提出的元素類模型設(shè)計(jì)簡(jiǎn)單合理,算法清晰明了,利于計(jì)算機(jī)編程實(shí)現(xiàn),能夠極好地應(yīng)用于智能全站儀的隧道斷面檢測(cè)軟件開發(fā)。5 應(yīng)用實(shí)例
6 結(jié)語