基于VB的道路曲线程序设计.docx
- 文档编号:9710095
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:20
- 大小:195.34KB
基于VB的道路曲线程序设计.docx
《基于VB的道路曲线程序设计.docx》由会员分享,可在线阅读,更多相关《基于VB的道路曲线程序设计.docx(20页珍藏版)》请在冰点文库上搜索。
基于VB的道路曲线程序设计
基
于
VB
道
曲
线放样程序设计
程序设计界面及使用说明
本程序本文即在实践基础上编写了基于VB的道路放样程序,该程序可以在已知道路曲线基本要素的悄况下,讣算出道路中桩和边桩的坐标数据,将这些数据直接导入全站仪或GPS中,直接利用点放样的功能即可将道路的中桩或边桩在实地标定出来。
设计界面包括以下儿种控件:
Label(标签)、TextBox(文本框)、Frame(框架)、CommandButton(命令按钮)、optionbutton(选择按钮)。
应用本程序计算时,可以选择是单点计算或者连续点计算。
选择不同的计算方式时,需要输入的已知数据时不同的。
在程序运行时首先显示程序登陆界面如下图3-2所示,输入登录密码后页面自动跳转到程序计算界面如下图3-3所示,该界面会将部分控件暂时隐藏,在选择相应的控件时会逐一显示所有控件。
程序登陆界而
「模式选择
«单圆曲线
r缓和曲线
II
模式选择
本文主要编写了两个程序,一个是道路单圆曲线放样程序,另一个是道路缓和曲线放样程序,当我们使用程序时,在这里需要根据实际悄况选择讣算模式,然后确定。
3.4.2单圆曲线坐标法计算
程序单圆曲线讣算界而
9
^0
程序说明:
首先要进行曲线数据输入,要输入曲线半径R,交点里程,桩距,交点坐标,两转点坐标,根据这些已知数据,可以计算出曲线要素,其中包括圆曲线切线长T,曲线长L,曲线外矢距E,还有切曲差q,根据以上已知数据和计算结果,可以计•算出各主点里程及坐标。
根据给出的两转点坐标,我们知道曲线计算区间,而后可计算出所有的放样数据。
因为现在公路放样主要用的是全站仪,为了方便,可以把放样数据的计算结果直接以TXT格式保存,当我们工作需要时,直接可以导入到全站仪中。
计算结果:
|
计算结果图
此图便是程序计算结果,其中包括曲线数据输入,曲线要素计算,计•算主点里程及坐标,还有最后的放样数据,界面清晰简洁明了,程序操作简单方便。
主要代码
PrivateSubCommandl_Click()
DimYJDAsDouble,XJDAsDouble,XZD1AsDouble,YZD1AsDouble,XZD2AsDouble,YZD2AsDouble
DimXZYAsDouble,YZYAsDouble.XYZAsDouble.YYZAsDouble,XQZAsDouble,YQZ
AsDouble
DimXiAsDouble,YiAsDouble
DimalAsDouble.a2AsDouble,a3AsDouble,aAsDouble
DimLAsDouble,TAsDouble,EAsDouble,qAsDouble
DimZYLCAsDouble,YZLCAsDouble,QZLCAsDouble.JDLCAsDouble
DimRAsSingle,JJAsSingle,NAsSingle,SAsSingle.MAsDouble,OAsString
DimpiAsDouble
R=VaI(Text1.Text)
JDLC=Val(Text2.Text)
JJ=VaI(Text3.Text)
N=1
pi=3.1415926
YJD=Val(Text5.Text)
XJD=Val(Text4.Text)
XZD1=Val(Text6.Text)
YZD1=Val(Text7.Text)
XZD2=Val(Text8.Text)
YZD2=Val(Text9.Text)
R=Val(Textl.Text)
al=Atn((YJD-YZD1)/(XJD-XZDl))
a2=Atn((YZD2・YJD)/(XZD2-XJD))
Ifa2-al<0Then
a=pi+a2-al
a3=al・0.5*(pi-a)+pi
EndIf
Ifa2-al>0Then
a=a2-al
EndIf
L=R*a
T=R*Tan(a/2)
E=R*(l/(Cos(a/2))-1)
q=2*T・L
ZYLC=JDLC・T
YZLC=ZYLC+L
QZLC=YZLC-(L/2)
XZY=XJD-T*Cos(al)
YZY=YJD-T*Sin(al)
XYZ=XJD+T*Cos(a2)
YYZ=YJD+T*Sin(a2)
XQZ=XJD+E*Cos(a3)
YQZ=YJD+E*Sin(a3)
Text11.Text=Format(L,,r.000,r)
TextlO.Text=Format(T,M.OOOn)
Textl2.Text=Format(E,H.OOOM)
Text13.Text=Format(q,N.OOOn)
Textl4.Text=HKH&(ZYLC\1000)&H+H&Format(ZYLC-(ZYLC\1000)*1000,H.000M)
Text15.Text=HKM&(YZLC\1000)&M+H&Format(YZLC-(YZLC\1000)*1000,000”)
Textl6.Text=MKH&(QZLC\1000)&H+M&Format(QZLC-(QZLC\1000)*1000,”.000”)
3.4.3缓和曲线极坐标法计
输入界而
程序说明:
首先输入已知数据,曲线半径R,角度观测值,缓和曲线长,交点里程,然后单击计算里程数据按钮,曲线综合要素值(包括圆曲线切线长T,圆曲线长L,曲线外矢距E,切曲差q),各主点里程就会展现出来,当输入放样桩距,单击计算放样数据,缓和曲线各段中的详细放样数据就计算出来了,因为放样桩距不定,计算结果的多少就不一定,为了展示出所有的计算结果,这里使用List控件,但这也带来了不方便的结果,就是计算结果无法以txt的格式保存。
□回図
曲线要素及主点里程讣算结果
当计算工作开始时,依次输入已知数据,曲线半径R,角度观测值,缓和曲线长L0,交点里程,单击计算里程数据按钮,就可以得到曲线综合要素值和各主丿占的里程数据,如果想继续计算详细放样数据,输入放样桩距,单击计算放样桩距,如果不需要,单击返回按钮。
如果不需要继续计算,直接单击返回按钮。
输入放样桩距
实际公路工程放样中,为了放出详细桩位,需要计算详细的放样数据,包
6
括每个桩点的偏角和距直缓点的距离(因为放样时,全站仪架设在直缓点),此时,直接输入放样桩距,然后单击讣算放样数据按钮,详细的放样数据就计算出来了。
放样数据计算结果图
此图完整的展现了从已知数据输入(曲线半径R,角度观测值,缓和曲线长L0,交点里程)到放样数据(zh-hy的放样数据,hy-yh的放样数据,hz-yh的放样数据)结果的展示,在此过程中还计算出了曲线综合要素值。
这里说明一点前面的单圆曲线程序中结果放在一个Label中,而这里放在了3个List中,是因为缓和曲线的个计算单位的数学模型不同,也是为了清晰明了的展示讣算结果。
计算结束,单击返回按钮,回到上一层。
主要代码
DimRAsSingle,aAsSingle,alAsInteger,a2AsInteger,a3AsSingle,LOAsSingle,tAsSingle,LAsSingle,eAsSingle,qAsSingle,aaAsSingleDim11AsInteger,tt(1To100)AsSingle
DimmAsDouble,pAsDouble,bAsDouble,jdAsSingle,zhAsSingle,hyAsSingle,qzAsSingle,hzAsSingle^yhAsSingle
Constpi=3.1415926,ff=206265
PrivateSubCommandl_Click0
R=Vai(Textl.Text)
al=Vai(Text2.Text)
a2=Vai(Textl5.Text)
a3=Vai(Text16.Text)
a=al+a2/60+a3/3600
q=2*t-L
Text4・Text=t
Text5・Text=L
Text7・Text=q
=Vai(TextS.Text)
yh
二jd+t-q
(aa<>hz)Then
Else
Text9・Text=zh
Textl0.Text=hy
Textl1.Text=qz
Textl2.Text=hz
Textl3.Text=yh
EndIf
EndSub
数据的导出与保存
计算完成后,点击界面保存按钮,数据会自动保存在(D:
\放样数据),生成txt格式。
性号里程
K0-H384.384
X
13300.888
Y
13300.888
A-
K04-360
12977.954
13403.165
KO+-340
13088.843
13062.543
K0-1-320
13423.834
13028.053
KO+-300
13580.353
13301.732
KO-i-280
13406.129
13538.252
KO-t-260
13140.413
13479.086
KO+-240
13091.619
13233.215
KO-K220
13279.406
13101.995
K04-200
13456.500
13210.141
K04-180
13431.048
13394.302
KO-i-160
13272.725
13438.300
K04-140
13183.429
13326.932
K04-120
13241.080
13220.317
K04-100
13340.251
13230.826
K0-1-080
133S1.010
13306.406
KO-H060
13313.928
13339.106
K04-040
13285.961
13314.770
KO-H020
13300.534
13300.738
K0+000
13301.262
13320.500
K0+020
13265.038
13317.740
K0+040
13255.723
13261.988
MO
7
3-10保存结果图
计算结束后,可以打开D盘,查看计算结果。
附录
程序代码
1•单圆曲线
PrivateSubCommandl_Click()
DimYJDAsDouble,XJDAsDouble,XZD1AsDouble,YZD1AsDouble.XZD2AsDouble.YZD2AsDouble
DimXZYAsDouble,YZYAsDouble,XYZAsDouble.YYZAsDouble,XQZAsDouble.YQZAsDouble
DimXiAsDouble,YiAsDouble
DimalAsDouble.a2AsDouble.a3AsDouble,aAsDouble
DimLAsDouble.TAsDouble.EAsDouble,qAsDouble
DimZYLCAsDouble,YZLCAsDouble.QZLCAsDouble,JDLCAsDouble
DimRAsSingle,JJAsSingle,NAsSingle,SAsSingle,MAsDouble.OAsString
DimpiAsDouble
R=Val(Text1.Text)
JDLC=Val(Text2.Text)
JJ=Val(Text3.Texl)
N=1pi=3.1415926
YJD=Val(Text5.Text)
XJD=Val(Text4.Text)
XZD1=Val(Text6.Text)
YZD1=Val(Text7.Text)
XZD2=VaKText&Tex()
YZD2=Val(Text9.Text)
R=VaKText1.Text)
a1=Atn((YJD-YZD1)/(XJD・XZD1))
a2=Atn((YZD2-YJD)/(XZD2-XJD))
Ifa2-al<0Then
a=pi+a2-al
a3=a1・0.5*(pi・a)+pi
EndIf
Ifa2・al>0Then
a=a2・al
EndIf
L=R*a
T=R*Tan(a/2)
E=R*(l/(Cos(a/2))-1)
q=2*T・L
ZYLC=JDLC-T
YZLC=ZYLC+L
QZLC=YZLC-(L/2)
XZY=XJD・T^Cos(al)
YZY=YJD・丁木$血01)
XYZ=XJD+T*Cos(a2)
YYZ=YJD+T*Sin(a2)
XQZ=XJD+E♦Cos(a3)
YQZ=YJD+E*Sin(a3)
Text11.Text=Format(L.M.000°)
TextlO.Text=ForinaKT.H.000K)
Textl2.Text=FormalE.".(MMT)
Text13.Text=Format(q.H.000'*)
Textl4.Text=”K”&(ZYLC\1000)&”+”&FormaKZYLC・(ZYLC\1000)♦1000.”.000”)
Textl5.Text=K”&(YZLC\1000)&&Format(YZLC・(YZLC\1000)♦1000.".OOO0)
Textl6.Text=”K”&(QZLC\1000)&”+”&Format(QZLC•(QZLC\1000)*1000.
Textl7.Text=Format(XZyH.00()H)
Texil8.Texi=Foi*mai(YZY・1000”)
Textl9.Text=Format(XY乙M.000H)
Text2O.Text=Format(YY乙:
000”)
Text?
1.Text=FormaKXQZ/.OOO”)
Text22.Text=FormaKYQ乙M.OOOH)
Label26.Caption=”桩号里程"&“X°&”Y”&vbCrLf
Label26.Caption=Label26.Caption&MKM&(ZYLC\IOOO)&H+n&FormaKZYLC・(ZYLC\1000)♦1000.”.000“)&FormaKXZY.”・O(XT)&Foima((YZY「・000”)&vbCrLf
IfZYLCModJJoOThen
ZYLC=ZYLC+(JJ・(ZYLCModJJ))
EndIf
DoWhile(ZYLC+N*JJ) Xi=XZY+2*R*Sin((ZYLC+N*JJ)/2/R)*Cos(al+(ZYLC+N*JJ)) Yi=YZY+2*R*Sin((ZYLC+N*JJ)/2/R)*Sin(al+(ZYLC+N*JJ)) M=ZYLC+S 5=JJ*N N=N+1 IfIV1・QZLC>0AndM-QZLC Label26.Caption=Label26.Caption&HKM&(QZLC\1000)&”+”&FormaKQZLC・(QZLC\1000)♦1000,”.000”)&Foi*ma【(XQZJ.000")&FormaKYQ乙“・000°)&vbCrLf EndIf Label26.Caption=Label26.Caplion&“K”&(M\1000)&“+”&Format((M・(M\1000)*1000),“000”)&”” 6FormaKXi,”・000M)&Format(Yi,M.000M)&vbCrLf Loop Label26.Caption=Label26.Caption&°KM&(YZLC\1000)&“+”&Fonnat((YZLC・(YZLC\1000)♦1000).”•000”)&Formal(XY.00(T)&Forma"YY乙”・000°) 2•缓和曲线 DimRAsSingle,aAsSingle,alAsInteger,a2AsInteger,a3AsSingle,L0AsSingle,tAs Single,LAsSingle,eAsSingle,qAsSingle,aaAsSingle Dim11AsInteger,tt(1To100)AsSingle DimmAsDouble,pAsDouble,bAsDouble,jdAsSingle,zhAsSingle,hyAsSingle,qzAs Single,hzAsSingle,yhAsSingle Constpi=3.1415926,ff=206265 PrivateSubCommandl_Click() R=Vai(Textl.Text) al=Vai(Text2.Text) a2=Vai(Text15.Text) a3=Vai(Textl6.Text) a=al+a2/60+a3/3600 L0=Vai(Text3.Text) m=L0/2-L0*3/(240*R*2) p=LO*2/(24*R) b=LO*180/(2*R*pi) t=(R+p)*Abs(Tan(a/2*pi/180))+m L=pi/180*R*(a-2*b)+2*LO e=(R+p)/Abs(Cos(a/2*pi/180))-R q=2*t-L Text4.Text=t Text5.Text=L Text6.Text=e Text7.Text=q jd=Vai(TextS.Text) zh=jd-t hy=zh+LO qz=zh+L/2 hz=zh+L yh=hz-LO aa=jd+t"q If(aa<>hz)Then MsgBox*请确认计算正确「0,48,0\•数据检査• ExitSub Else Text9.Text=zh TextlO.Text=hy Textll.Text=qz Textl2.Text=hz Textl3.Text=yh EndIf EndSub PrivateSubCommand? ClickO DimiAsInteger,jAsInteger,cAsSingle,eAsInteger,fAsInteger,dAsSingle Dimzhhy(0To100)AsSingle,bb(OTo100)AsSingle,xc(0To100)AsSingle,pj(0To100) AsSingle Dimhyyh(.0To100)AsSingle,yhhz(0To100)AsSingle Listl・Clear List2・Clear List3・Clear Listl.Additem"放样偏角 •放样距离" List2.Additem^放样偏角 •放样距离" List3.Additem"放样偏角 ,放样距离" 11=Textl-1.Text zhhy(0)=zh c=zh+11 c=(c\20)*11 zhhy (1)=c i=1 DoWhilec c=c+11 i=i+1 zhhy(i)=c Loop zhhy(i)=hy Forj=0Toi"1 xc(j)=zhhy(j+1)"zhhy(0) pj(j)=xc(j)*xc(j)*ff/(6*R*L0) e=pj(j)\3600 f=(pj(j)-e*3600)\60 d=pj(j)-e*3600-f*60 bb(j)=xc(j) Listl.Additeme&"度^&f&"分"&Format(d,"轴嵐imT)&"秒Format(bb(j), Nexthyyh(0)=hy c=hy+11 c=(c\20)*11 hyyh(l)=c i=1 DoWhilec hyyh(i)=c Loop hyyh(i)=qz c=qz+11 c=(c\20)*11 i=i+1 hyyh(i)=c DoWhilec c=c+11 i=i+1 hyyh(i)=c Loop hyyh(i)=y
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VB 道路 曲线 程序设计