基于VB的道路曲线程序设计.docx
- 文档编号:30512146
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:21
- 大小:242.18KB
基于VB的道路曲线程序设计.docx
《基于VB的道路曲线程序设计.docx》由会员分享,可在线阅读,更多相关《基于VB的道路曲线程序设计.docx(21页珍藏版)》请在冰豆网上搜索。
基于VB的道路曲线程序设计
基
于
VB
道
路
曲
线
放
样
程
序
设
计
程序设计界面及使用说明
本程序本文即在实践基础上编写了基于VB的道路放样程序,该程序可以在已知道路曲线基本要素的情况下,计算出道路中桩和边桩的坐标数据,将这些数据直接导入全站仪或GPS中,直接利用点放样的功能即可将道路的中桩或边桩在实地标定出来。
设计界面包括以下几种控件:
Label(标签)、TextBox(文本框)、Frame(框架)、CommandButton(命令按钮)、optionbutton(选择按钮)。
应用本程序计算时,可以选择是单点计算或者连续点计算。
选择不同的计算方式时,需要输入的已知数据时不同的。
在程序运行时首先显示程序登陆界面如下图3-2所示,输入登录密码后页面自动跳转到程序计算界面如下图3-3所示,该界面会将部分控件暂时隐藏,在选择相应的控件时会逐一显示所有控件。
程序登陆界面
模式选择
本文主要编写了两个程序,一个是道路单圆曲线放样程序,另一个是道路缓和曲线放样程序,当我们使用程序时,在这里需要根据实际情况选择计算模式,然后确定。
3.4.2单圆曲线坐标法计算
程序单圆曲线计算界面
程序说明:
首先要进行曲线数据输入,要输入曲线半径R,交点里程,桩距,交点坐标,两转点坐标,根据这些已知数据,可以计算出曲线要素,其中包括圆曲线切线长T,曲线长L,曲线外矢距E,还有切曲差q,根据以上已知数据和计算结果,可以计算出各主点里程及坐标。
根据给出的两转点坐标,我们知道曲线计算区间,而后可计算出所有的放样数据。
因为现在公路放样主要用的是全站仪,为了方便,可以把放样数据的计算结果直接以TXT格式保存,当我们工作需要时,直接可以导入到全站仪中。
计算结果:
计算结果图
此图便是程序计算结果,其中包括曲线数据输入,曲线要素计算,计算主点里程及坐标,还有最后的放样数据,界面清晰简洁明了,程序操作简单方便。
主要代码
PrivateSubCommand1_Click()
DimYJDAsDouble,XJDAsDouble,XZD1AsDouble,YZD1AsDouble,XZD2AsDouble,YZD2AsDouble
DimXZYAsDouble,YZYAsDouble,XYZAsDouble,YYZAsDouble,XQZAsDouble,YQZAsDouble
DimXiAsDouble,YiAsDouble
Dima1AsDouble,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.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(Text1.Text)
a1=Atn((YJD-YZD1)/(XJD-XZD1))
a2=Atn((YZD2-YJD)/(XZD2-XJD))
Ifa2-a1<0Then
a=pi+a2-a1
a3=a1-0.5*(pi-a)+pi
EndIf
Ifa2-a1>0Then
a=a2-a1
EndIf
L=R*a
T=R*Tan(a/2)
E=R*(1/(Cos(a/2))-1)
q=2*T-L
ZYLC=JDLC-T
YZLC=ZYLC+L
QZLC=YZLC-(L/2)
XZY=XJD-T*Cos(a1)
YZY=YJD-T*Sin(a1)
XYZ=XJD+T*Cos(a2)
YYZ=YJD+T*Sin(a2)
XQZ=XJD+E*Cos(a3)
YQZ=YJD+E*Sin(a3)
Text11.Text=Format(L,".000")
Text10.Text=Format(T,".000")
Text12.Text=Format(E,".000")
Text13.Text=Format(q,".000")
Text14.Text="K"&(ZYLC\1000)&"+"&Format(ZYLC-(ZYLC\1000)*1000,".000")
Text15.Text="K"&(YZLC\1000)&"+"&Format(YZLC-(YZLC\1000)*1000,".000")
Text16.Text="K"&(QZLC\1000)&"+"&Format(QZLC-(QZLC\1000)*1000,".000")
3.4.3缓和曲线极坐标法计
输入界面
程序说明:
首先输入已知数据,曲线半径R,角度观测值,缓和曲线长,交点里程,然后单击计算里程数据按钮,曲线综合要素值(包括圆曲线切线长T,圆曲线长L,曲线外矢距E,切曲差q),各主点里程就会展现出来,当输入放样桩距,单击计算放样数据,缓和曲线各段中的详细放样数据就计算出来了,因为放样桩距不定,计算结果的多少就不一定,为了展示出所有的计算结果,这里使用List控件,但这也带来了不方便的结果,就是计算结果无法以txt的格式保存。
曲线要素及主点里程计算结果
当计算工作开始时,依次输入已知数据,曲线半径R,角度观测值,缓和曲线长L0,交点里程,单击计算里程数据按钮,就可以得到曲线综合要素值和各主店的里程数据,如果想继续计算详细放样数据,输入放样桩距,单击计算放样桩距,如果不需要,单击返回按钮。
如果不需要继续计算,直接单击返回按钮。
输入放样桩距
实际公路工程放样中,为了放出详细桩位,需要计算详细的放样数据,包括每个桩点的偏角和距直缓点的距离(因为放样时,全站仪架设在直缓点),此时,直接输入放样桩距,然后单击计算放样数据按钮,详细的放样数据就计算出来了。
放样数据计算结果图
此图完整的展现了从已知数据输入(曲线半径R,角度观测值,缓和曲线长L0,交点里程)到放样数据(zh-hy的放样数据,hy-yh的放样数据,hz-yh的放样数据)结果的展示,在此过程中还计算出了曲线综合要素值。
这里说明一点前面的单圆曲线程序中结果放在一个Label中,而这里放在了3个List中,是因为缓和曲线的个计算单位的数学模型不同,也是为了清晰明了的展示计算结果。
计算结束,单击返回按钮,回到上一层。
主要代码
DimRAsSingle,aAsSingle,a1AsInteger,a2AsInteger,a3AsSingle,L0AsSingle,tAsSingle,LAsSingle,eAsSingle,qAsSingle,aaAsSingle
DimllAsInteger,tt(1To100)AsSingle
DimmAsDouble,pAsDouble,bAsDouble,jdAsSingle,zhAsSingle,hyAsSingle,qzAsSingle,hzAsSingle,yhAsSingle
Constpi=3.1415926,ff=206265
PrivateSubCommand1_Click()
R=Val(Text1.Text)
a1=Val(Text2.Text)
a2=Val(Text15.Text)
a3=Val(Text16.Text)
a=a1+a2/60+a3/3600
L0=Val(Text3.Text)
m=L0/2-L0^3/(240*R^2)
p=L0^2/(24*R)
b=L0*180/(2*R*pi)
t=(R+p)*Abs(Tan(a/2*pi/180))+m
L=pi/180*R*(a-2*b)+2*L0
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=Val(Text8.Text)
zh=jd-t
hy=zh+L0
qz=zh+L/2
hz=zh+L
yh=hz-L0
aa=jd+t-q
If(aa<>hz)Then
MsgBox"请确认计算正确","0,48,0","数据检查"
ExitSub
Else
Text9.Text=zh
Text10.Text=hy
Text11.Text=qz
Text12.Text=hz
Text13.Text=yh
EndIf
EndSub
数据的导出与保存
计算完成后,点击界面保存按钮,数据会自动保存在(D:
\放样数据),生成txt格式。
3-10保存结果图
计算结束后,可以打开D盘,查看计算结果。
附录
程序代码
1.单圆曲线
PrivateSubCommand1_Click()
DimYJDAsDouble,XJDAsDouble,XZD1AsDouble,YZD1AsDouble,XZD2AsDouble,YZD2AsDouble
DimXZYAsDouble,YZYAsDouble,XYZAsDouble,YYZAsDouble,XQZAsDouble,YQZAsDouble
DimXiAsDouble,YiAsDouble
Dima1AsDouble,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.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(Text1.Text)
a1=Atn((YJD-YZD1)/(XJD-XZD1))
a2=Atn((YZD2-YJD)/(XZD2-XJD))
Ifa2-a1<0Then
a=pi+a2-a1
a3=a1-0.5*(pi-a)+pi
EndIf
Ifa2-a1>0Then
a=a2-a1
EndIf
L=R*a
T=R*Tan(a/2)
E=R*(1/(Cos(a/2))-1)
q=2*T-L
ZYLC=JDLC-T
YZLC=ZYLC+L
QZLC=YZLC-(L/2)
XZY=XJD-T*Cos(a1)
YZY=YJD-T*Sin(a1)
XYZ=XJD+T*Cos(a2)
YYZ=YJD+T*Sin(a2)
XQZ=XJD+E*Cos(a3)
YQZ=YJD+E*Sin(a3)
Text11.Text=Format(L,".000")
Text10.Text=Format(T,".000")
Text12.Text=Format(E,".000")
Text13.Text=Format(q,".000")
Text14.Text="K"&(ZYLC\1000)&"+"&Format(ZYLC-(ZYLC\1000)*1000,".000")
Text15.Text="K"&(YZLC\1000)&"+"&Format(YZLC-(YZLC\1000)*1000,".000")
Text16.Text="K"&(QZLC\1000)&"+"&Format(QZLC-(QZLC\1000)*1000,".000")
Text17.Text=Format(XZY,".000")
Text18.Text=Format(YZY,".000")
Text19.Text=Format(XYZ,".000")
Text20.Text=Format(YYZ,".000")
Text21.Text=Format(XQZ,".000")
Text22.Text=Format(YQZ,".000")
Label26.Caption="桩号里程"&"X"&"Y"&vbCrLf
Label26.Caption=Label26.Caption&"K"&(ZYLC\1000)&"+"&Format(ZYLC-(ZYLC\1000)*1000,".000")&Format(XZY,".000")&Format(YZY,".000")&vbCrLf
IfZYLCModJJ<>0Then
ZYLC=ZYLC+(JJ-(ZYLCModJJ))
EndIf
DoWhile(ZYLC+N*JJ) Xi=XZY+2*R*Sin((ZYLC+N*JJ)/2/R)*Cos(a1+(ZYLC+N*JJ)) Yi=YZY+2*R*Sin((ZYLC+N*JJ)/2/R)*Sin(a1+(ZYLC+N*JJ)) M=ZYLC+S S=JJ*N N=N+1 IfM-QZLC>0AndM-QZLC Label26.Caption=Label26.Caption&"K"&(QZLC\1000)&"+"&Format(QZLC-(QZLC\1000)*1000,".000")&Format(XQZ,".000")&Format(YQZ,".000")&vbCrLf EndIf Label26.Caption=Label26.Caption&"K"&(M\1000)&"+"&Format((M-(M\1000)*1000),"000")&""&Format(Xi,".000")&Format(Yi,".000")&vbCrLf Loop Label26.Caption=Label26.Caption&"K"&(YZLC\1000)&"+"&Format((YZLC-(YZLC\1000)*1000),".000")&Format(XYZ,".000")&Format(YYZ,".000") 2.缓和曲线 DimRAsSingle,aAsSingle,a1AsInteger,a2AsInteger,a3AsSingle,L0AsSingle,tAsSingle,LAsSingle,eAsSingle,qAsSingle,aaAsSingle DimllAsInteger,tt(1To100)AsSingle DimmAsDouble,pAsDouble,bAsDouble,jdAsSingle,zhAsSingle,hyAsSingle,qzAsSingle,hzAsSingle,yhAsSingle Constpi=3.1415926,ff=206265 PrivateSubCommand1_Click() R=Val(Text1.Text) a1=Val(Text2.Text) a2=Val(Text15.Text) a3=Val(Text16.Text) a=a1+a2/60+a3/3600 L0=Val(Text3.Text) m=L0/2-L0^3/(240*R^2) p=L0^2/(24*R) b=L0*180/(2*R*pi) t=(R+p)*Abs(Tan(a/2*pi/180))+m L=pi/180*R*(a-2*b)+2*L0 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=Val(Text8.Text) zh=jd-t hy=zh+L0 qz=zh+L/2 hz=zh+L yh=hz-L0 aa=jd+t-q If(aa<>hz)Then MsgBox"请确认计算正确","0,48,0","数据检查" ExitSub Else Text9.Text=zh Text10.Text=hy Text11.Text=qz Text12.Text=hz Text13.Text=yh EndIf EndSub PrivateSubCommand2_Click() DimiAsInteger,jAsInteger,cAsSingle,eAsInteger,fAsInteger,dAsSingle Dimzhhy(0To100)AsSingle,bb(0To100)AsSingle,xc(0To100)AsSingle,pj(0To100)AsSingle Dimhyyh(0To100)AsSingle,yhhz(0To100)AsSingle List1.Clear List2.Clear List3.Clear List1.AddItem"放样偏角,放样距离" List2.AddItem"放样偏角,放样距离" List3.AddItem"放样偏角,放样距离" ll=Text14.Text zhhy(0)=zh c=zh+ll c=(c\20)*ll zhhy (1)=c i=1 DoWhilec c=c+ll 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) List1.AddIteme&"度"&f&"分"&Format(d,"###.##")&"秒"&","&Format(bb(j),"###.##") Next hyyh(0)=hy c=hy+ll c=(c\20)*ll hyyh (1)=c i=1 DoWhilec c=c+ll i=i+1 hyyh(i)=c Loop hyyh(i)=qz c=qz+ll c=(c\20)*ll i=i+1 hyyh(i)=c DoWhilec c=c+ll i=i+1 hyyh(i)=c Loop hyyh(i)=yh Forj=0Toi-1 xc(j)=hyyh(j+1)-hyyh(0) pj(j)=(xc(j)*ff)/(2*R) bb(j)=2*R*Sin(pj(j)/ff) e=pj(j)\3600 f=(pj(j)-e*3600)\60 d=pj(j)-e*3600-f*60 List2.AddIteme&"度"&f&"分"&Format(d,"###.##")&"秒"&","&Format(bb(j),"###.##") Next yhhz(0)=yh c=yh+ll c=(c\20)*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VB 道路 曲线 程序设计