1、计算机测绘程序设计实验报告东华理工计算机测绘程序设计实验报告专业:班级:姓名:学号:实验一 角度与弧度的转换(1)原理首先获取输入角度的正负号,再取绝对值,通过提取度、分、秒计算出角度总和,利用1度=/180弧度求出弧度;首先获取输入弧度的正负号,再取绝对值,利用1弧度=180/度将弧度转换为角度,单位为度,通过提取度、分、秒计算出度.分秒。(2)属性设置窗体、控件属性设置默认控件名设置的控件名(Name)标题(Caption)Form1frm_jdhdzh角度与弧度转换(彭思强)Command1Cmd_jh角度弧度Command2Cmd_hj弧度角度Command3Cmd_qk清空Label
2、1Label1角度:Label2Label2弧度:Text1txt_jd无定义Text2txt_hd无定义(3)程序代码Private Sub Cmd_jh_Click()Const pi# = 3.14159265358979 定义常量piDim d%, f%, m#, fh%, jdzh%jd = txt_jd.Textfh = Sgn(jd) 获取输入角度的正负号jd = Abs(jd) 取输入角度的绝对值d = Int(jd) 提取度f = Int(jd - d) * 100) 提取分m = (jd - d) * 100 - f) * 100 提取秒jdzh = (d + f / 60
3、 + m / 3600) 得到角度总和,单位为度hd = Format(jd * pi / 180 * fh, 0.000000) 保留6位小数txt_hd.Text = hdEnd SubPrivate Sub Cmd_hj_Click()Const pi# = 3.14159265358979 定义常量piDim d%, f%, m#, fh%hd = txt_hd.Textfh = Sgn(hd) 获取输入弧度的正负号jdzh = Abs(hd) * 180 / pi 将弧度转换为角度,单位为度d = Int(jdzh) 提取度f = Int(jdzh - d) * 60) 提取分m =
4、 (jdzh - d) * 60 - f) * 60 提取秒jd = Format(d + f / 100 + m / 10000) * fh, 0.0000) 得到度.分秒并保留四位小数txt_jd.Text = jdEnd SubPrivate Sub Cmd_qk_Click()txt_jd.Text = txt_hd.Text = End Sub(4)运行结果实验二 矩阵的加、减、乘、转置、求逆(1)原理根据矩阵的运算方法及规则,只有当两个矩阵是同型矩阵时,这两个矩阵才能进行加法和减法运算。只有当第一个矩阵(左矩阵)的列数等于第二个矩阵(右矩阵)的行数时,两个矩阵才能相乘。矩阵的转置是
5、行变列,列变行。矩阵的求逆:。首先提取矩阵中的数据,再利用调用函数完成矩阵运算。(2)属性设置窗体、控件属性设置默认控件名设置的控件名(Name)标题(Caption)Form1frm_jzys矩阵运算(彭思强)Command1Cmd_jiaA+BCommand2Cmd_jianA-BCommand3Cmd_chengA*BCommand4Cmd_zhuanzhiATCommand5Cmd_qiuniA-1Command6Cmd_qc清除Label1Label1ALabel2Label2BLabel3Label3 CText1Txt_a无定义Text2Txt_b无定义Text3Txt_c无定义
6、(3)程序代码Option Base 1 数组从1开始Dim A() As DoubleDim B() As DoubleDim C() As Double矩阵相加运算提取数据Private Sub Cmd_jia_Click()Dim i As IntegerDim j As IntegerDim m1 As IntegerDim n1 As IntegerDim m2 As IntegerDim n2 As IntegerDim mystring() As StringDim l() As String 提取矩阵A的数据mystring() = Split(Txt_a.Text, vbCr
7、Lf)m1 = UBound(mystring, 1) - LBound(mystring, 1) + 1 获取行数l() = Split(mystring(0), ) 第一行数据n1 = UBound(l, 1) - LBound(l, 1) + 1 获取列数ReDim A(m1, n1) 重新定义矩阵AFor i = 1 To m1 l() = Split(mystring(i - 1), ) n1 = UBound(l, 1) - LBound(l, 1) + 1 获取列数 For j = 1 To n1 A(i, j) = l(j - 1) Next jNext i 提取矩阵B的数据m
8、ystring() = 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 获取列数ReDim B(m2, n2) 重新定义矩阵BFor i = 1 To m2 l() = Split(mystring(i - 1), ) n2 = UBound(l, 1) - LBound(l, 1) + 1 获取列数 For j = 1 To n2 B(i, j)
9、 = l(j - 1) 获取矩阵B Next jNext iReDim C(m1, n1) 重新定义矩阵CCall madd(A, B, C) 调用矩阵相加的函数Txt_c.Text = For i = 1 To m1 For j = 1 To n1 Txt_c.Text = Txt_c.Text + Str(C(i, j) + Next j Txt_c.Text = Txt_c.Text + vbCrLfNext iEnd Sub矩阵相减运算提取数据Private Sub Cmd_jian_Click()Dim i As IntegerDim j As IntegerDim m1 As In
10、tegerDim n1 As IntegerDim m2 As IntegerDim n2 As IntegerDim mystring() As StringDim l() As Stringmystring() = 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 获取列数ReDim A(m1, n1) 重新定义矩阵AFor i = 1 To m
11、1 l() = Split(mystring(i - 1), ) n1 = UBound(l, 1) - LBound(l, 1) + 1 获取列数 For j = 1 To n1 A(i, j) = l(j - 1) 获取矩阵A Next jNext imystring() = 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 获取列数ReDim
12、B(m2, n2) 重新定义矩阵BFor i = 1 To m2 l() = Split(mystring(i - 1), ) n2 = UBound(l, 1) - LBound(l, 1) + 1 获取列数 For j = 1 To n2 B(i, j) = l(j - 1) 获取矩阵B Next jNext iReDim C(m1, n1) 重新定义矩阵CCall mcut(A, B, C) 调用矩阵相减的函数Txt_c.Text = For i = 1 To m1 For j = 1 To n1 Txt_c.Text = Txt_c.Text + Str(C(i, j) + Next
13、j Txt_c.Text = Txt_c.Text + vbCrLfNext iEnd Sub矩阵相乘运算提取数据Private Sub Cmd_cheng_Click()Dim i As IntegerDim j As IntegerDim m1 As IntegerDim n1 As IntegerDim m2 As IntegerDim n2 As IntegerDim mystring() As StringDim l() As Stringmystring() = Split(Txt_a.Text, vbCrLf)m1 = UBound(mystring, 1) - LBound(m
14、ystring, 1) + 1 获取行数l() = Split(mystring(0), ) 第一行数据n1 = UBound(l, 1) - LBound(l, 1) + 1 获取列数ReDim A(m1, n1) 重新定义矩阵AFor i = 1 To m1 l() = Split(mystring(i - 1), ) n1 = UBound(l, 1) - LBound(l, 1) + 1 获取列数 For j = 1 To n1 A(i, j) = l(j - 1) 获取矩阵A Next jNext imystring() = Split(Txt_b.Text, vbCrLf)m2 =
15、 UBound(mystring, 1) - LBound(mystring, 1) + 1 获取行数l() = Split(mystring(0), ) 第一行数据n2 = UBound(l, 1) - LBound(l, 1) + 1 获取列数ReDim B(m2, n2) 重新定义矩阵BFor i = 1 To m2 l() = Split(mystring(i - 1), ) n2 = UBound(l, 1) - LBound(l, 1) + 1 获取列数 For j = 1 To n2 B(i, j) = l(j - 1) 获取矩阵B Next jNext iReDim C(m1,
16、 n2) 重新定义矩阵CCall mmul(A, B, C) 调用矩阵相乘的函数For i = 1 To m1 For j = 1 To n2 Txt_c.Text = Txt_c.Text + Str(C(i, j) + Next j Txt_c.Text = Txt_c.Text + vbCrLfNext iEnd Sub矩阵转置提取数据Private Sub Cmd_zhuanzhi_Click()Dim n1 As IntegerDim m1 As IntegerDim n2 As IntegerDim m2 As IntegerDim AT() As DoubleDim mystri
17、ng() As StringDim l() As Stringmystring() = 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 获取列数ReDim A(m1, n1) 重新定义矩阵AFor i = 1 To m1 l() = Split(mystring(i - 1), ) n1 = UBound(l, 1) - LBound(l, 1)
18、+ 1 获取列数 For j = 1 To n1 A(i, j) = l(j - 1) 获取矩阵A Next jNext iReDim AT(n1, m1) 重新定义矩阵ATCall mtrans(A, AT) 调用矩阵转置的函数Txt_c.Text = For i = 1 To n1 For j = 1 To m1 Txt_c.Text = Txt_c.Text + Str(AT(i, j) + Next j Txt_c.Text = Txt_c.Text + vbCrLf Next iEnd Sub矩阵求逆提取数据Private Sub Cmd_qiuni_Click()Dim n1 As
19、 IntegerDim m1 As IntegerDim n2 As IntegerDim m2 As IntegerDim AT() As DoubleDim mystring() As StringDim l() As Stringmystring() = 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 获取列数ReDim A(m1, n1)
20、重新定义For i = 1 To m1 l() = Split(mystring(i - 1), ) n1 = UBound(l, 1) - LBound(l, 1) + 1 获取列数 For j = 1 To n1 A(i, j) = l(j - 1) Next jNext iCall MRinv(A) 调用矩阵求逆的函数Txt_c.Text = For i = 1 To n1 For j = 1 To m1 Txt_c.Text = Txt_c.Text + Str(A(i, j) + Next j Txt_c.Text = Txt_c.Text + vbCrLf Next iEnd Su
21、bCmd_qc_Click()事件完成数据的清除Private Sub Cmd_qc_Click()Txt_a.Text = Txt_b.Text = Txt_c.Text = End SubSub madd(mtxA() As Double, mtxB() As Double, mtxC() As Double) 矩阵相加 Dim i As Integer, j As Integer Dim m As Integer, n As Integer m = UBound(mtxA, 1) - LBound(mtxA, 1) + 1 n = UBound(mtxA, 2) - LBound(mtx
22、A, 2) + 1 For i = 1 To m For j = 1 To n mtxC(i, j) = mtxA(i, j) + mtxB(i, j) Next j Next iEnd SubSub mcut(mtxA() As Double, mtxB() As Double, mtxC() As Double) 矩阵相减 Dim i As Integer, j As Integer Dim m As Integer, n As Integer m = UBound(mtxA, 1) - LBound(mtxA, 1) + 1 n = UBound(mtxA, 2) - LBound(mt
23、xA, 2) + 1 For i = 1 To m For j = 1 To n mtxC(i, j) = mtxA(i, j) - mtxB(i, j) Next j Next iEnd SubSub mmul(mtxA() As Double, mtxB() As Double, mtxC() As Double) 矩阵相乘 Dim i As Integer, j As Integer Dim m As Integer, n As Integer Dim l As Integer, K As Integer m = UBound(mtxA, 1) - LBound(mtxA, 1) + 1
24、 n = UBound(mtxA, 2) - LBound(mtxA, 2) + 1 l = UBound(mtxB, 2) - LBound(mtxB, 2) + 1 For i = 1 To m For j = 1 To l For K = 1 To n mtxC(i, j) = mtxC(i, j) + mtxA(i, K) * mtxB(K, j) Next K Next j Next iEnd SubSub mtrans(mtxA() As Double, mtxAT() As Double) 矩阵转置 Dim i As Integer, j As Integer Dim m As
25、Integer, n As Integer m = UBound(mtxA, 1) - LBound(mtxA, 1) + 1 n = UBound(mtxA, 2) - LBound(mtxA, 2) + 1 For i = 1 To n For j = 1 To m mtxAT(i, j) = mtxA(j, i) Next j Next iEnd SubFunction MRinv(mtxA() As Double) As Boolean 矩阵求逆Dim n As Integern = UBound(mtxA, 1) - LBound(mtxA, 1) + 1ReDim nIs(0 To
26、 n) As Integer, nJs(0 To n) As IntegerDim i As Integer, j As Integer, K As IntegerDim D As Double, p As DoubleFor K = 1 To nD = 0#For i = K To n For j = K To n p = Abs(mtxA(i, j) If (p D) Then D = p nIs(K) = i nJs(K) = j End IfNext jNext iIf (D + 1# = 1#) Then MRinv = False Exit FunctionEnd IfIf (nI
27、s(K) K) Then For j = 1 To n p = mtxA(K, j) mtxA(K, j) = mtxA(nIs(K), j) mtxA(nIs(K), j) = p Next jEnd IfIf (nJs(K) K) Then For i = 1 To n p = mtxA(i, K) mtxA(i, K) = mtxA(i, nJs(K) mtxA(i, nJs(K) = p Next iEnd IfmtxA(K, K) = 1# / mtxA(K, K)For j = 1 To n If (j K) Then mtxA(K, j) = mtxA(K, j) * mtxA(
28、K, K)Next jFor i = 1 To n If (i K) Then For j = 1 To n If (j K) Then mtxA(i, j) = mtxA(i, j) - mtxA(i, K) * mtxA(K, j) Next j End IfNext iFor i = 1 To n If (i K) Then mtxA(i, K) = -mtxA(i, K) * mtxA(K, K)Next iNext KFor K = n To 1 Step -1 If (nJs(K) K) Then For j = 1 To n p = mtxA(K, j) mtxA(K, j) =
29、 mtxA(nJs(K), j) mtxA(nJs(K), j) = p Next jEnd IfIf (nIs(K) K) ThenFor i = 1 To n p = mtxA(i, K) mtxA(i, K) = mtxA(i, nIs(K) mtxA(i, nIs(K) = pNext iEnd IfNext KMRinv = TrueEnd Function(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)Form1frm_zbzs坐标正算(彭思强)Command1Cmd_js计算Command2
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1