欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    中南大学测绘程序课程设计报告含代码界面设计数据格式.docx

    • 资源ID:17995079       资源大小:213.81KB        全文页数:68页
    • 资源格式: DOCX        下载积分:1金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要1金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    中南大学测绘程序课程设计报告含代码界面设计数据格式.docx

    1、中南大学测绘程序课程设计报告含代码界面设计数据格式 中南大学测绘程序课程设计报告 姓名:XXXXX 学号:XXXXXX 指导老师:XXX 专业班级:XXXX1系统设计1、 实现功能1.1优化设计:根据控制网的观测精度与网形,全面评定网的精度 1.2数据输入:使用外部数据倒入,通过读取.txt格式观测文件实现数据输入 1.3平差计算:对观测数据进行精密平差计算,得到平差后的点位坐标,方向观测值,边长观测值等,精度评定,并弹出文本框输出成果。 1.4画图:控制网图形输出,绘制误差椭圆,以及平差结果导出到txt文件中。2、系统总体框架 导线网平差系统退出数据输入 画图平差计算并输出成果*:界面设计2

    2、.1数据输入2.1.1文件格式:2 (已知点数据个数)1,31250.2500,11500.4100 (已知点数据) 2,33256.5700,10900.8400 3 (未知点数据个数)3,4,(未知点数据)5,8 (距离观测数据个数)1,3,2300.06001,4,3090.35302,5,3643.23402,3,2115.9190(距离观测数据)2,4,4363.61103,5,2169.07303,4,2620.90904,5,3922.860018(方向观测数据个数)1,2,01,3,57.2032101,4,113.1406352,5,02,3,32.1222922,4,57.

    3、5015302,1,98.2612733,1,03,2,56.2537793,5,172.533944 (方向观测数据)3,4,282.2953834,1,04,2,26.0954124,3,46.3617984,5,77.5946715,4,05,3,39.0017795,2,70.1951512.1.2数据输入实现:(1)创建角度类#pragma once/枚举数据类型,用于代表角度形式enum AngleStyle DEG, DMS, RAD;class CAnglepublic: CAngle(double value=0,AngleStyle style=DMS); CAngle(v

    4、oid);private: double dValue;/角度值 AngleStyle nCurStyle;/当前角度值类型private: /设置常成员函数的作用:.类成员不会被改变 /2.可以被常类变量调用 double Deg(double dDms) const; double Dms(double dDeg) const; public: /获取指定的类型获取角度值, /由于返回的是dValue的引用,所以该值大小可以改变,即可以进行赋值 double& operator() (AngleStyle style); /重载,获取指定的类型获取角度值,该值不可改变,const CAng

    5、le类型变量调用 double operator() (AngleStyle style) const; /重载运算符+/- friend CAngle operator + (const CAngle& m1,const CAngle& m2); friend CAngle operator - (const CAngle& m1,const CAngle& m2);(2)创建点类用于存取点的信息,如坐标、点号、椭圆函数#pragma onceclass CControlPoint/控制点public: CControlPoint(); CControlPoint(); double X;

    6、double Y; CString strPointID;/点号 int state; int flg;/判断测站点是否相同用 double dE; double dF; double dQ; /椭圆函数 double dMx; double dMy; double dMk;/矩阵计算;(3)创建距离类用于存取距离观测信息,如测站方向点、观测方向点、距离观测值#pragma once#include ControlPoint.h#include Angle.hclass CDistObs/距离观测值public: CDistObs(); CDistObs();public: CControlP

    7、oint *cpStart,*cpEnd;/测站与照准点 double dDist;/距离观测值;(4)创建方向类用于存取方向观测信息,如测站方向点、照准方向点、方向观测值#pragma once#include ControlPoint.h#include Angle.hclass CAngleObs/方向观测值public: CAngleObs(); CAngleObs();public: CControlPoint *cpStation;/起始点 CControlPoint *cpEnd;/照准点 CAngle ObsAngle;/方向观测值;(4)读取文件函数:bool LoadObs

    8、Data(const CString &strFileName,CString &screen);,此函数功能为通过传入的文件名strFileName进行文件读写,并将信息存到相应成员数据中。2.2近似坐标推算2.2.1近似坐标计算原理按方向和边长观测值计算导线网中待定点的近似坐标d2.2.2具体实现(1)坐标概算函数:void CoordinateEstimates();,函数设计思路 :设计一个循环如果没有读取数据则返回。然后通过创建一个bool类型的函数lsCoordinateEstimate来判断有没有计算过坐标的近似值,防止其陷入死循环。然后开始用迭代:首先判断测站点是否已知点,然后

    9、再判断测站点相同的情况下找到照准点近似坐标未算出的照准点(有方向观测值,这样才可以通过极坐标法计算出近似值),然后根据近似坐标计算原理计算方向观测j(条件循环的时候定义两个参数i ,j)的观测方向近似坐标,需要注意的是,在近似坐标推算中,循环计算一次之后,必须判断是否所有未知点的近似坐标已经推算出来,没有的话再进行循环计算。(这样做主要是为了防止在节点控制网中,当未知点很多时,可能推算到一个点之后,它所连得所有控制点均为坐标未知点,这样在一次循环中就会跳过这个控制点,这个点的近似坐标就没有计算出来。而在下一次循环中,它所连得控制点中就会有坐标已知点,这样这个点的近似坐标就计算出来了)。(2)计

    10、算流程图:坐标输入系统int i=0 to m_pAngleObsCount i=i+1 m_pAngleObs中第i个的测站点和观测方向点是否已知 否 j=j+1 是m_pAngleObs中第j个的测站点和m_pAngleObs中第i个测站点相同,观测方向点未知 否计算m_pAngleObs中第i个的观测方向点近似坐标 是 近似坐标推算计算完毕所有未知点的近似坐标是否已经推算出来 再次从i=0循环 否 是 2.3平差计算 2.3.1平差计算原理设:观测值为L,其权为P,相应的改正数为V,必要观测值个数为t,选定未知数X,则有误差方程根据最小二乘原理: ,求极值, ,得:法方程:法方程的解:

    11、单位权中误差:2.3.2间接平差流程 (1)列出误差方程及条件式 (2)定权 (3)组成法方程 (4)解算法方程,求得dX=dx1 dy1 dx2 dy2 (5)平差后的坐标值计算X=X+dX。 (6)精度评定,计算误差椭圆参数等2.3.3误差方程的列立 以未知点坐标为平差对象,一个观测值对应一个误差方程式,误差方程式包括两类:方向观测误差方程式和边长观测误差方程式 (1)方向观测误差方程式 一般形式: 其中:一般取测站起始方向(零方向)的近似坐标方位角作为定向角近似值 当测站点i为已知点时:当照准点j为已知点时:当侧站点和照准点都为已知点时: (2)边长观测误差方程式 为近似坐标计算而得,

    12、为实测边长当测站点i为已知点时:当照准点j为已知点时:2.3.4 定权(1)方向观测值的权 在等精度方向观测的控制网中,一般把方向观测值的权定为1(2)边长观测值的权其中Ms由对话框输入2.3.5平差后的坐标值计算 求得平差后的坐标值X=X+dX。因为只有dx很小时误差方程式、条件方程式才是严密的,因此当dX的值较大时应把X=X_+dX作为新的近似值重复上述步骤,直到dx中绝对值最大的一个小于给定的0.1mm(注意:这里只是指坐标改正值,不包括定向改正值,所以在求dx中绝对值最大值时,应除去定向改正值,否则会无限迭代计算,因为定向改正值很大,而且迭代计算时不会进行改正)。2.3.6精度评定(1

    13、)中误差计算: ,n为观测值个数,t为未知数个数(2)待定点点位误差:(3)误差椭圆元素计算:长半径方位角长半径、短半径2.3.7平差计算流程图近似坐标推算: 近似坐标CalculateErrorEquations函数 矩阵B、L、P建立矩阵类Matrix对象,进行调用平差计算,将坐标改正数加到坐标上,并判断循环是否达到要求 矩阵运算单位权中误差计算 是 否 求得坐标作为近似坐标 精度评定误差椭圆参数计算点位中误差计算2.3.8具体实现(1)void ComAngleObsEff(CAngleObs AngleObs,double& Fi,double& Ci,double& Di,doubl

    14、e& Ck,double& Dk);,此函数功能为计算出AngleObs的系数Fi、Ci、Di、Ck;(2)void ComDistObsEff(CDistObs DistObs, double& Fi,double& Ci,double& Di,double& Ck, double& Dk);,此函数功能为计算出DistObs的系数Fi、Ci、Di、Ck;(3)void FormErrorEquations(CMatrix& B,CMatrix& f),此函数功能为组建法方程系数矩阵B,常数项矩阵f;void FixedWeight(CMatrix &p),此函数功能为计算权矩阵p;(4)

    15、void FormErrorEquations(CMatrix& B,CMatrix& f),此函数功能为平差计算、点位精度计算.2.成果输出(1)平差结果的输出,主要是输出方向观测成果表、距离观测成果表、精度评定以及控制点成果表这四方面内容,对于这部分的输出比较容易实现,只要建立Cstring对象,调用库函数.format()来定义输出格式,来进行格式化输出,就很容易实现。在对话框对应的计算按钮添加代码部分获得文件名strFileName,调用void CalculateErrorEquations(const CString &strFileName)。(2)图形绘制,对话框添加画图控件,

    16、在对话框对应的画图按钮添加代码获得picture控件的CDC和大小,调用控制网ControlNetAdjust中成员函数void ErrorEllipseDraw(CDC* pDC,CRect& rect)进行绘图。2程序设计计划与进度表编号:完成内容:日期:1进行程序设计与安排进度表7.17.22设定数据格式与实现读取数据功能7.33近似坐标的推算7.4-7.54平差计算并进行成果输出7.67.85控制网网形、误差椭圆的绘制7.86代码修改、程序整改、修饰工作、调试7.8-7.97实验报告的编写7.103设计心得3.1程序设计过程中遇到问题及解决方法3.1.1 系统的设计:需要实现什么功能,

    17、怎么实现。通过一步步地剖析实验指导书里面的流程图,然后列出需求分析,最后得出初步设计思路。3.1.2 数据文件的读取:老师给的指导书里面的数据是分开的,我们要做的不仅是读数据重点是怎么读。通过参考了第8个实验读取数据的格式,对比指导书的数据,设计出来了自己的数据格式。3.1.3坐标概算时: 坐标概算有三种方法,根据指导书和老师的讲解,我们取用的第三种极坐标算法。参考书里的代码。编写后会发现书里面定义的很多变量跟自己不一致,需要更改,并且书里面概算的过程中调用的一些函数(比如方位角Azi()计算和SearchDist())需要自己编写。需要注意的是编写的这两个函数的形参要与概算函数里面创建的参数

    18、类型要一致,这需要好好注意。3.1.4组成法方程,计算B,F矩阵:同样参考书里面代码,因为书里面定义前后不一样,所以不能直接搬用。所以需要理解B矩阵是怎么构成的。通过查看书本和指导书得出B矩阵行为观测值(方向与角度)个数,列为未知点参数(X,Y)与测站点个数构成,同样理解F矩阵。而且,书本里面定向方位角近似的函数也要自己编写。 3.1.5组成法方程时,常数项矩阵f数值过大,分别在函数ComAngleObsEff(ClzAngleObs AngleObs , double& Fi, double& Ci, double& Di, double& Ck, double& Dk)和ComDistOb

    19、sEff(ClzDistObs DistObs, double& Fi, double& Ci, double& Di, double& Ck, double& Dk)中设置断点,经手算各方向观测系数和距离观测系数后与监视值对比发现两个问题,第一个是在求解测站零方向的近似方位角时,随着测站的变化,零方向的近似方位角没有作对应变化;第二个问题是方向观测的常数Fi由于角度类对象和double转换不统一出现问题。经过改正后通过,与手算误差符合。3.1.6平差计算时,由于是参考第8个实验计算输出的代码,这一次输出的成果要比上一次多所以在对比和计划的时候弄了不断时间,主要是输出f的时候一定要注意单位,要

    20、回去检查f矩阵的计算和单位的换算,设置断点逐语句地查看监视结果。3.2程序设计感想 这一次的课程设计跟以往做的八个实验都不一样,它可以说八个实验的集合并且要超过以往八个实验的总和。一开始做的时候感觉无从下手,因为这个程序需要实现读取数据,计算,绘图,输出。而计算里面也分为概算,组成法方程,平差。 首先是数据读取,一开始拿到课程设计指导书看到数据的时候脑子浮现的是:这是什么?因为指导书里面的数据是分开的,不像做好了格式很清晰明了地排列在一个文档中。看数据的时候我需要搞懂这是什么数据,怎么测量的,然后再设计数据的排列方式再设计出如何读取数据。在这个过程中,我更深入地掌握了读取文件的方式和方法与格式

    21、,以前一些不懂的地方也通过多次调试弄得清楚明白。 继而开始编写概算的代码。在老师讲解中,我们需要采用的是极坐标法,这个方法要比前两种要简单,适用性更强。看了指导书和书本之后,我决定采用书里面概算的代码。书里面的代码是采用循环迭代来计算,有一些书里定义的函数需要自己弄清楚参数和函数类型,然后再自己编写这个函数的功能的。所以需求仔细看书代码的意思然后才能编写出某个需自定义的函数。通过编写了概算的函数,我更深入地掌握了迭代循环的用法和理解了极坐标法计算近似坐标的方法。 然后编写平差计算的代码。首先是组成误差方程,那么就需要B和l矩阵,同样的我也是参考书里面的代码。一开始看不懂书里面的变量,因为书里变

    22、量定义没有说明并且跟自身定义的差别太大。需要我一行行甚至是手写和请教老师和同学才知道究竟表达的是什么。由于有编写概算的经验,这一次编写比较顺利。然后开始编写定权和误差计算的代码了,我参考了第八个实验的代码。输出和计算出平差的成果。在调试的时候出现多次错误有很多是循环提前了或则没有设置循环所以在计算的时候就会中断而不能继续,通过设置了很多个断点逐语句进行监视看每个变量的值,再对比指导书里面的成果。成功调试后发现了X和Y的后面的成果小数点后2位跟指导书成果有一点点误差,经过检查还是无法改正出指导书一样的结果。 最后一步是绘图,绘图的代码不是全部自己编写的,但是我将绘图代码的一些重点语句看懂了,比如

    23、那个是定义画笔,颜色,比例等等。 在编写了程序并成功运行并输出后,其实有很多地方还是甚不了解的。我反反复复地看自己的程序代码,一句一句地看这代码是怎样实现的,为什么这样做。加深了一点了解。但是在答辩的时候,我发现了我对B矩阵和x改正数矩阵并不完全了解,它们之间的联系并没有让我深入发掘出来。答辩之后我深思了一下,再查看了一下程序,顿时之前查看代码的一部分部分慢慢结合成了一块。让我发现了原来答辩不仅仅是单单的检验自己的程序和自己是否自己编写的,更是一个让自身更加深入地,全面地回顾自己这两个星期以来的点点滴滴,将他们结合起来机会。 在这一次课程设计中,我受益匪浅。它将之前八个C+实验有机地统合在了一

    24、起并且升华。在比以往都庞大的一个程序调试的过程中未免会出现很多的错误,有时候甚至高达几百个。以前我一个一个个找错误找到自己认为容易改的开始改起,如今我懂得了错误要从第一个改起,因为有时候下面很多错误也许就是因为最上面一个少加了,或者;而引起的。不仅如此,以前一些不从下手需要请教老师的错误现在见识多了,比较容易就知道了出现这种错误一般是哪里打错了或则哪里少了声明等等。以往还不很会设置断点和理解断点的作用,现在懂得了再调试后可以通过断点一步步对比参数更加容易地发现到底是哪里出现了问题并加以改正。感谢这一次机会,让我学到了这么东西,我会继续努力更加认真地学习下去!4代码(1)ControlPoint

    25、头文件#pragma onceclass CControlPoint/控制点public: CControlPoint(); CControlPoint(); double X; double Y; CString strPointID;/点号 int state; int flg;/判断测站点是否相同用 double dE; double dF; double dQ; /椭圆函数 double dMx; double dMy; double dMk;/矩阵计算;ControlPoint源文件#include StdAfx.h#include ControlPoint.hCControlPoi

    26、nt:CControlPoint()/初始化 X=0; Y=0; strPointID = _T(); flg=0; state=0; dE=0; dF=0; dQ=0; dMx=0; dMy=0; dMk=0;CControlPoint:CControlPoint() (2) DistObs头文件#pragma once#include ControlPoint.h#include Angle.hclass CDistObs/距离观测值public: CDistObs(); CDistObs();public: CControlPoint *cpStart,*cpEnd;/测站与照准点 do

    27、uble dDist;/距离观测值;DistObs源文件#include StdAfx.h#include DistObs.hCDistObs:CDistObs(void) dDist=0; cpStart=NULL; cpEnd=NULL;CDistObs:CDistObs(void) cpStart=NULL; cpEnd=NULL; (3) AngleObs头文件#pragma once#include ControlPoint.h#include Angle.hclass CAngleObs/方向观测值public: CAngleObs(); CAngleObs();public: C

    28、ControlPoint *cpStation;/起始点 CControlPoint *cpEnd;/照准点 CAngle ObsAngle;/方向观测值;AngleObs源文件#include StdAfx.h#include AngleObs.hCAngleObs:CAngleObs(void) cpStation=NULL; cpEnd = NULL; ObsAngle = 0;CAngleObs:CAngleObs(void)(4)ControlNetAdjust头文件#pragma once#include ControlPoint.h#include AngleObs.h#incl

    29、ude DistObs.h#include Matrix.h#include Angle.hconst double Anglesigma=5;const double Distsigma = 0.5;class CControlNetAdjustpublic: CControlNetAdjust(); CControlNetAdjust();private: CControlPoint *m_pUnknowPoint; int m_iUnknowPointCount; CControlPoint *m_pKnowPoint; int m_iKnowPointCount; CAngleObs *m_pAngleObs; int m_iAngleObsCount; CDistObs *m_pDistObs; int m_iDistObsCount; public: int m_iStationCount; bool LoadObsData(const CString &strFileName,CString &screen); void CoordinateEstimates(); void SetSta


    注意事项

    本文(中南大学测绘程序课程设计报告含代码界面设计数据格式.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开