导线网平差.doc_第1页
导线网平差.doc_第2页
导线网平差.doc_第3页
导线网平差.doc_第4页
导线网平差.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

导线网平差.txt老子忽悠孩子叫教育,孩子忽悠老子叫欺骗,互相忽悠叫代沟。男人这花花世界,我要用什么颜色来吸引你。* 本程序用于单一附(闭)合导线严密平差计算,采用按角度条件平差法。以方向观测值中误差的先验值作为单位权中误差。计算结果可求得各待定点的坐标平差值及其点位精度Mx,My,及M,并计算出各待定点误差椭圆元素E,F,Z参考文献: 郭久训控制网平差程序设计北京:原子能出版社,20048平差数据来源:潘正风等数字测图原理与方法武汉大学出版社186页表6-5等级:所用平差数据为首级图根导线数据(精度很不高)。本程序中写出了方位角和导线全长相对闭合差的判别,但考虑到程序的通用性,将这些限差判断当作了注释处理,而不实际运行。程序不足:没有导线网的图形表达。*Private i%, j%, n%, tc#, tb#, B_x!, B_y!, e1!, e2!, m!, m0#, z#, aa As Boolean, bb As Boolean, cc As Boolean ,dd As BooleanPrivate Naa#(2, 2), Naa逆#(2, 2), W#(2), K#(2), qq#(2), fx#(2), fy#(2)Private A#(), Q#(), V#(), C#(), mx#(), my#(), mk#(), e#(), f#(), zz#()Private Po() As Point文件格式说明:文件格式详见文件平差数据.txtPrivate Sub 打开文件_Click() 打开文件 Dim ff$, temp$, A_name$, A_x!, A_y!, A_l#, A_s!, B_name$, B_l#, C_name$, C_x!, C_y!, D_name$, D_x!, D_y! Form1.Cls 清屏 CommonDialog1.DialogTitle = 打开数据文件 CommonDialog1.FileName = CommonDialog1.ShowOpen 出错处理 On Error GoTo FileErr ff = CommonDialog1.FileName ff是文件路径名 Open ff For Input As #1 以顺序文件方式打开文件,使用input Line Input #1, temp 读取文件中的说明语句 Line Input #1, temp 读取文件中的说明语句 Line Input #1, temp 读取文件中的说明语句 Input #1, n 读取n,n为 (测站数-1) ReDim Po(n) As Point 定义Po(n),其中Po(0)存A点数据,Po(n)存B点数据,Po(1)到Po(n-1)存n-1个未知点数据。 Line Input #1, temp 读取文件中的说明语句 Line Input #1, temp 读取文件中的说明语句 Input #1, m, e1, e2 读取先验方向观测值中误差m,测距仪固定误差e1,比例误差e2 Line Input #1, temp 读取文件中的说明语句 Line Input #1, temp 读取文件中的说明语句 Input #1, C_name, C_x, C_y 读取已知点C Input #1, A_name, A_x, A_y, A_l, A_s 读取已知点A For i = 1 To n - 1 读取n-1个未知点 Input #1, Po(i).name, Po(i).l, Po(i).s Next i Input #1, B_name, B_x, B_y, B_l 读取已知点B Input #1, D_name, D_x, D_y 读取已知点D Close #1 tc = ZBiaoFSuan(C_x, C_y, A_x, A_y) 坐标反算,求点C到A的坐标方位角,并记作tc,单位是度 tb = ZBiaoFSuan(B_x, B_y, D_x, D_y) 坐标反算,求点B到D的坐标方位角,并记作tb,单位是度 Po(0).name = A_name: Po(0).x = A_x: Po(0).y = A_y: Po(0).l = A_l: Po(0).s = A_s Po(0)存A点数据 Po(n).name = B_name: Po(n).x = B_x: Po(n).y = B_y: Po(n).l = B_l Po(n)存B点数据 For i = 0 To n Po(i).l = deg(Po(i).l) 将观测方向左角的单位度分秒化作度 Next i ReDim Q#(2 * n), A#(2, 2 * n), V#(2 * n), C#(1, 2 * n - 2), mx#(n - 1), my#(n - 1), _ mk#(n - 1), e#(n - 1), f#(n - 1), zz#(n - 1) 变量重新定义 bb = True MsgBox 文件已成功打开, , 提示 显示平差数据 ff Exit SubFileErr: MsgBox 您的文件未打开或打开的文件格式有误!注意:请重新运行本程序!, , 提示End SubPrivate Sub 开始计算_Click() If bb = True Then 推算方位角和坐标 求近似坐标 求条件式 If dd = True Then 若平差数据没有超限,则进行下面的计算 组法方程式 求逆求K 求改正数和平差值 推算方位角和坐标 求平差后坐标 精度评定 Else MsgBox 限差超限!, , 提示 Exit Sub End If Else MsgBox 数据文件未打开!, , 提示 Exit Sub End If aa = True MsgBox 计算完毕!, , 提示 显示平差结果End SubPrivate Sub 保存_Click() Dim ff$ If aa = True Then CommonDialog1.DialogTitle = 保存平差结果 CommonDialog1.Filter = (*.txt)|*.txt CommonDialog1.FileName = 平差结果.txt CommonDialog1.ShowSave ff = CommonDialog1.FileName If ff = Then MsgBox 文件名不能为空, , 警告 Exit Sub End If Open ff For Output As #2 以顺序文件方式保存文件,使用output Print #2, 平差结果: Print #2, - Print #2, 单位权中误差 m0= & Format(m0, #.#) & 秒 Print #2, - Print #2, 点名, x(m), y(m), 点位误差(cm), E(cm), F(cm), Z(度分秒) For i = 1 To n - 1 Print #2, & Po(i).name, Format(Po(i).x, #.#), Format(Po(i).y, #.#), & Format(mk(i), #.#), _ & Format(e(i), #.#), & Format(f(i), #.#), & Format(zz(i), #.#) Next i Print #2, - Close #2 cc = True MsgBox 保存完毕!, , 提示 Else MsgBox 没有需要保存平差结果!, , 提示 Exit Sub End IfEnd SubPrivate Sub 退出_Click() If aa = True And cc = False Then 提示.Show 若平差结果未保存则进行提示 Else End 若没有平差结果或平差结果已保存则退出 End IfEnd SubPrivate Sub 推算方位角和坐标() Po(0).t = tc + Po(0).l - 180 If Po(0).t 360 Then Po(0).t = Po(0).t - 360 If Po(0).t 360 Then Po(i).t = Po(i).t - 360 If Po(i).t 40 * Sqr(n + 1) Or Sqr(W(1) / 100) 2 + (W(2) / 100) 2) / sums 0.00025 Then 方位角闭合差和导线全长相对闭合差 Exit Sub End If dd = TrueEnd SubPrivate Sub 组法方程式() Dim g% For i = 0 To 2 For j = i To 2 由于Naa是对称的,只求其上三角即可。 For g = 0 To 2 * n Naa(i, j) = Naa(i, j) + A(i, g) * A(j, g) * Q(g) Next g Next j Next iEnd Sub对于3*3的矩阵来说,利用公式Naa逆=Naa*/|Naa| 去求Naa的逆即可,其中Naa*是伴随矩阵。Private Sub 求逆求K() Dim ee#, ii#, jj#, kk#, det# det是|Naa|的值 ee = 1 For i = 0 To 2 ee = ee * Naa(i, i) Next i ee = ee + 2 * Naa(0, 1) * Naa(1, 2) * Naa(0, 2) ii = Naa(0, 1) 2 jj = Naa(0, 2) 2 kk = Naa(1, 2) 2 det = ee - (ii * Naa(2, 2) + jj * Naa(1, 1) + kk * Naa(0, 0) 求伴随矩阵Naa*,用Naa逆存储 Naa逆(0, 0) = Naa(1, 1) * Naa(2, 2) - kk Naa逆(0, 1) = Naa(0, 2) * Naa(1, 2) - Naa(0, 1) * Naa(2, 2) Naa逆(1, 0) = Naa逆(0, 1) Naa逆(1, 1) = Naa(0, 0) * Naa(2, 2) - jj Naa逆(0, 2) = Naa(0, 1) * Naa(1, 2) - Naa(0, 2) * Naa(1, 1) Naa逆(2, 0) = Naa逆(0, 2) Naa逆(2, 2) = Naa(0, 0) * Naa(1, 1) - ii Naa逆(1, 2) = Naa(0, 2) * Naa(0, 1) - Naa(0, 0) * Naa(1, 2) Naa逆(2, 1) = Naa逆(1, 2) 求Naa逆 For i = 0 To 2 For j = 0 To 2 Naa逆(i, j) = Naa逆(i, j) / det Next j Next i 求K For i = 0 To 2 For j = 0 To 2 K(i) = K(i) - Naa逆(i, j) * W(j) Next j Next iEnd SubPrivate Sub 求改正数和平差值() Dim pvv# pvv = 0 For i = 0 To 2 * n For j = 0 To 2 V(i) = V(i) + K(j) * A(j, i) * Q(i) 求改正数V Next j pvv = pvv + V(i) * V(i) / Q(i) 求 pvv Next i m0 = Sqr(pvv / 3) 求单位权中误差 m0 For i = 0 To n - 1 Po(i).s = Po(i).s + V(i) / 100 求导线边长的平差值,其中边长改正数的单位是厘米,边长的单位是米 Next i For i = 0 To n Po(i).l = Po(i).l + V(n + i) / 3600 求导线左角的平差值,其中角度改正数的单位是秒,角度的单位是度 Next iEnd Sub列出待定点坐标的权函数式,据此进行精度评定。Private Sub 精度评定() Dim uu#, vv#, ww#, ss#, r#, kk! For j = 1 To n - 1 uu = 0: vv = 0: ww = 0 For i = 0 To j - 1 C(0, i) = Cos(Po(i).t / p0) C(1, i) = Sin(Po(i).t / p0) C(0, n + i) = (Po(i).y - Po(j).y) / 2062.65 C(1, n + i) = (Po(j).x - Po(i).x) / 2062.65 uu = uu + C(0, i) 2 * Q(i) + C(0, n + i) 2 * Q(n + i) vv = vv + C(1, i) 2 * Q(i) + C(1, n + i) 2 * Q(n + i) ww = ww + C(0, i) * C(1, i) * Q(i) + C(0, n + i) * C(1, n + i) * Q(n + i) Next i For kk = 0 To 2 ss = 0: r = 0 For i = 0 To j - 1 ss = ss + A(kk, i) * C(0, i) * Q(i) + A(kk, n + i) * C(0, n + i) * Q(n + i) r = r + A(kk, i) * C(1, i) * Q(i) + A(kk, i + n) * C(1, n + i) * Q(n + i) Next i fx(kk) = ss: fy(kk) = r Next kk For kk = 0 To 2 ss = 0: r = 0 For i = 0 To 2 ss = ss - Naa逆(kk, i) * fx(i) r = r - Naa逆(kk, i) * fy(i) Next i K(kk) = ss: qq(kk) = r Next kk For i = 0 To 2 uu = uu + fx(i) * K(i) vv = vv + fy(i) * qq(i) ww = ww + fx(i) * qq(i) Next i mx(j) = m0 * Sqr(Abs(uu) my(j) = m0 * Sqr(Abs(vv) mk(j) = Sqr(mx(j) 2 + (my(j) 2) 每个点的点位中误差,单位cm r = uu + vv ss = Sqr(uu - vv) 2 + 4 * ww 2) e(j) = m0 * Sqr(r + ss) / 2) 点位误差椭圆元素E,单位cm f(j) = m0 * Sqr(Abs(r - ss) / 2) 点位误差椭圆元素F,单位cm z = Atn(2 * ww / (uu - vv) z = z / 2 * p0 If z 0 Then z = z + 90 If ww 0 Then z = z + 180 zz(j

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论