计算机测绘程序设计实验报告东华理工.docx

上传人:b****6 文档编号:6670251 上传时间:2023-01-08 格式:DOCX 页数:38 大小:439.66KB
下载 相关 举报
计算机测绘程序设计实验报告东华理工.docx_第1页
第1页 / 共38页
计算机测绘程序设计实验报告东华理工.docx_第2页
第2页 / 共38页
计算机测绘程序设计实验报告东华理工.docx_第3页
第3页 / 共38页
计算机测绘程序设计实验报告东华理工.docx_第4页
第4页 / 共38页
计算机测绘程序设计实验报告东华理工.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

计算机测绘程序设计实验报告东华理工.docx

《计算机测绘程序设计实验报告东华理工.docx》由会员分享,可在线阅读,更多相关《计算机测绘程序设计实验报告东华理工.docx(38页珍藏版)》请在冰豆网上搜索。

计算机测绘程序设计实验报告东华理工.docx

计算机测绘程序设计实验报告东华理工

 

计算机测绘程序设计

实验报告

 

专业:

班级:

姓名:

学号:

 

实验一角度与弧度的转换

(1)原理

首先获取输入角度的正负号,再取绝对值,通过提取度、分、秒计算出角度总和,利用1度=π/180弧度求出弧度;首先获取输入弧度的正负号,再取绝对值,利用1弧度=180/π度将弧度转换为角度,单位为度,通过提取度、分、秒计算出度.分秒。

(2)属性设置

窗体、控件属性设置

默认控件名

设置的控件名(Name)

标题(Caption)

Form1

frm_jdhdzh

角度与弧度转换(彭思强)

Command1

Cmd_jh

角度→弧度

Command2

Cmd_hj

弧度→角度

Command3

Cmd_qk

清空

Label1

Label1

角度:

Label2

Label2

弧度:

Text1

txt_jd

无定义

Text2

txt_hd

无定义

(3)程序代码

PrivateSubCmd_jh_Click()

Constpi#=3.14159265358979'定义常量pi

Dimd%,f%,m#,fh%,jdzh%

jd=txt_jd.Text

fh=Sgn(jd)'获取输入角度的正负号

jd=Abs(jd)'取输入角度的绝对值

d=Int(jd)'提取度

f=Int((jd-d)*100)'提取分

m=((jd-d)*100-f)*100'提取秒

jdzh=(d+f/60+m/3600)'得到角度总和,单位为度

hd=Format(jd*pi/180*fh,"0.000000")'保留6位小数

txt_hd.Text=hd

EndSub

PrivateSubCmd_hj_Click()

Constpi#=3.14159265358979'定义常量pi

Dimd%,f%,m#,fh%

hd=txt_hd.Text

fh=Sgn(hd)'获取输入弧度的正负号

jdzh=Abs(hd)*180/pi'将弧度转换为角度,单位为度

d=Int(jdzh)'提取度

f=Int((jdzh-d)*60)'提取分

m=((jdzh-d)*60-f)*60'提取秒

jd=Format((d+f/100+m/10000)*fh,"0.0000")'得到度.分秒并保留四位小数

txt_jd.Text=jd

EndSub

PrivateSubCmd_qk_Click()

txt_jd.Text=""

txt_hd.Text=""

EndSub

(4)运行结果

 

实验二矩阵的加、减、乘、转置、求逆

(1)原理

根据矩阵的运算方法及规则,只有当两个矩阵是同型矩阵时,这两个矩阵才能进行加法和减法运算。

只有当第一个矩阵(左矩阵)的列数等于第二个矩阵(右矩阵)的行数时,两个矩阵才能相乘。

矩阵的转置是行变列,列变行。

矩阵的求逆:

首先提取矩阵中的数据,再利用调用函数完成矩阵运算。

(2)属性设置

窗体、控件属性设置

默认控件名

设置的控件名(Name)

标题(Caption)

Form1

frm_jzys

矩阵运算(彭思强)

Command1

Cmd_jia

A+B

Command2

Cmd_jian

A-B

Command3

Cmd_cheng

A*B

Command4

Cmd_zhuanzhi

AT

Command5

Cmd_qiuni

A-1

Command6

Cmd_qc

清除

Label1

Label1

A

Label2

Label2

B

Label3

Label3

C

Text1

Txt_a

无定义

Text2

Txt_b

无定义

Text3

Txt_c

无定义

(3)程序代码

OptionBase1'数组从1开始

DimA()AsDouble

DimB()AsDouble

DimC()AsDouble

'矩阵相加运算提取数据

PrivateSubCmd_jia_Click()

DimiAsInteger

DimjAsInteger

Dimm1AsInteger

Dimn1AsInteger

Dimm2AsInteger

Dimn2AsInteger

Dimmystring()AsString

Diml()AsString

'提取矩阵A的数据

mystring()=Split(Txt_a.Text,vbCrLf)

m1=UBound(mystring,1)-LBound(mystring,1)+1'获取行数

l()=Split(mystring(0),"")'第一行数据

n1=UBound(l,1)-LBound(l,1)+1'获取列数

ReDimA(m1,n1)'重新定义矩阵A

Fori=1Tom1

l()=Split(mystring(i-1),"")

n1=UBound(l,1)-LBound(l,1)+1'获取列数

Forj=1Ton1

A(i,j)=l(j-1)

Nextj

Nexti

'提取矩阵B的数据

mystring()=Split(Txt_b.Text,vbCrLf)

m2=UBound(mystring,1)-LBound(mystring,1)+1'获取行数

l()=Split(mystring(0),"")'第一行数据

n2=UBound(l,1)-LBound(l,1)+1'获取列数

ReDimB(m2,n2)'重新定义矩阵B

Fori=1Tom2

l()=Split(mystring(i-1),"")

n2=UBound(l,1)-LBound(l,1)+1'获取列数

Forj=1Ton2

B(i,j)=l(j-1)'获取矩阵B

Nextj

Nexti

ReDimC(m1,n1)'重新定义矩阵C

Callmadd(A,B,C)'调用矩阵相加的函数

Txt_c.Text=""

Fori=1Tom1

Forj=1Ton1

Txt_c.Text=Txt_c.Text+Str(C(i,j))+""

Nextj

Txt_c.Text=Txt_c.Text+vbCrLf

Nexti

EndSub

'矩阵相减运算提取数据

PrivateSubCmd_jian_Click()

DimiAsInteger

DimjAsInteger

Dimm1AsInteger

Dimn1AsInteger

Dimm2AsInteger

Dimn2AsInteger

Dimmystring()AsString

Diml()AsString

mystring()=Split(Txt_a.Text,vbCrLf)

m1=UBound(mystring,1)-LBound(mystring,1)+1'获取行数

l()=Split(mystring(0),"")'第一行数据

n1=UBound(l,1)-LBound(l,1)+1'获取列数

ReDimA(m1,n1)'重新定义矩阵A

Fori=1Tom1

l()=Split(mystring(i-1),"")

n1=UBound(l,1)-LBound(l,1)+1'获取列数

Forj=1Ton1

A(i,j)=l(j-1)'获取矩阵A

Nextj

Nexti

mystring()=Split(Txt_b.Text,vbCrLf)

m2=UBound(mystring,1)-LBound(mystring,1)+1'获取行数

l()=Split(mystring(0),"")'第一行数据

n2=UBound(l,1)-LBound(l,1)+1'获取列数

ReDimB(m2,n2)'重新定义矩阵B

Fori=1Tom2

l()=Split(mystring(i-1),"")

n2=UBound(l,1)-LBound(l,1)+1'获取列数

Forj=1Ton2

B(i,j)=l(j-1)'获取矩阵B

Nextj

Nexti

ReDimC(m1,n1)'重新定义矩阵C

Callmcut(A,B,C)'调用矩阵相减的函数

Txt_c.Text=""

Fori=1Tom1

Forj=1Ton1

Txt_c.Text=Txt_c.Text+Str(C(i,j))+""

Nextj

Txt_c.Text=Txt_c.Text+vbCrLf

Nexti

EndSub

'矩阵相乘运算提取数据

PrivateSubCmd_cheng_Click()

DimiAsInteger

DimjAsInteger

Dimm1AsInteger

Dimn1AsInteger

Dimm2AsInteger

Dimn2AsInteger

Dimmystring()AsString

Diml()AsString

mystring()=Split(Txt_a.Text,vbCrLf)

m1=UBound(mystring,1)-LBound(mystring,1)+1'获取行数

l()=Split(mystring(0),"")'第一行数据

n1=UBound(l,1)-LBound(l,1)+1'获取列数

ReDimA(m1,n1)'重新定义矩阵A

Fori=1Tom1

l()=Split(mystring(i-1),"")

n1=UBound(l,1)-LBound(l,1)+1'获取列数

Forj=1Ton1

A(i,j)=l(j-1)'获取矩阵A

Nextj

Nexti

mystring()=Split(Txt_b.Text,vbCrLf)

m2=UBound(mystring,1)-LBound(mystring,1)+1'获取行数

l()=Split(mystring(0),"")'第一行数据

n2=UBound(l,1)-LBound(l,1)+1'获取列数

ReDimB(m2,n2)'重新定义矩阵B

Fori=1Tom2

l()=Split(mystring(i-1),"")

n2=UBound(l,1)-LBound(l,1)+1'获取列数

Forj=1Ton2

B(i,j)=l(j-1)'获取矩阵B

Nextj

Nexti

ReDimC(m1,n2)'重新定义矩阵C

Callmmul(A,B,C)'调用矩阵相乘的函数

Fori=1Tom1

Forj=1Ton2

Txt_c.Text=Txt_c.Text+Str(C(i,j))+""

Nextj

Txt_c.Text=Txt_c.Text+vbCrLf

Nexti

EndSub

'矩阵转置提取数据

PrivateSubCmd_zhuanzhi_Click()

Dimn1AsInteger

Dimm1AsInteger

Dimn2AsInteger

Dimm2AsInteger

DimAT()AsDouble

Dimmystring()AsString

Diml()AsString

mystring()=Split(Txt_a.Text,vbCrLf)

m1=UBound(mystring,1)-LBound(mystring,1)+1'获取行数

l()=Split(mystring(0),"")'第一行数据

n1=UBound(l,1)-LBound(l,1)+1'获取列数

ReDimA(m1,n1)'重新定义矩阵A

Fori=1Tom1

l()=Split(mystring(i-1),"")

n1=UBound(l,1)-LBound(l,1)+1'获取列数

Forj=1Ton1

A(i,j)=l(j-1)'获取矩阵A

Nextj

Nexti

ReDimAT(n1,m1)'重新定义矩阵AT

Callmtrans(A,AT)'调用矩阵转置的函数

Txt_c.Text=""

Fori=1Ton1

Forj=1Tom1

Txt_c.Text=Txt_c.Text+Str(AT(i,j))+""

Nextj

Txt_c.Text=Txt_c.Text+vbCrLf

Nexti

EndSub

'矩阵求逆提取数据

PrivateSubCmd_qiuni_Click()

Dimn1AsInteger

Dimm1AsInteger

Dimn2AsInteger

Dimm2AsInteger

DimAT()AsDouble

Dimmystring()AsString

Diml()AsString

mystring()=Split(Txt_a.Text,vbCrLf)

m1=UBound(mystring,1)-LBound(mystring,1)+1'获取行数

l()=Split(mystring(0),"")'第一行数据

n1=UBound(l,1)-LBound(l,1)+1'获取列数

ReDimA(m1,n1)'重新定义

Fori=1Tom1

l()=Split(mystring(i-1),"")

n1=UBound(l,1)-LBound(l,1)+1'获取列数

Forj=1Ton1

A(i,j)=l(j-1)

Nextj

Nexti

CallMRinv(A)'调用矩阵求逆的函数

Txt_c.Text=""

Fori=1Ton1

Forj=1Tom1

Txt_c.Text=Txt_c.Text+Str(A(i,j))+""

Nextj

Txt_c.Text=Txt_c.Text+vbCrLf

Nexti

EndSub

'Cmd_qc_Click()事件完成数据的清除

PrivateSubCmd_qc_Click()

Txt_a.Text=""

Txt_b.Text=""

Txt_c.Text=""

EndSub

Submadd(mtxA()AsDouble,mtxB()AsDouble,mtxC()AsDouble)'矩阵相加

DimiAsInteger,jAsInteger

DimmAsInteger,nAsInteger

m=UBound(mtxA,1)-LBound(mtxA,1)+1

n=UBound(mtxA,2)-LBound(mtxA,2)+1

Fori=1Tom

Forj=1Ton

mtxC(i,j)=mtxA(i,j)+mtxB(i,j)

Nextj

Nexti

EndSub

Submcut(mtxA()AsDouble,mtxB()AsDouble,mtxC()AsDouble)'矩阵相减

DimiAsInteger,jAsInteger

DimmAsInteger,nAsInteger

m=UBound(mtxA,1)-LBound(mtxA,1)+1

n=UBound(mtxA,2)-LBound(mtxA,2)+1

Fori=1Tom

Forj=1Ton

mtxC(i,j)=mtxA(i,j)-mtxB(i,j)

Nextj

Nexti

EndSub

Submmul(mtxA()AsDouble,mtxB()AsDouble,mtxC()AsDouble)'矩阵相乘

DimiAsInteger,jAsInteger

DimmAsInteger,nAsInteger

DimlAsInteger,KAsInteger

m=UBound(mtxA,1)-LBound(mtxA,1)+1

n=UBound(mtxA,2)-LBound(mtxA,2)+1

l=UBound(mtxB,2)-LBound(mtxB,2)+1

Fori=1Tom

Forj=1Tol

ForK=1Ton

mtxC(i,j)=mtxC(i,j)+mtxA(i,K)*mtxB(K,j)

NextK

Nextj

Nexti

EndSub

Submtrans(mtxA()AsDouble,mtxAT()AsDouble)'矩阵转置

DimiAsInteger,jAsInteger

DimmAsInteger,nAsInteger

m=UBound(mtxA,1)-LBound(mtxA,1)+1

n=UBound(mtxA,2)-LBound(mtxA,2)+1

Fori=1Ton

Forj=1Tom

mtxAT(i,j)=mtxA(j,i)

Nextj

Nexti

EndSub

FunctionMRinv(mtxA()AsDouble)AsBoolean'矩阵求逆

DimnAsInteger

n=UBound(mtxA,1)-LBound(mtxA,1)+1

ReDimnIs(0Ton)AsInteger,nJs(0Ton)AsInteger

DimiAsInteger,jAsInteger,KAsInteger

DimDAsDouble,pAsDouble

ForK=1Ton

D=0#

Fori=KTon

Forj=KTon

p=Abs(mtxA(i,j))

If(p>D)Then

D=p

nIs(K)=i

nJs(K)=j

EndIf

Nextj

Nexti

If(D+1#=1#)Then

MRinv=False

ExitFunction

EndIf

If(nIs(K)<>K)Then

Forj=1Ton

p=mtxA(K,j)

mtxA(K,j)=mtxA(nIs(K),j)

mtxA(nIs(K),j)=p

Nextj

EndIf

If(nJs(K)<>K)Then

Fori=1Ton

p=mtxA(i,K)

mtxA(i,K)=mtxA(i,nJs(K))

mtxA(i,nJs(K))=p

Nexti

EndIf

mtxA(K,K)=1#/mtxA(K,K)

Forj=1Ton

If(j<>K)ThenmtxA(K,j)=mtxA(K,j)*mtxA(K,K)

Nextj

Fori=1Ton

If(i<>K)Then

Forj=1Ton

If(j<>K)ThenmtxA(i,j)=mtxA(i,j)-mtxA(i,K)*mtxA(K,j)

Nextj

EndIf

Nexti

Fori=1Ton

If(i<>K)ThenmtxA(i,K)=-mtxA(i,K)*mtxA(K,K)

Nexti

NextK

ForK=nTo1Step-1

If(nJs(K)<>K)Then

Forj=1Ton

p=mtxA(K,j)

mtxA(K,j)=mtxA(nJs(K),j)

mtxA(nJs(K),j)=p

Nextj

EndIf

If(nIs(K)<>K)Then

Fori=1Ton

p=mtxA(i,K)

mtxA(i,K)=mtxA(i,nIs(K))

mtxA(i,nIs(K))=p

Nexti

EndIf

NextK

MRinv=True

EndFunction

 

(4)运行结果

 

实验三坐标正反算

1.坐标正算

(1)原理

已知一点坐标A(XA,YA)、水平距离DAB和坐标方位角αAB,求另一点坐标B(XB,YB)。

利用角度与弧度的相互转换函数,根据坐标正算公式XB=XA+DAB*Cos(αAB),YB=YA+DAB*Sin(αAB)计算出B点坐标。

(2)属性设置

窗体、框架等控件属性设置

默认控件名

设置的控件名(Name)

标题(Caption)

Form1

frm_zbzs

坐标正算(彭思强)

Command1

Cmd_js

计算

Command2

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

当前位置:首页 > 解决方案 > 学习计划

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

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