基于VB的道路曲线程序设计.docx

上传人:b****5 文档编号:5535514 上传时间:2022-12-19 格式:DOCX 页数:19 大小:272.53KB
下载 相关 举报
基于VB的道路曲线程序设计.docx_第1页
第1页 / 共19页
基于VB的道路曲线程序设计.docx_第2页
第2页 / 共19页
基于VB的道路曲线程序设计.docx_第3页
第3页 / 共19页
基于VB的道路曲线程序设计.docx_第4页
第4页 / 共19页
基于VB的道路曲线程序设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

基于VB的道路曲线程序设计.docx

《基于VB的道路曲线程序设计.docx》由会员分享,可在线阅读,更多相关《基于VB的道路曲线程序设计.docx(19页珍藏版)》请在冰豆网上搜索。

基于VB的道路曲线程序设计.docx

基于VB的道路曲线程序设计

基于VB的道路曲线程序设计

VB

线

程序设计界面及使用说明

本程序本文即在实践基础上编写了基于VB的道路放样程序,该程序可以在已知道路曲线基本要素的情况下,计算出道路中桩和边桩的坐标数据,将这些数据直接导入全站仪或GPS中,直接利用点放样的功能即可将道路的中桩或边桩在实地标定出来。

设计界面包括以下几种控件:

Label(标签)、TextBox(文本框)、Frame(框架)、CommandButton(命令按钮)、optionbutton(选择按钮)。

应用本程序计算时,可以选择是单点计算或者连续点计算。

选择不同的计算方式时,需要输入的已知数据时不同的。

在程序运行时首先显示程序登陆界面如下图3-2所示,输入登录密码后页面自动跳转到程序计算界面如下图3-3所示,该界面会将部分控件暂时隐藏,在选择相应的控件时会逐一显示所有控件。

程序登陆界面

模式选择

本文主要编写了两个程序,一个是道路单圆曲线放样程序,另一个是道路缓和曲线放样程序,当我们使用程序时,在这里需要根据实际情况选择计算模式,然后确定。

3.4.2单圆曲线坐标法计算

程序单圆曲线计算界面

程序说明:

首先要进行曲线数据输入,要输入曲线半径R,交点里程,桩距,交点坐标,两转点坐标,根据这些已知数据,可以计算出曲线要素,其中包括圆曲线切线长T,曲线长L,曲线外矢距E,还有切曲差q,根据以上已知数据和计算结果,可以计算出各主点里程及坐标。

根据给出的两转点坐标,我们知道曲线计算区间,而后可计算出所有的放样数据。

因为现在公路放样主要用的是全站仪,为了方便,可以把放样数据的计算结果直接以TXT格式保存,当我们工作需要时,直接可以导入到全站仪中。

计算结果:

计算结果图

此图便是程序计算结果,其中包括曲线数据输入,曲线要素计算,计算主点里程及坐标,还有最后的放样数据,界面清晰简洁明了,程序操作简单方便。

主要代码

PrivateSubCommand1_Click()

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)*ll

yhhz

(1)=c

i=1

DoWhilec

c=c+ll

i=i+1

yhhz(i)=c

Loop

yhhz(i)=hz

Forj=0Toi-1

xc(j)=yhhz(i)-yhhz(i-j-1)

pj(j)=xc(j)*xc(j)*ff/(6*R*L0)

bb(j)=xc(j)

e=pj(j)\3600

f=(pj(j)-e*3600)\60

d=pj(j)-e*3600-f*60

List3.AddIteme&"度"&f&"分"&Format(d,"###.##")&"秒"&","&Format(bb(j),"###.##")

Next

EndSub

 

PrivateSubForm_Activate()

Text1.Text=""

Text2.Text=""

Text3.Text=""

Text4.Text=""

Text5.Text=""

Text6.Text=""

Text7.Text=""

Text8.Te

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1