薛皓然 蔡云霞 古 君
內(nèi)蒙古自治區(qū)第七地質(zhì)礦產(chǎn)勘查開(kāi)發(fā)院 呼和浩特 010020
基于VB曲線(xiàn)放樣程序設(shè)計(jì)
薛皓然 蔡云霞 古 君
內(nèi)蒙古自治區(qū)第七地質(zhì)礦產(chǎn)勘查開(kāi)發(fā)院 呼和浩特 010020
本文介紹了基于Visual Basic 6.0語(yǔ)言如何開(kāi)發(fā)計(jì)算曲線(xiàn)道路放樣數(shù)據(jù)的軟件,該軟件計(jì)算準(zhǔn)確,使用方便,適用性強(qiáng),大大提高了道路測(cè)設(shè)工作的效率。
Visual Basic 6.0;曲線(xiàn);放樣數(shù)據(jù);計(jì)算
道路放樣數(shù)據(jù)的計(jì)算是線(xiàn)路放樣工作的重要環(huán)節(jié)。傳統(tǒng)的計(jì)算曲線(xiàn)道路測(cè)設(shè)數(shù)據(jù)的方法由于計(jì)算量大、易出錯(cuò)、放樣方法不靈活等缺點(diǎn),直接影響到線(xiàn)路工程的效率和質(zhì)量。為快速有效地完成任務(wù),筆者基于Visual Basic 6.0語(yǔ)言編寫(xiě)了計(jì)算曲線(xiàn)道路放樣數(shù)據(jù)的程序,主要就工程中幾種常見(jiàn)的曲線(xiàn),分別對(duì)偏角法、切線(xiàn)支距法及坐標(biāo)法對(duì)應(yīng)放樣數(shù)據(jù)的計(jì)算進(jìn)行了編程實(shí)現(xiàn)。
本文僅以圓曲線(xiàn)為例。如圖1所示,圓曲線(xiàn)的切線(xiàn)長(zhǎng)T、曲線(xiàn)長(zhǎng)L、外矢距E及切曲差,可由已知的半徑R與線(xiàn)路偏角α按式(1)計(jì)算。圓曲線(xiàn)的主要點(diǎn)里程可由式(2)計(jì)算。
圖1
圖2
圓曲線(xiàn)點(diǎn)偏角值的計(jì)算方法如圖2所示,偏角Δi和圓心角有以上關(guān)系,本設(shè)計(jì)對(duì)曲線(xiàn)起點(diǎn)至任一細(xì)部點(diǎn)的弦長(zhǎng)Ci及相鄰細(xì)部點(diǎn)間的弦長(zhǎng)cci進(jìn)行了較精確的計(jì)算,避免了因弦弧差而產(chǎn)生的誤差累積,因而精度高,且放樣靈活。
由于程序源代碼較多,本文僅以圓曲線(xiàn)的偏角法為例(為節(jié)省篇幅,程序源代碼中“【換行】”表示代碼換行,實(shí)際操作中按此規(guī)則對(duì)應(yīng)處理即可),對(duì)應(yīng)核心代碼如下:
Private Sub Cmdjs_Click()
(1)計(jì)算曲線(xiàn)要素及主點(diǎn)里程/保留三位小數(shù)
T=p3(R*Tan(αh/2))【換行】L=p3(αh*R)
e=p3(R*(1/(Cos(αh/2))-1))q=p3(2*T-L)
Dim γ As String'放樣QZ點(diǎn)時(shí)的平分角γ
γ=hdtodfm((pi-αh)/2)【換行】ZY=p3(JD-T)
QZ=p3(ZY+L/2)【換行】YZ=p3(QZ+L/2)
(2)求前半段曲線(xiàn)細(xì)部點(diǎn)的偏角偏距(后半段曲線(xiàn)類(lèi)似)
Print#1,"◎計(jì)算結(jié)果:":Print#1,"-----------"
Print#1,"點(diǎn)號(hào)";Spc(4);"里程";Spc(6);"弦長(zhǎng)";Spc(6);"偏角(反撥)";Spc(2);"相鄰樁點(diǎn)弦長(zhǎng)"
Print#1,Spc(1);"ZY";Spc(2);ZY;Spc(2);"000.000";Spc (3);"000°00′00″"
①判斷第一段弧長(zhǎng)(即分弦對(duì)應(yīng)的弧長(zhǎng))的值
Dim ys0,xs,ys,xl1 As Double【換行】xs=ZY-Int(ZY)【換行】ys0=Int(ZY)Mod c
ys=ys0+xs【換行】If ys=0 Then【換行】 xl1=c【換行】Else
xl1=c-ys【換行】End If
②計(jì)算前半段曲線(xiàn)點(diǎn)的里程及偏角偏距
Dim ψ1,C1,cc1 As Double :Dim ψ0,Δ0,Ci,cci,LCi As Double
Dim Δi As Double :Dim Δid As String
If L/2<=xl1 Then【換行】 Δi=0【換行】ElseIf L/2>xl1 And L/2<=c+xl1 Then
'計(jì)算前半段曲線(xiàn)第一個(gè)點(diǎn)對(duì)應(yīng)的偏角偏距
ψ1=xl1/R【換行】Δi=ψ1/2【換行】LCi=ZY+xl1
Δid=hdtodfm(pi*2-Δi)'偏角向左時(shí),ZY-QZ段在切線(xiàn)的左側(cè)
ψ0=c/R【換行】Δ0=ψ0/2【換行】C1=p3(2*R*Sin (Δi))
cc1=p3(2*R*Sin(Δi))
Print#1,Spc(2);"*";Spc(3);Format(LCi,"000.000");Spc (3);Format(C1,"000.000");Spc(3);Δid;Spc(3);Format(cc1," 000.000")【換行】ElseIf L/2>c+xl1 Then
'計(jì)算前半段曲線(xiàn)第一個(gè)點(diǎn)對(duì)應(yīng)的偏角偏距
ψ1=xl1/R【換行】Δi=ψ1/2【換行】LCi=ZY+xl1
Δid=hdtodfm(pi*2-Δi)'偏角向左時(shí),ZY-QZ段在切線(xiàn)的左側(cè)
ψ0=c/R【換行】Δ0=ψ0/2
C1=p3(2*R*Sin(Δi))【換行】cc1=p3(2*R*Sin(Δi))
Print#1,Spc(2);"*";Spc(3);Format(LCi,"000.000");Spc (3);Format(C1,"000.000");Spc(3);Δid;Spc(3);Format(cc1," 000.000")
'循環(huán)輸出前段曲線(xiàn)上各個(gè)細(xì)部點(diǎn)的里程、偏角和偏距
Do Until Δi>=αh/4-Δ0
LCi=LCi+c【換行】 Δi=Δi+Δ0
Δid=hdtodfm(pi*2-Δi)'偏角向左時(shí),ZY-QZ段在切線(xiàn)的左側(cè)
Ci=p3(2*R*Sin(Δi))【換行】 cci=p3(2*R* Sin(Δ0))
Print#1,Spc(2);"*";Spc(3);Format(LCi,"000.000"); Spc(3);
Format(Ci,"000.000");Spc(3);Δid;Spc(3);Format(cci, "000.000")
Loop【換行】End If
③輸出QZ點(diǎn)的里程、偏角和偏距
Dim CQZ,Δn1,ccn1 As Double :Dim ΔQZ As Double : Dim ΔQZd As String
ΔQZ=αh/4【換行】Δn1=ΔQZ-Δi【換行】ccn1=p3(2 *R*Sin(Δn1))
ΔQZd=hdtodfm(pi*2-ΔQZ)'偏角向左時(shí),ZY-QZ段在切線(xiàn)的左側(cè)
CQZ=p3(2*R*Sin(ΔQZ))
Print#1,Spc(1);"QZ";Spc(3);Format(QZ,"000.000"); Spc(3);Format(CQZ,"000.000");Spc(3);ΔQZd;Spc(3);Format (ccn1,"000.000")
End Sub
程序編寫(xiě)完成后,所有曲線(xiàn)類(lèi)型,均經(jīng)過(guò)多個(gè)算例驗(yàn)證測(cè)試,結(jié)果準(zhǔn)確無(wú)誤?,F(xiàn)以圓曲線(xiàn)偏角法的計(jì)算為例,過(guò)程如下圖:
圖5 選擇曲線(xiàn)類(lèi)型界面
圖6 圓曲線(xiàn)計(jì)算界面
圖7 運(yùn)行結(jié)果界面
本軟件從數(shù)據(jù)輸入、計(jì)算、讀取及存儲(chǔ)各個(gè)環(huán)節(jié)進(jìn)行有效控制,實(shí)現(xiàn)了自動(dòng)、快速地計(jì)算曲線(xiàn)放樣數(shù)據(jù)的功能,結(jié)果準(zhǔn)確,效率高,適用性強(qiáng),放樣方法靈活,滿(mǎn)足當(dāng)下的道路工程施工要求。
[1]李青岳,陳永奇.工程測(cè)量學(xué).第3版.北京∶測(cè)繪出版社,2008.
[2]顧孝烈,鮑峰,程效軍.測(cè)量學(xué).第3版.上?!猛瑵?jì)大學(xué)出版社,2006.
[3]朱從旭,嚴(yán)暉,曹岳輝.VB程序設(shè)計(jì)綜合教程.第2版.北京∶清華大學(xué)出版社,2009.
[4]戴建軍,陳桂珍.應(yīng)用VB實(shí)現(xiàn)中測(cè)量中任意點(diǎn)坐標(biāo)的快速計(jì)算.測(cè)繪信息與工程.2007,32(2).