2018.12.30 很多人私信问我要矩阵类,推荐一个,很适合测绘的学生,基本上矩阵有了之后,程序就很好编写了: C#矩阵类 http://www.zhangjiacheng.xyz/Index.html

需求:通过A,B坐标系中提供的六个已知同名点,获得由A转换到B坐标系的七个参数。

逻辑框图:                                                            界面如下:

                                         

代码:

1.文件读取部分

//存储读入数据的数组double[,] _f1 = new double[6, 3];double[,] _f2 = new double[6, 3];/***************文件读取开始************************/private void button1_Click(object sender, EventArgs e){openFileDialog1.Filter = "文本文件(*.txt)|*.txt";//文件过滤器if (DialogResult.OK == openFileDialog1.ShowDialog())textBox1.Text = openFileDialog1.FileName;StreamReader reader = new StreamReader(openFileDialog1.FileName);for (int i = 0; i < 6; i++){string str = reader.ReadLine();string[] arr = new string[3];arr = str.Split(',');for (int j = 0; j < 3; j++){_f1[i, j] = double.Parse(arr[j]);}}}private void button2_Click(object sender, EventArgs e){openFileDialog2.Filter = "文本文件(*.txt)|*.txt";//文件过滤器if (DialogResult.OK == openFileDialog2.ShowDialog())textBox2.Text = openFileDialog2.FileName;StreamReader reader = new StreamReader(openFileDialog2.FileName);          for (int i = 0; i < 6; i++){string str = reader.ReadLine();string[] arr = new string[3];arr = str.Split(',');for (int j = 0; j < 3; j++){_f2[i, j] = double.Parse(arr[j]);}}}/***************文件读取结束************************/

2.数据导入矩阵+计算+输出

private void button3_Click(object sender, EventArgs e){/*******************数据录入对应矩阵开始**************///计算第一点的B,LMatrix sumB = GetItsB(_f1[0, 0], _f1[0, 1], _f1[0, 2]);               Matrix sumL = new Matrix(3,1, new double[3] { _f2[0, 0], _f2[0, 1], _f2[0, 2] });//计算后续点的B,L 并将之按行添加到第一点末尾   for (int i = 1; i < 6; i++){ Matrix _B = GetItsB(_f1[i, 0], _f1[i, 1], _f1[i, 2]);sumB=sumB.Addinend(_B); Matrix _L = new Matrix(3,1, new double[3] { _f2[i, 0], _f2[i, 1], _f2[i, 2] });sumL=sumL.Addinend(_L);                    }/*******************数据录入对应矩阵结束**************//*******************计算开始*****************///X阵求解,V阵求解Matrix N = new Matrix(sumB.Transpose() * sumB);N.InvertGaussJordan();Matrix X = new Matrix(N.Multiply(-1)*sumB.Transpose()*sumL);Matrix V = new Matrix(sumB * X + sumL);/*******************计算结束*****************//*******************结果输出开始*****************/            double m0 = Math.Sqrt((V.Transpose()*V).elements[0] / 11);textBox3.Text = "平移X0:" + X.elements[0] + "m" +"\r\n"+"平移Y0:" + X.elements[1] + "m   " + "\r\n" +"平移Z0:" + X.elements[2] + "m  " + "\r\n" +"尺度 K:" + Math.Pow(10, 6) * (X.elements[3] - 1) + "ppm   " + "\r\n" +"旋转 X:" + 180 * 60 * 60 * (X.elements[4] / X.elements[3]) / Math.PI + "s   " + "\r\n" +"旋转 Y:" + 180 * 60 * 60 * (X.elements[5] / X.elements[3]) / Math.PI + "s   " + "\r\n" +"旋转 Z:" + 180 * 60 * 60 * (X.elements[6] / X.elements[3]) / Math.PI + "s   " + "\r\n" +"单位权中误差m0:" + m0*Math.Pow(10,2) + "cm   ";/*******************结果输出结束*****************/}/*** 输入一个点的z,y,z输出其B矩阵*/Matrix GetItsB(double X, double Y, double Z){double[] toB = new double[21]{1,0,0,X,0,-Z,Y,0,1,0,Y,Z,0,-X,0,0,1,Z,-Y,X,0};Matrix B = new Matrix(3, 7, toB);return B.Multiply(-1);}

运行结果:

体悟与收获:

本次的程序设计逻辑相对简单。但对于编程思维掌握不是很熟练的我来说,算是一次非常合适的训练。

1.这是我第一次写程序处处用注释,也是第一次先构思好程序的大部分再开始动手写的程序。换言之,这是我第一次时刻自己明白自己要做什么的编程。

2.以及,本次调试我已经能熟练的时候断点,监测和单步运行。这使得我差错并没有花上太多时间。以及,随着不断深入编程学习,我开始能触类旁通。

3.本次完成程序总共耗时:  6h

编写读入文件:3h|一个晚上

这是最简单的,但我在这犯错最多。主要是因为:一开始时我是直接用split分隔数据。但split分隔空格使得连续空格处产生了空位“”。我试图用数组传递来解决这个问题,但后来程序运行效率低下,打开文件并读取到数组的时间延搁非常长。(约一分钟左右)于是我反复纠结我写的代码,运行效率为何如此低下,结果耗时极长。)后来稍微修改了一下读入txt,改成了txt中也以英文逗号分隔,运行效率低下问题才解决。

录入矩阵并计算并输出结果:1|早起到上课前一小时+2h|晚上

此处我花费时间主要还是因为,虽然这次我用了逻辑框架指导我的编程,但我编程的思路仍旧稍有混乱。外加必要的调试时间。以及使用他人的矩阵类,并为之新写addinend的时间,所以用了三个小时。

总之来说,本次编程我熟练不少;而且我的编程越来越熟练,这也使我振奋不已。总之,我应该继续好好学习并时刻学习编程,并继续培养良好的编程思想和习惯。

大地测量——计算七参数(编程作业)相关推荐

  1. 地图旋转_如何使用万能地图下载器计算七参数

    1. 概述 在测绘行业里,坐标转换始终是饶不开的问题,经常会遇到,而坐标转换有相同椭球之间的转换,也有不同椭球之间的转换.如果是不同的椭球体之间的转换,就需要用到七参数,七参数可以通过控制点计算得到, ...

  2. 计算七参数,原来是这么操作的,一学就会!

    1. 概述 在测绘行业里,坐标转换始终是饶不开的问题,经常会遇到,而坐标转换有相同椭球之间的转换,也有不同椭球之间的转换.如果是不同的椭球体之间的转换,就需要用到七参数,七参数可以通过控制点计算得到, ...

  3. 【转载】根据已知点通过COORD七参数计算

    感谢欧特_Glodon 原文链接:https://blog.csdn.net/m0_37251750/article/details/99941276 参考致谢:微信公众号 GIS前言 问题:同一个点 ...

  4. COORD七参数计算步骤

    传统测绘领域(包括OGC标准的GeoJSON里面,都是定义纬度在前,经度在后,原因是纬度的英文单词是latitude,简写为LAT:而经度是longitude,简写为LON--字母排序,你懂的) 1. ...

  5. 坐标转换三参数和七参数问题探讨

    前段时间,碰到一个陆海项目,我们提供的成果都是CGCS2000坐标.施工单位要求提供当地控制点,用来放样.按道理来说,我们不需要提供,因为项目是CGCS2000坐标,施工方只需要拿千寻CORS进行放样 ...

  6. 中海达ihand30手簿使用说明_如何使用RTK手簿求坐标转换参数(四参数/七参数)...

    参数计算是用于两个坐标系统之间的转换关系,GPS 接收机输出的数据是CGCS2000经纬度坐标,但是有些时候根据甲方的要求,需要转化到施工测量坐标,这个时候就需要软件进行坐标转换参数的计算和设置,而转 ...

  7. 南方h5手簿求转换参数_如何使用RTK手簿求坐标转换参数(四参数/七参数)

    参数计算是用于两个坐标系统之间的转换关系,GPS 接收机输出的数据是CGCS2000经纬度坐标,但是有些时候根据甲方的要求,需要转化到施工测量坐标,这个时候就需要软件进行坐标转换参数的计算和设置,而转 ...

  8. 西安80投影坐标系转WGS84地理坐标系如何求七参数

    需求:西安80投影坐标系(平面坐标)转为WGS84地理坐标系(球面坐标) 这其中涉及的问题主要有以下两点: 1.一个是投影坐标系,一个是地理坐标系,而七参数指的是两个地理坐标系之间的转换,因此需要把投 ...

  9. oracle七参数坐标转换,MapGIS国土空间数据2000大地坐标系转换系统

    丰富的坐标转换模型 ❈ 三维七参数坐标转换模型 通过控制点/坐标重合点计算七参数,或利用已有七参数,对全国和省级范围的大地坐标或空间直角坐标系的数据进行投影变换. ❈ 平面四参数坐标转换模型 通过控制 ...

最新文章

  1. 华人斩获最佳Demo论文,Bengio获时间检验奖,最佳论文突破NLP传统测试方法 | ACL 2020...
  2. 【分布式事务】tcc-transaction分布式TCC型事务框架搭建与实战案例(基于Dubbo/Dubbox)...
  3. Android:屏幕旋转
  4. PPT 下载 | 神策数据算法专家:推荐系统的实践与思考(下)
  5. (教学思路 c#之类一)声明类和对象、定义类成员及其引用
  6. 防火墙例外里没有远程桌面_证明没有例外
  7. vue学习—Convert HTML string to AST,如何将html字符串转换为ast数组结构
  8. [Usaco2008 Feb]Eating Together麻烦的聚餐[最长不下降子序列]
  9. Nginx学习总结(14)——Nginx配置参数详细说明与整理
  10. 第三十讲:Android之Animation(五)
  11. shell 脚本基础
  12. 什么是CGI 什么是 FastCGI 什么是 php-fpm
  13. 体育赛事直播APP源码程序平台开发解决方案
  14. 项目管理文档<模板>
  15. Phase2 Day18 SQL 约束
  16. php 检测硬盘,php测试硬盘读写速度脚本
  17. php对接工行sdk,工商银行-银企直连签约流程
  18. 计算机组装与维护补考论文,计算机组装与维护课程教学论文
  19. SQL Server 进程无法连接到 Subscriber “xxxxxx”
  20. 魅族android10内测答案,魅族Flyme9内测答案

热门文章

  1. 数组排序之后相邻数的最大差值
  2. 【Qt】模型/视图结构和数据绑定控件
  3. 计算机电脑使用基础知识!
  4. 【无标题】体验scratch海底世界
  5. RuntimeError: Couldn‘t resolve requests
  6. 福建最新初级消防设施操作员考试真题及答案
  7. 开发media play,realplayer,暴风影音 等主流播放器视频特效插件
  8. android TextView 中划线、下划线 跑马灯
  9. 二分法查找(dichotomy)--python实现
  10. 皮卡智能联手全球最大贸易服务商PingPong,共推AIGC应用落地服务