高斯正反算VB实验代码.docx

上传人:b****6 文档编号:7489428 上传时间:2023-01-24 格式:DOCX 页数:10 大小:76.99KB
下载 相关 举报
高斯正反算VB实验代码.docx_第1页
第1页 / 共10页
高斯正反算VB实验代码.docx_第2页
第2页 / 共10页
高斯正反算VB实验代码.docx_第3页
第3页 / 共10页
高斯正反算VB实验代码.docx_第4页
第4页 / 共10页
高斯正反算VB实验代码.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

高斯正反算VB实验代码.docx

《高斯正反算VB实验代码.docx》由会员分享,可在线阅读,更多相关《高斯正反算VB实验代码.docx(10页珍藏版)》请在冰豆网上搜索。

高斯正反算VB实验代码.docx

高斯正反算VB实验代码

高斯正反算实验报告

 

一、实验目的:

通过对高斯正反算的软件编程,增强学生对《大地测量学基础》课程的理解,使学生牢固掌握高斯正反算的基本原理和公式,熟悉高斯正反算的基本技能和计算方法。

培养学生利用计算机编程的能力、综合运用知识的能力及理论联系实际的能力

 

二、实验要求:

要求学生综合运用测绘知识、大地测量知识、数学知识和计算机知识,设计数学模型和程序算法,编制程序实现数据的自动化处理。

三、实验环境

Visualstudio2008

 

界面如下:

输入数据计算:

代码如下:

 

PublicClass高斯投影正反算

PrivateSub高斯投影正反算_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load

'自动化控件显示初始值

RadioButton2.Checked=True

RadioButton3.Checked=True

TextBox1.Focus()

TextBox1.Text="0"

TextBox2.Text="0"

TextBox3.Text="0"

TextBox4.Text="0"

TextBox5.Text="0"

TextBox6.Text="0"

RichTextBox2.Text="说明:

输入的坐标需为按6°带投影且采用克氏椭球参数所得的国家统一坐标"

EndSub

PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click

'获取输入数据

Dimbb1AsDouble,bb2AsDouble,bb3AsDouble,ll1AsDouble,ll2AsDouble,ll3AsDouble

bb1=TextBox1.Text

bb2=TextBox2.Text

bb3=TextBox3.Text

ll1=TextBox4.Text

ll2=TextBox5.Text

ll3=TextBox6.Text

DimBAsDouble,LAsDouble,xAsDouble,yAsDouble,X1AsDouble,Y1AsDouble'X1Y1

DimNAsInteger

DimL0AsDouble,l1AsDouble

DimpAsDouble

p=206264.80625

'检查输入格式的正确性

If(bb1>=0Andbb1<90Andbb2>=0Andbb2<60Andbb3>=0Andbb3<60)Then

B=bb1*3600+bb2*60+bb3

Else

RichTextBox1.Text="纬度输入格式不正确!

"

Return

EndIf

If(ll1>=0Andll1<360Andll2>=0Andll2<60Andll3>=0Andll3<60)Then

L=ll1*3600+ll2*60+ll3

Else

RichTextBox1.Text="经度输入格式不正确!

"

Return

EndIf

Dimb1AsDouble'b1

b1=B/p

'获取用户选项值

DimtydAsInteger

If(RadioButton2.Checked=True)Then

tyd=6

Else

tyd=3

EndIf

DimtyAsInteger

If(RadioButton3.Checked=True)Then

ty=1

Else

ty=2

EndIf

'按带求带号以及中央子午线经度()

If(tyd=6)Then

N=Int(L/(6*3600.0))+1

L0=(6*N-3)*3600.0

l1=(L-L0)/p

ElseIf(tyd=3)Then

N=Int(L/(3*3600.0)+0.5)

L0=3*N*3600.0

l1=(L-L0)/p

EndIf

'采用克氏椭球参数的计算公式

If(ty=1)Then

DimcAsDouble

Dimc1AsDouble

Dimc2AsDouble

Diml2AsDouble

Dimn1AsDouble

Dima0AsDouble

Dima3AsDouble

Dima4AsDouble

Dima5AsDouble

Dima6AsDouble

DimiAsInteger

i=1

c=Math.Pow(Math.Cos(b1),2)

c1=Math.Sin(b1)*Math.Cos(b1)

c2=Math.Cos(b1)

l2=Math.Pow(l1,2)

n1=6399698.902-(21562.267-(108.973-0.612*c)*c)*c'n1

a0=32140.404-(135.3302-(0.7092-0.004*c)*c)*c

a4=(0.25+0.00252*c)*c-0.04166

a6=(0.166*c-0.084)*c

a3=(0.3333333+0.001123*c)*c-0.1666667

a5=0.0083-(0.1667-(0.1968+0.004*c)*c)*c

 

x=6367558.4969*b1-(a0-(0.5+(a4+a6*l2)*l2)*l2*n1)*c1

y=(1+(a3+a5*l2)*l2)*l1*n1*c2

X1=x

Dimy11AsDouble

y11=y+500000.0

Ify11/i>1Then

Y1=N*i*10+y11'Y坐标加代号

i=i*10

EndIf

DimtuoqiuAsString

tuoqiu="采用克氏椭球参数,"

RichTextBox1.Text="按经差"+tyd.ToString("0")+"°进行投影分带,"+tuoqiu+"其计算结果为:

"+vbCrLf+"x="+x.ToString("0.00000000")+vbCrLf+"y="+y.ToString("0.00000000")+vbCrLf+"国家统一坐标为:

"+vbCrLf+"X="+X1.ToString("0.00000000")+vbCrLf+"Y="+N.ToString+Y1.ToString("0.00000000")

EndIf

'采用1975国际椭球参数的计算公式()

If(ty=2)Then

DimcAsDouble

Dimc1AsDouble

Dimc2AsDouble

Diml2AsDouble

Dimn1AsDouble

Dima0AsDouble

Dima3AsDouble

Dima4AsDouble

Dima5AsDouble

Dima6AsDouble

DimiAsInteger

i=1

c=Math.Cos(b1)*Math.Cos(b1)

c1=Math.Sin(b1)*Math.Cos(b1)

c2=Math.Cos(b1)

l2=Math.Pow(l1,2)

n1=6399596.652-(21565.045-(108.996-0.603*c)*c)*c

a0=32144.5189-(135.3646-(0.7034-0.0041*c)*c)*c

a4=(0.25+0.00253*c)*c-0.04167

a6=(0.167*c-0.083)*c

a3=(0.3333333+0.001123*c)*c-0.1666667

a5=0.00878-(0.1702-0.20382*c)*c

 

x=6367452.1328*b1-(a0-(0.5+(a4+a6*l2)*l2)*l2*n1)*c1

y=(1+(a3+a5*l2)*l2)*l1*n1*c2

X1=x

Dimy11AsDouble

y11=y+500000.0

Ify11/i>1Then

Y1=N*i*10+y11'Y坐标加代号

i=i*10

EndIf

DimtuoqiuAsString

tuoqiu="采用1975国际椭球参数,"

RichTextBox1.Text="按经差"+tyd.ToString("0")+"°进行投影分带,"+tuoqiu+"其计算结果为:

"+vbCrLf+"x="+x.ToString("0.00000000")+vbCrLf+"y="+y.ToString("0.00000000")+vbCrLf+"国家统一坐标为:

"+vbCrLf+"X="+X1.ToString("0.00000000")+vbCrLf+"Y="+N.ToString+Y1.ToString("0.00000000")

EndIf

EndSub

PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click

DimyAsDouble,X1AsDouble,Y1AsDouble,BAsDouble,LAsDouble

X1=TextBox7.Text'获取输入数据

Y1=TextBox8.Text

DimL0AsDouble

DimiAsInteger

i=1

DoWhileY1/i>=10

y=Y1-Int(Y1/i)*i-500000

L0=6*Int(Y1/i)-3

i=i*10

Loop'对Y坐标处理并求出中央子午线经度

'按6°带克氏椭球反算

DimbtAsDouble,BT1AsDouble,c3AsDouble,c4AsDouble,BfAsDouble,c5AsDouble,c6AsDouble,NfAsDouble,ZAsDouble

Dimb2AsDouble,b3AsDouble,b4AsDouble,b5AsDouble,z2AsDouble

DimpAsDouble

p=206264.80625

bt=X1/6367558.4969*p

BT1=X1/6367558.4969

c3=Math.Cos(BT1)*Math.Cos(BT1)

c4=Math.Sin(BT1)*Math.Cos(BT1)

Bf=(bt+(50221746+(293622+(2350+22*c3)*c3)*c3)*c4*Math.Pow(10,-10)*p)/p

c5=Math.Pow(Math.Cos(Bf),2)

c6=Math.Sin(Bf)*Math.Cos(Bf)

Nf=6399698.902-(21562.267-(108.973-0.612*c5)*c5)*c5

Z=y/(Nf*Math.Cos(Bf))

b2=(0.5+0.003369*c5)*c6

b3=0.333333-(0.166667-0.001123*c5)*c5

b4=0.25+(0.16161+0.00562*c5)*c5

b5=0.2-(0.1667-0.0088*c5)*c5

z2=Math.Pow(Z,2)

B=(Bf*p-(1-(b4-0.12*z2)*z2)*z2*b2*p)/3600.0

L=L0+((1-(b3-b5*z2)*z2)*Z*p)/3600.0

RichTextBox2.Text="按6°带克氏椭球反算后,结果为:

"+vbCrLf+"B="+B.ToString("0.0000000000000")+vbCrLf+"L="+L.ToString("0.0000000000000")

 

EndSub

PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.Click

TextBox1.Focus()

TextBox1.Text="0"

TextBox2.Text="0"

TextBox3.Text="0"

TextBox4.Text="0"

TextBox5.Text="0"

TextBox6.Text="0"

RichTextBox1.Text=""

EndSub

PrivateSubButton4_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton4.Click

TextBox7.Text=""

TextBox8.Text=""

RichTextBox2.Text="说明:

输入的坐标需为按6°带投影且采用克氏椭球参数所得的国家统一坐标"

EndSub

PrivateSubButton5_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton5.Click

End

EndSub

EndClass

 

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

当前位置:首页 > 小学教育 > 语文

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

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