计算机测绘程序设计实验报告.doc

上传人:wux****ua 文档编号:8961043 上传时间:2020-04-02 格式:DOC 页数:30 大小:571.50KB
返回 下载 相关 举报
计算机测绘程序设计实验报告.doc_第1页
第1页 / 共30页
计算机测绘程序设计实验报告.doc_第2页
第2页 / 共30页
计算机测绘程序设计实验报告.doc_第3页
第3页 / 共30页
点击查看更多>>
资源描述
计算机测绘程序设计实验报告专业:班级:姓名:学号:实验一角度与弧度的转换(1) 原理首先获取输入角度的正负号,再取绝对值,通过提取度、分、秒计算出角度总和,利用1度=/180弧度求出弧度;首先获取输入弧度的正负号,再取绝对值,利用1弧度=180/度将弧度转换为角度,单位为度,通过提取度、分、秒计算出度.分秒。(2)属性设置窗体、控件属性设置默认控件名设置的控件名(Name)标题(Caption)Form1frm_jdhdzh角度与弧度转换(彭思强)Command1Cmd_jh角度弧度Command2Cmd_hj弧度角度Command3Cmd_qk清空Label1Label1角度: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 + 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 = (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) 原理根据矩阵的运算方法及规则,只有当两个矩阵是同型矩阵时,这两个矩阵才能进行加法和减法运算。只有当第一个矩阵(左矩阵)的列数等于第二个矩阵(右矩阵)的行数时,两个矩阵才能相乘。矩阵的转置是行变列,列变行。矩阵的求逆:。首先提取矩阵中的数据,再利用调用函数完成矩阵运算。(2) 属性设置窗体、控件属性设置默认控件名设置的控件名(Name)标题(Caption)Form1frm_jzys矩阵运算(彭思强)Command1Cmd_jiaA+BCommand2Cmd_jianA-BCommand3Cmd_chengA*BCommand4Cmd_zhuanzhiATCommand5Cmd_qiuniA-1Command6Cmd_qc清除Label1Label1ALabel2Label2BLabel3Label3 CText1Txt_a无定义Text2Txt_b无定义Text3Txt_c无定义(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, 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) + 1 获取列数 For j = 1 To n1 A(i, j) = l(j - 1) Next jNext i 提取矩阵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 获取列数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, 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 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(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) 获取矩阵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 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 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(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) 获取矩阵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 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, 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 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 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 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 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) 重新定义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 SubCmd_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(mtxA, 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(mtxA, 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 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 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 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 (nIs(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(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) = 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计算Command2Cmd_tc退出Frame1Frame1输入已知数据Frame2Frame2求另一点坐标Frame3Frame3坐标方位角单位窗体界面中各框架内控件属性设置框架默认控件名设置的控件名(Name)标题(Caption)Frame1(Caption=“输入已知数据”)Label1Label1XA=Label2Label2YA=Label3Label3水平距离(DAB=)Label4Label4坐标方位角(AB=)Text1txt_xa无定义Text2txt_ya无定义Text3txt_dab无定义Text4txt_ab无定义Frame2(Caption=“求另一点坐标”)Label5Label5XB=Label6Label6YB=Text5txt_xb无定义Text6txt_yb无定义Frame3(Caption=“坐标方位角单位”)Option1opt_fwj度.分秒Option1opt_fwj度Option1opt_fwj弧度(3)程序代码Form_Load()事件将初始角度单位设置为度.分秒Private Sub Form_Load()opt_fwj(0) = TrueEnd SubPrivate Sub Cmd_js_Click()Dim dab#, ab#, xa#, ya#, xb#, yb#, dw%xa = Val(txt_xa)ya = Val(txt_ya)dab = Val(txt_dab)ab = Val(txt_ab)dw = 0 输入角度单位为度.分秒If opt_fwj(1) Then 输入角度单位为度dw = 1ElseIf opt_fwj(2) Then 输入角度单位为弧度dw = 2End Ifab = jdzh(ab, dw) 调用角度与弧度相互转换函数xb = xa + dab * Cos(ab) 利用公式计算B点的横坐标yb = ya + dab * Sin(ab) 利用公式计算B点的纵坐标xb = Round(xb, 3) 对xb进行四舍五入,小数点后保留3位yb = Round(yb, 3) 对yb进行四舍五入,小数点后保留3位txt_xb = Trim(Str(xb) 去掉字符串两边的空格txt_yb = Trim(Str(yb) 去掉字符串两边的空格End SubPrivate Sub Cmd_tc_Click()Unload frm_zbzsEnd Subsrdw和scdw为可选变量,省略时默认其值均为0,即输入角度的单位为度.分秒,输出角度的单位为弧度Public Function jdzh#(jd#, Optional srdw% = 0, Optional scdw% = 0)Const pi# = 3.14159265358979 定义常量piDim d%, f%, m#, fh%fh = Sgn(jd) 获取输入角度的正负号jd = Abs(jd) 取输入角度的绝对值将输入角度单位首先转换为分Select Case srdwCase 0 输入单位为度.分秒d = Int(jd) 提取度f = Int(jd - d) * 100) 提取分m = (jd - d) * 100 - f) * 100 提取秒jdzh = d + f / 60 + m / 3600 得到角度总和,单位为度Case 1 输入单位为度jdzh = jdCase Else 输入单位为弧度jdzh = jd * 180 / piEnd Select输出角度单位Select Case scdwCase 0 输出单位转换为弧度jdzh = jdzh * pi / 180 * fhCase 1 输出单位为度jdzh = jdzh * fhCase 2 输出单位为分jdzh = jdzh * 60 * fhCase 3 输出单位为秒jdzh = jdzh * 3600 * fhCase Else 输出单位为度.分秒d = Int(jdzh) 提取度f = Int(jdzh - d) * 60) 提取分m = (jdzh - d) * 60 - f) * 60 提取秒jdzh = (d + f / 100 + m / 10000) * fhEnd SelectEnd Function(4)运行结果2.坐标反算(1) 原理已知两点坐标A(XA,YA)、B(XB,YB),求水平距离DAB和坐标方位角AB。利用函数jddw()将弧度转换为不同的角度单位及表现形式,根据两点之间的距离公式求出水平距离,再运用坐标反算公式计算出坐标方位角。坐标反算公式:上两式中,(2) 属性设置窗体、框架等控件属性设置默认控件名设置的控件名(Name)标题(Caption)Form1frm_zbfs坐标反算(彭思强)Command1Cmd_js计算Command2Cmd_qc清除Command3Cmd_tc退出Frame1Frame1已知数据Frame2Frame2计算结果Frame3Frame3方位角单位设置窗体界面中各框架内控件属性设置框架默认控件名设置的控件名(Name)标题(Caption)Frame1(Caption=“已知数据”)Label1Lbl_xaXA=Label2Lbl_yaYA=Label3Lbl_xbXB=Label4Lbl_ybYB=Text1txt_xa无定义Text2txt_ya无定义Text3txt_dab无定义Text4txt_aab无定义Frame2(Caption=“计算结果”)Label5Lbl_dab水平距离(DAB):Label6Lbl_aab坐标方位角(AB):Text5txt_dab无定义Text6txt_aab无定义Frame3(Caption=“方位角单位设置”)Combo1Cmb_fwj无定义(3)程序代码自定义函数jddw()的功能是将弧度转换为不同的角度单位及表现形式Function jddw(hd#, n%) As VariantConst pi# = 3.14159265358979Dim jd#, d%, f%, m#, fh%If n = 3 Then 输出单位为弧度jddw = Format(hd, 0.0000000000)Elsefh = Sgn(hd)jd = Abs(hd) * 180 / pid = Int(jd)f = Int(jd - d) * 60)m = (jd - d) * 60 - f) * 60If n = 0 Then 输出单位为度.分秒jddw = Format(d + f / 100 + m / 10000) * fh, 0.000000)ElseIf n = 1 Then 输出单位为度分秒”jddw = Format(d, 0) & & Format(f, 00) & & Format(m, 00.00) & ElseIf n = 2 Then 输出单位为度jddw = Format(jd * fh, 0.00000000)End IfEnd IfEnd FunctionForm_Load()事件完成组合框(Cmb_fwj)项目的加载Private Sub Form_Load()Cmb_fwj.AddItem 度.分秒Cmb_fwj.AddItem 度分秒Cmb_fwj.AddItem 度Cmb_fwj.AddItem 弧度Cmb_fwj.ListIndex = 0End SubCmd_js_Click()事件完成坐标反算Private Sub Cmd_js_Click()Const pi# = 3.14159265358979Dim xa#, ya#, xb#, yb#, dab#, aab#Dim dx#, dy#xa = Val(Txt_xa.Text)ya = Val(Txt_ya.Text)xb = Val(Txt_xb.Text)yb = Val(Txt_yb.Text)dx = xb - xady = yb - yadab = Sqr(dx 2 + dy 2) 求水平距离aab = pi / 2 * (2 - Sgn(dy + 10 -10) - Atn(dx / (dy + 10 -10) 求方位角Txt_dab.Text = Format(dab, 0.000)Txt_aab.Text = jddw(aab, Cmb_fwj.ListIndex)End SubCmd_qc_Click()事件清除文本框数据Private Sub Cmd_qc_Click()Txt_xa = Txt_ya = Txt_xb = Txt_yb = Txt_dab = Txt_aab = End SubCmd_tc_Click()事件退出界面Private Sub Cmd_tc_Click()Unload Frm_zbfsEnd Sub(4)运行结果实验四前方交会(1) 原理前方交会分角度前方交会和距离前方交会两种。角度前方交会是已知A、B两点的坐标以及角度观测值和,求P点的坐标;而距离前方交会则是已知A、B两点的坐标,根据边长观测值a和b,求P点的坐标。其中,角度交会按式(4-1)进行计算;距离交会先按式(4-2)计算出和角度值,再按式(4-1)计算出P点的坐标。在VB中反三角函数只有反正切Atn()函数,反余弦可按公式进行计算。注意:已知点和待定点必须按A、B、P逆时针方向编号,在A点观测角编号为,若距离交会则对边编号为a,在B点观测角编号为,若距离交会则对边编号为b。(4-1) (4-2)(2) 属性设置窗体、框架等控件属性设置默认控件名设置的控件名(Name)标题(Caption)From1frm_qfjh前方交会(彭思强)Frame1Frame1交会方法Frame2Frame2角度单位设置Frame3Frame3已知数据输入Frame4Frame4待定点坐标Picture1Picture1Command1cmd_js计算Command2cmd_tc退出Label9Label9说明:已知点和待定点必须按A、B、P逆时针方向编号,在A点观测角编号为,若距离交会则对边编号为a,在B点观测角编号为,若距离交会则对边编号为b。窗体界面中各框架内控件属性设置框架默认控件名设置的控件名(Name)标题(Caption)Frame1(Caption=“交会方法”)Option1opn_jdorjl角度交会Option1opn_jdorjl距离交会Frame2(Caption=“角度单位设置”)Option2opn_dw度.分秒Option2opn_dw度Option2opn_dw弧度Frame3(Caption=“已知数据输入”)Label1Label1XA=Label2Label2YA=Label3Label3XB=Label4Label4YB=Label5Label5角度=Label6Label6角度=Text1txt_xa无定义Text2txt_ya无定义Text3txt_xb无定义Text4txt_yb无定义Text5txt_a无定义Text6txt_b无定义Frame4(Caption=“待定点坐标”)Label7Label7XP=Label8Label8YP=Text7txt_xp无定义Text8txt_yp无定义(3)程序代码Option Explicit 强制显式声明变量子过程qfjh( )完成角度前方交会或距离前方交会计算Public Sub qfjh(xa#, ya#, xb#, yb#, a#, b#, xp$, yp$, Optional jdorjl% = 0, Optional dw% = 0)Dim a1#, b1#, c#c = Sqr(xb - xa) 2 + (yb - ya) 2) 求A,B两点之间的距离If a = 0 Or b a And c + a b And a + b c) ThenMsgBox 输入的数值有误!Exit SubEnd Ifx1 = (c 2 + b 2 - a 2) / (2 * b * c) 利用余弦公式求角度x2 = (c 2 + a 2 - b 2) / (2 * a * c) 利用余弦公式求角度a1 = Atn(-x1 / Sqr(-x1 * x1 + 1) + 2 * Atn(1) 求反余弦b1 = Atn(-x2 / Sqr(-x2 * x2 + 1) + 2 * Atn(1) 求反余弦xp = Format(xa / Tan(b1) + xb / Tan(a1) + (yb - ya) / (1 / Tan(a1) + 1 / Tan(b1), 0.000) 计算P点x坐标yp = Format(ya / Tan(b1) + yb / Tan(a1) + (xa - xb) / (1 / Tan(a1) + 1 / Tan(b1), 0.000) 计算P点y坐标End IfEnd SubForm_Load()事件将初始设置为角度交会,角度单位为度.分秒Private Sub Form_Load()opn_jdorjl(0) = 1opn_dw(0) = 1End Subopn_jdorjl_Click事件完成数值输入提示信息的相互转换Private Sub opn_jdorjl_Click(Index As Integer)If opn_jdorjl(0) ThenLabel5.Caption = 角度=Label6.Caption = 角度=ElseLabel5.Caption = 边长a=Label6.Caption = 边长b=End IfEnd SubCmd_js_Click()事件完成子过程调用及计算结果的输出Private Sub Cmd_js_Click()Dim xa#, ya#, xb#, yb#, xp$, yp$, a#, b#, jdorjl%, dw%xa = Val(txt_xa): ya = Val(txt_ya)xb = Val(txt_xb): yb = Val(txt_yb)a = Val(txt_a): b = Val(txt_b)If opn_jdorjl(0) Then 角度交会jdorjl = 0Else 距离交会jdorjl = 1End IfIf opn_dw(0) Then 角度单位为度.分秒dw = 0ElseIf opn_dw(1) Then 角度单位为度dw = 1Else 角度单位为弧度dw = 2End IfCall qfjh(xa, ya, xb, yb, a, b, xp, yp, jdorjl, dw) 调用子过程qfjh()txt_xp = xp: txt_yp = ypEnd SubCmd_tc_Click()事件退出界面Private Sub Cmd_tc_Click()Unload MeEnd Subsrdw和scdw为可选变量,省略时默认其值均为0,即输入角度的单位为度.分秒,输出角度的单位为弧度Public Function jdzh#(jd#, Optional srdw% = 0, Optional scdw% = 0)Const pi# = 3.14159265358979 定义常量piDim d%, f%, m#, fh%fh = Sgn(jd) 获取输入角度的正负号jd = Abs(jd) 取输入角度的绝对值将输入角度单位首先转换为分Select Case srdwCase 0 输入单位为度.分秒d = Int(jd) 提取度f = Int(jd - d) * 100) 提取分m = (jd - d) * 100 - f) * 100 提取秒jdzh = d + f / 60 + m / 3600 得到角度总和,单位为度Case 1 输入单位为度jdzh = jdCase Else 输入单位为弧度jdzh = jd * 180 / piEnd Select输出角度单位Select Case scdwCase 0 输出单位转换为弧度jdzh = jdzh * pi / 180 * fhCase 1 输出单位为度jdzh = jdzh * fhCase 2 输出单位为分jdzh = jdzh * 60 * fhCase 3 输出单位为秒jdzh = jdzh * 3600 * fhCase Else 输出单位为度.分秒d = Int(jdzh) 提取度f = Int(jdzh - d) * 60) 提取分m = (jdzh - d) * 60 - f) * 60 提取秒jdzh = (d + f / 100 + m / 10000) * fhEnd SelectEnd Function(4) 运行结果实验五平面多边形周长与面积计算(1) 原理在测量工作中,往往会涉及利用拐点坐标进行平面多边形周长和面积的计算问题。假如有一n边形,其拐点坐标分别为(x1,y1),(x2,y2),(xn,yn),则其周长和面积计算的公式分别为:1. 周长公式:在解算多边形周长时,显然周长即为各条边边长之和。单边边长计算式为:(i=1,2,n)其周长计算式为:2. 面积公式:利用计算公式和计算机图形绘制的知识,通过编写代码完成计算。实地某点P转换到计算机屏幕坐标系中的转换公式:测量坐标到屏幕坐标换算的比例系数为:式中,(X,Y)为点P测量坐标系中的坐标;(minX,minY)为要显示区域的最小测量坐标(左下角);(maxX,maxY)为最大测量坐标(右下角),(Xs,Ys)为P点在计算机屏幕显示区的屏幕坐标,(minXs,minYs)为屏幕显示区的最小坐标(左下角),(maxXs,maxYs)为屏幕显示区的最大坐标(右下角)。(2) 属性设置窗体、框架等控件属性设置默认控件名设置的控件名(Name)标题(Caption)From1frm_zcymjjs平面多边形周长与面积计算(彭思强)Frame1Frame1计算结果Command1Cmd_dqsj读取数据Command2Cmd_txhz图形绘制Command3Cmd_js周长与面积计算Picture1Picture1Label1Lbl_sjgs数据格式(点名,X坐标,Y坐标)Text1Txt_xx无定义CommonDialog1CDg1无定义窗体界面中各框架内控件属性设置框架默认控件名设置的控件名(Name)标题(Caption)Frame1(Caption=
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!