计算机测绘程序设计实验报告东华理工.docx
- 文档编号:6670251
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:38
- 大小:439.66KB
计算机测绘程序设计实验报告东华理工.docx
《计算机测绘程序设计实验报告东华理工.docx》由会员分享,可在线阅读,更多相关《计算机测绘程序设计实验报告东华理工.docx(38页珍藏版)》请在冰豆网上搜索。
计算机测绘程序设计实验报告东华理工
计算机测绘程序设计
实验报告
专业:
班级:
姓名:
学号:
实验一角度与弧度的转换
(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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 测绘 程序设计 实验 报告 东华 理工