计算机测绘程序设计实验报告东华理工Word文档格式.docx
《计算机测绘程序设计实验报告东华理工Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算机测绘程序设计实验报告东华理工Word文档格式.docx(38页珍藏版)》请在冰豆网上搜索。
清空
Label1
角度:
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()
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
PrivateSubCmd_qk_Click()
txt_jd.Text="
"
txt_hd.Text="
(4)运行结果
实验二矩阵的加、减、乘、转置、求逆
根据矩阵的运算方法及规则,只有当两个矩阵是同型矩阵时,这两个矩阵才能进行加法和减法运算。
只有当第一个矩阵(左矩阵)的列数等于第二个矩阵(右矩阵)的行数时,两个矩阵才能相乘。
矩阵的转置是行变列,列变行。
矩阵的求逆:
。
首先提取矩阵中的数据,再利用调用函数完成矩阵运算。
frm_jzys
矩阵运算(彭思强)
Cmd_jia
A+B
Cmd_jian
A-B
Cmd_cheng
A*B
Command4
Cmd_zhuanzhi
AT
Command5
Cmd_qiuni
A-1
Command6
Cmd_qc
清除
A
B
Label3
C
Txt_a
Txt_b
Text3
Txt_c
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'
n2=UBound(l,1)-LBound(l,1)+1'
ReDimB(m2,n2)'
重新定义矩阵B
Fori=1Tom2
n2=UBound(l,1)-LBound(l,1)+1'
Forj=1Ton2
B(i,j)=l(j-1)'
获取矩阵B
ReDimC(m1,n1)'
重新定义矩阵C
Callmadd(A,B,C)'
调用矩阵相加的函数
Txt_c.Text="
Txt_c.Text=Txt_c.Text+Str(C(i,j))+"
Txt_c.Text=Txt_c.Text+vbCrLf
矩阵相减运算提取数据
PrivateSubCmd_jian_Click()
A(i,j)=l(j-1)'
获取矩阵A
Callmcut(A,B,C)'
调用矩阵相减的函数
矩阵相乘运算提取数据
PrivateSubCmd_cheng_Click()
ReDimC(m1,n2)'
Callmmul(A,B,C)'
调用矩阵相乘的函数
矩阵转置提取数据
PrivateSubCmd_zhuanzhi_Click()
DimAT()AsDouble
ReDimAT(n1,m1)'
重新定义矩阵AT
Callmtrans(A,AT)'
调用矩阵转置的函数
Fori=1Ton1
Forj=1Tom1
Txt_c.Text=Txt_c.Text+Str(AT(i,j))+"
Nexti
矩阵求逆提取数据
PrivateSubCmd_qiuni_Click()
重新定义
CallMRinv(A)'
调用矩阵求逆的函数
Txt_c.Text=Txt_c.Text+Str(A(i,j))+"
Cmd_qc_Click()事件完成数据的清除
PrivateSubCmd_qc_Click()
Txt_a.Text="
Txt_b.Text="
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)
Submcut(mtxA()AsDouble,mtxB()AsDouble,mtxC()AsDouble)'
矩阵相减
mtxC(i,j)=mtxA(i,j)-mtxB(i,j)
Submmul(mtxA()AsDouble,mtxB()AsDouble,mtxC()AsDouble)'
矩阵相乘
DimlAsInteger,KAsInteger
l=UBound(mtxB,2)-LBound(mtxB,2)+1
Forj=1Tol
ForK=1Ton
mtxC(i,j)=mtxC(i,j)+mtxA(i,K)*mtxB(K,j)
NextK
Submtrans(mtxA()AsDouble,mtxAT()AsDouble)'
矩阵转置
Fori=1Ton
Forj=1Tom
mtxAT(i,j)=mtxA(j,i)
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
If(D+1#=1#)Then
MRinv=False
ExitFunction
EndIf
If(nIs(K)<
>
K)Then
p=mtxA(K,j)
mtxA(K,j)=mtxA(nIs(K),j)
mtxA(nIs(K),j)=p
If(nJs(K)<
p=mtxA(i,K)
mtxA(i,K)=mtxA(i,nJs(K))
mtxA(i,nJs(K))=p
mtxA(K,K)=1#/mtxA(K,K)
Forj=1Ton
If(j<
K)ThenmtxA(K,j)=mtxA(K,j)*mtxA(K,K)
Fori=1Ton
If(i<
K)ThenmtxA(i,j)=mtxA(i,j)-mtxA(i,K)*mtxA(K,j)
K)ThenmtxA(i,K)=-mtxA(i,K)*mtxA(K,K)
NextK
ForK=nTo1Step-1
If(nJs(K)<
mtxA(K,j)=mtxA(nJs(K),j)
mtxA(nJs(K),j)=p
mtxA(i,K)=mtxA(i,nIs(K))
mtxA(i,nIs(K))=p
MRinv=True
EndFunction
实验三坐标正反算
1.坐标正算
已知一点坐标A(XA,YA)、水平距离DAB和坐标方位角αAB,求另一点坐标B(XB,YB)。
利用角度与弧度的相互转换函数,根据坐标正算公式XB=XA+DAB*Cos(αAB),YB=YA+DAB*Sin(αAB)计算出B点坐标。
窗体、框架等控件属性设置
frm_zbzs
坐标正算(彭思强)
Cmd_js
计算