


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中南大学测绘程序课程设计报告姓名:XXXXX 学号:XXXXXX 指导老师:XXX 专业班级:XXXX1系统设计1、实现功能1.1优化设计:根据控制网的观测精度与网形,全面评定网的精度1.2数据输入:使用外部数据倒入,通过读取.txt格式观测文件实现数据输入1.3平差计算:对观测数据进行精密平差计算,得到平差后的点位坐标,方向 观测值,边长观测值等,精度评定,并弹出文本框输出成果。1.4画图:控制网图形输出,绘制误差椭圆,以及平差结果导出到 txt文 件中。2、系统总体框架导线网平差系统数据输入:界面设计2.1数据输入文件格式:2 (已知点数据个数)1,31250.2500,11500.410
2、0(已知点数据)2,33256.5700,10900.84003 (未知点数据个数)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.5015302,1,98.2612733,1,03,2,56.2537793,5,172.533944
3、(方向观测数据)3,4,282.2953834,1,04,2,26.0954124,3,46.3617984,5,77.5946715,4,05,3,39.0017795,2,70.195151数据输入实现:(1) 创建角度类#pragma once/枚举数据类型,用于代表角度形式enumAngleStyleDEG,DMS,RAD;class CAnglepublic :CAngle( double value=0,AngleStyle style=DMS);CAngle( void );private :double dValue; / 角度值AngleStyle nCurStyle; /
4、当前角度值类型private :/设置常成员函数的作用:.类成员不会被改变2.可以被常类变量调用double Deg( double dDms) const ;double Dms(double dDeg) const ;public :/获取指定的类型获取角度值,/由于返回的是dValue的引用,所以该值大小可以改变,即可以进行赋值double & operator () (AngleStyle style);/重载,获取指定的类型获取角度值,该值不可改变,const CAngle类型变量调用double operator () (AngleStyle style)const ;/重
5、载运算符+/-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;double Y;CString strPointID; 点号int st
6、ate;int flg; /判断测站点是否相同用double dE;double dF;double dQ; /椭圆函数double dMx;double dMy;double dMk; /矩阵计算;(3) 创建距离类用于存取距离观测信息,如测站方向点、观测方向点、距离观 测值#pragma once#include "ControlPoint.h"#include "Angle.h"class CDistObs /距离观测值public :CDistObs();CDistObs();public :CControlPoint *cpStart,*cpE
7、nd;/ 测站与照准点double dDist; /距离观测值;(4) 创建方向类用于存取方向观测信息,如测站方向点、照准方向点、方向观 测值#pragma once#include "ControlPoint.h"#include "Angle.h" class CAngleObs/ 方向观测值public :CAngleObs();CAngleObs();public :CControlPoint *cpStation; / 起始点CControlPoint *cpEnd; 照准点CAngle ObsAngle; / 方向观测值;(4)读取文件函数:
8、bool LoadObsData(const CString &strFileName,CString &screen);,此函数功能为通过传入的文件名 strFileName进行文件读写,并将 信息存到相应成员数据中。2.2近似坐标推算近似坐标计算原理 按方向和边长观测值计算导线网中待定点的近似坐标十y ya d sint 二 yaA)d sin© A)具体实现(1)坐标概算函数:void CoordinateEstimates();,函数设计思路:设计一个循环 如果没有读取数据则返回。然后通过创建一个bool类型的函数 lsCoordi nateEstimate来
9、判断有没有计算过坐标的近似值,防止其陷入死循环。然后开始用迭代:首先判断测站点是否已知点,然后再判断测站点相同的情况下 找到照准点近似坐标未算出的照准点(有方向观测值,这样才可以通过极坐标法 计算出近似值),然后 根据近似坐标计算原理计算方向观测j (条件循环的时候 定义两个参数i ,j )的观测方向近似坐标,需要注意的是,在近似坐标推算中, 循环计算一次之后,必须判断是否所有未知点的近似坐标已经推算出来,没有的话再进行循环计算。(这样做主要是为了防止在节点控制网中,当未知点很多时,可能推算到一个点之后,它所连得所有控制点均为坐标未知点, 这样在一次循环 中就会跳过这个控制点,这个点的近似坐标
10、就没有计算出来。而在下一次循环中, 它所连得控制点中就会有坐标已知点,这样这个点的近似坐标就计算出来了) 。(2) 计算流程图:计算 m_pAngleObs中第i个的观测方向点近似坐标再次从i=0循环 否所有未知点的近似坐标是否 已经推算出来近似坐标推算计 算完毕2.3平差计算平差计算原理设:观测值为L,其权为P,相应的改正数为V,必要观测值个数为t,选定未 知数X,则有误差方程V = BX根据最小二乘原理:V T PVBX Lmin,求极值,BTPV = 0,BTP(BX + L)= 0, BTPBX + BtPL= 0,得:法方程:BtPBX btpl 二 0法方程的解:X = -(btp
11、b)°btpl单位权中误差:VTPV /(n - t)间接平差流程(1) 列出误差方程及条件式(2) 定权(3) 组成法方程(4) 解算法方程,求得 dX=dx1 dy1 dx2 dy2(5) 平差后的坐标值计算X=X+dX(6) 精度评定,计算误差椭圆参数等误差方程的列立以未知点坐标为平差对象,一个观测值对应一个误差方程式,误差方程式包括两类:方向观测误差方程式和边长观测误差方程式(1)方向观测误差方程式般形式:Vj Zi + az + jY - ai*Xj - jYj + lj 其中:'' 0 ''p sinTjjp coshaj 二D0, bij
12、 'Dij般取测站起始方向(零方向)" 0ijDj的近似坐标方位角作为定向角近似值lj Zi0+Tj0- Lj-乙0Tj0当测站点 当照准点Yj0 二 arctg.oi为已知点时: j为已知点时:- Y0Xi0V厂Vj =当侧站点和照准点都为已知点时:(2)边长观测误差方程式乙-a/Xj - jYj + lj r乙 + afXi + jY + ljV = - Z li-ijiijVj-cost, Xj -二 Sj0 -sin TY + cosTXj + si nTYj + lijI 1 jS0当测站点i为已知点时:Vij 当照准点j为已知点时:、/Vj为近似坐标计算而得,Si
13、j为实测边长=cosTXj + sinT賞Yj 十 hj -cosTjXj - sinTjY + hj234定权(1)方向观测值的权在等精度方向观测的控制网中,一般把方向观测值的权定为1(2)边长观测值的权Ps其中Ms由对话框输入235平差后的坐标值计算求得平差后的坐标值X=X+dX。因为只有dx很小时误差方程式、条件方程 式才是严密的,因此当dX的值较大时应把X=X_+dX作为新的近似值重复上述 步骤,直到dx中绝对值最大的一个小于给定的 0.1mm (注意:这里只是指坐标 改正值,不包括定向改正值,所以在求 dx中绝对值最大值时,应除去定向改正 值,否则会无限迭代计算,因为定向改正值很大,
14、而且迭代计算时不会进行改正) 精度评定T(1)中误差计算:0=±jV PV ,n为观测值个数,t为未知数个数n -t(2)待定点点位误差:mx =: m。. Qxx,my =: m°. Qyymk = 土m。+ m:(3) 误差椭圆元素计算: 2Q长半径方位角q J arctg旦2Qxx - Qyy长半径、短半径m0;Qxx QxytgQ,E 二 m。Qxx Qxytg(Q 90。)238具体实现(1 ) void ComAngleObsEf(CAngleObs AngleObs, double & Fi, double & Ci, double &
15、 Di, double & 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),此函数功
16、能为组建法 方程系数矩阵B,常数项矩阵f ; void FixedWeight(CMatrix &p),此函数功能为 计算权矩阵p;(4) void FormErrorEquations(CMatrix&B,CMatrix& f),此函数功能为平差计算、点位精度计算2.成果输出(1) 平差结果的输出,主要是输出方向观测成果表、距离观测成果表、精度评定以及控制点成果表这四方面内容,对于这部分的输出比较容易实现,只要建立Cstring对象,调用库函数.format()来定义输出格式,来进行格式化输出,就 很容易实现。在对话框对应的计算按钮添加代码部分获得文件名strFile
17、Name,调用 void CalculateErrorEquations(const CString &strFileName) 。(2) 图形绘制,对话框添加画图控件,在对话框对应的画图按钮添加代码获得picture 控件的CDC和大小,调用控制网 ControlNetAdjust中成员函数voidErrorEllipseDraw(CDC* pDC,CRect & rect)进行绘图。2程序设计计划与进度表厶口、宀缶出六编号:完成内容:日期:1进行程序设计与安排进度表7.1 7.22设定数据格式与实现读取数据功能7.33近似坐标的推算747.54平差计算并进行成果输出7.6
18、7.85控制网网形、误差椭圆的绘制7.86代码修改、程序整改、修饰工作、调试7.8-7.97实验报告的编写7.103设计心得3.1程序设计过程中遇到问题及解决方法3.1.1系统的设计:需要实现什么功能,怎么实现。通过一步步地剖析实验指导 书里面的流程图,然后列出需求分析,最后得出初步设计思路。3.1.2数据文件的读取:老师给的指导书里面的数据是分开的,我们要做的不仅 是读数据重点是怎么读。通过参考了第8个实验读取数据的格式,对比指导书的数据,设计出来了自己的数据格式。坐标概算时:坐标概算有三种方法,根据指导书和老师的讲解,我们取用 的第三种极坐标算法。参考书里的代码。编写后会发现书里面定义的很
19、多变量跟 自己不一致,需要更改,并且书里面概算的过程中调用的一些函数(比如方位角Azi()计算和SearchDist()需要自己编写。需要注意的是编写的这两个函数的形 参要与概算函数里面创建的参数类型要一致,这需要好好注意。组成法方程,计算B,F矩阵:同样参考书里面代码,因为书里面定义前后 不一样,所以不能直接搬用。所以需要理解B矩阵是怎么构成的。通过查看书本和指导书得出B矩阵行为观测值(方向与角度)个数,列为未知点参数( X, 丫)与测站点个数构成,同样理解 F矩阵。而且,书本里面定向方位角近似的函 数也要自己编写。组成法方程时,常数项矩阵f数值过大,分别在函数 ComAngleObsEff
20、(ClzAngleObs AngleObs , double& Fi, double& Ci, double& Di, double& Ck, double& Dk)和 ComDistObsEff(ClzDistObs DistObs, double& Fi, double & Ci, double & Di, double & Ck, double & Dk) 中设置断点,经手算各方向观 测系数和距离观测系数后与监视值对比发现两个问题,第一个是在求解测站零方 向的近似方位角时,随着测站的变化,零方向的近似方位角没
21、有作对应变化;第二个问题是方向观测的常数Fi由于角度类对象和double转换不统一出现问题。 经过改正后通过,与手算误差符合。平差计算时,由于是参考第 8个实验计算输出的代码,这一次输出的成果 要比上一次多所以在对比和计划的时候弄了不断时间,主要是输出f的时候一定要注意单位,要回去检查f矩阵的计算和单位的换算,设置断点逐语句地查看监 视结果。3.2程序设计感想这一次的课程设计跟以往做的八个实验都不一样,它可以说八个实验的集合并且要超过以往八个实验的总和。一开始做的时候感觉无从下手,因为这个程序需要实现读取数据,计算,绘图,输出。而计算里面也分为概算,组成法方程,平差。首先是数据读取,一开始拿到
22、课程设计指导书看到数据的时候脑子浮现的是:这是什么?因为指导书里面的数据是分开的,不像做好了格式很清晰明了地排列在一个文档中。看数据的时候我需要搞懂这是什么数据,怎么测量的,然后再设计数据的排列方式再设计出如何读 取数据。在这个过程中,我更深入地掌握了读取文件的方式和方法与 格式,以前一些不懂的地方也通过多次调试弄得清楚明白。继而开始编写概算的代码。在老师讲解中,我们需要采用的是极坐 标法,这个方法要比前两种要简单,适用性更强。看了指导书和书本 之后,我决定采用书里面概算的代码。书里面的代码是采用循环迭代 来计算,有一些书里定义的函数需要自己弄清楚参数和函数类型,然 后再自己编写这个函数的功能
23、的。所以需求仔细看书代码的意思然后 才能编写出某个需自定义的函数。 通过编写了概算的函数,我更深入 地掌握了迭代循环的用法和理解了极坐标法计算近似坐标的方法。然后编写平差计算的代码。首先是组成误差方程,那么就需要B和I矩阵,同样的我也是参考书里面的代码。一开始看不懂书里面的 变量,因为书里变量定义没有说明并且跟自身定义的差别太大。需要我一行行甚至是手写和请教老师和同学才知道究竟表达的是什么。由于有编写概算的经验,这一次编写比较顺利。然后开始编写定权和误 差计算的代码了,我参考了第八个实验的代码。输出和计算出平差的 成果。在调试的时候出现多次错误有很多是循环提前了或则没有设置 循环所以在计算的时
24、候就会中断而不能继续, 通过设置了很多个断点 逐语句进行监视看每个变量的值, 再对比指导书里面的成果。成功调 试后发现了 X和Y的后面的成果小数点后2位跟指导书成果有一点 点误差,经过检查还是无法改正出指导书一样的结果。最后一步是绘图,绘图的代码不是全部自己编写的,但是我将绘图 代码的一些重点语句看懂了,比如那个是定义画笔,颜色,比例等等。在编写了程序并成功运行并输出后,其实有很多地方还是甚不了解 的。我反反复复地看自己的程序代码,一句一句地看这代码是怎样实现的,为什么这样做。加深了一点了解。但是在答辩的时候,我发现 了我对B矩阵和x改正数矩阵并不完全了解,它们之间的联系并没 有让我深入发掘出
25、来。答辩之后我深思了一下,再查看了一下程序, 顿时之前查看代码的一部分部分慢慢结合成了一块。让我发现了原来答辩不仅仅是单单的检验自己的程序和自己是否自己编写的,更是一一个让自身更加深入地,全面地回顾自己这两个星期以来的点点滴滴, 将他们结合起来机会。在这一次课程设计中,我受益匪浅。它将之前八个C+实验有机地统合在了一起并且升华。在比以往都庞大的一个程序调试的过程中未 免会出现很多的错误,有时候甚至高达几百个。以前我一个一个个找 错误找到自己认为容易改的开始改起,如今我懂得了错误要从第一个 改起,因为有时候下面很多错误也许就是因为最上面一个少加了,或者;而引起的。不仅如此,以前一些不从下手需要请
26、教老师的错误现 在见识多了,比较容易就知道了出现这种错误一般是哪里打错了或则 哪里少了声明等等。以往还不很会设置断点和理解断点的作用,现在 懂得了再调试后可以通过断点一步步对比参数更加容易地发现到底 是哪里出现了问题并加以改正。 感谢这一次机会,让我学到了这么东 西,我会继续努力更加认真地学习下去!4代码(1)ControlPoint 头文件#pragma once class CControlPoint / 控制点public :CControlPoint();CControlPoint();double X;double Y;CString strPointID; 点号int state;
27、int flg; /判断测站点是否相同用double dE;double dF;double dQ; /椭圆函数double dMx;double dMy;double dMk; /矩阵计算;Co ntrolPoi nt源文件#include "StdAfx.h"#include "ControlPoint.h"CControlPoint:CControlPoint() / 初始化 X=0;Y=0;strPointID = _T("");flg=0;state=0;dE=0;dF=0;dQ=0;dMx=0;dMy=0;dMk=0;CC
28、ontrolPoint:CControlPoint()DistObs头文件#pragma once#include "ControlPoint.h"#include "Angle.h"class CDistObs /距离观测值public :CDistObs();CDistObs();public :CControlPoint *cpStart,*cpEnd;/ 测站与照准点double dDist; /距离观测值;DistObs源文件#include "StdAfx.h"#include "DistObs.h"C
29、DistObs:CDistObs( void )dDist=0;cpStart=NULL; cpEnd=NULL;CDistObs:CDistObs( void )cpStart=NULL; cpEnd=NULL;An gleObs头文件#pragma once#include "ControlPoint.h"#include "Angle.h"class CAngleObs/ 方向观测值public :CAngleObs();CAngleObs();public :CControlPoint *cpStation; / 起始点CControlPoint
30、 *cpEnd; 照准点CAngle ObsAngle; / 方向观测值;An gleObs源 文件#include "StdAfx.h"#include "AngleObs.h"CAngleObs:CAngleObs( void )cpStation=NULL;cpEnd = NULL;ObsAngle = 0;CAngleObs:CAngleObs( void )(4) C on trolNetAdjust头文件#pragma once#include "ControlPoint.h"#include "AngleObs
31、.h"#include "DistObs.h"#include "Matrix.h"#include "Angle.h"const double Anglesigma=5;const double Distsigma = 0.5;class CControlNetAdjustpublic :CControlNetAdjust(); CControlNetAdjust();private :CControlPoint *m_pUnknowPoint; int m_iUnknowPointCount;CControlPoint
32、*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 SetStationCount();/计算误差方程/分割函数void CalculateErro
33、rEquations( const CString& strFileName);void ErrorEllipseDraw(CDC* pDC,CRect& rect);/ 画图private :CString* SplitString(CString str,char split, int iSubStrs);void SetUnknowPointSize( int size); / 设置未知点数组大小void SetKnowPointSize( int size); / 设置已知点数组大小void SetAngleObsSize( int size); /设置方向观测值数组大
34、小void SetDistObsSize( int size); /设置距离观测值数组大小CControlPoint* SearchKnownPointUsinglD(CString strID);CControlPoint* SearchUnknownPointUsinglD(CString strID);CControlPoint* SearchPointUsinglD(CString strPointID);CAngle Azimuth( double dX1, double My1, double dx2, double My2); / 求方位角double HDist(CContro
35、lPoint* cpStation1,CControlPoint* cpEnd1);/ 两控制点距离CAngle ZeroAngle(CAngleObs AngleObs); / 定位方向角void ComAngleObsEff(CAngleObs AngleObs, double & Fi, double & Ci, double & Di, double & Ck,double & Dk);void ComDistObsEff(CDistObs DistObs, double & Fi, double & Ci, double &am
36、p; Di, double & Ck, double & Dk);void FixedWeight(CMatrix &p);/ 定权void OutMatrixToFile( const CMatrix& mat,CStdioFile& SF); / 将矩阵输出到文件void GetMaxXY( double & dx, double & dy, double & minx, double &maxy); / 获取最大值void FormErrorEquations(CMatrix& B,CMatrix&
37、f);/ 组成误差方程;ClzCo ntrolNetAdjust 源文件#include "StdAfx.h"#include "ControlNetAdjust.h"#include <locale.h>#include "math.h"const double PI=atan(1.0)*4.0;const double EPSILON= 1.0E-12;const double R0=206265;CControlNetAdjust:CControlNetAdjust()m_pUnknowPoint=NULL;mUnk
38、nowPointCount=0;m_pKnowPoint=NULL;m_iKnowPointCount=0;m_pAngleObs=NULL;m_iAngleObsCount=0;m_pDistObs=NULL;m_iDistObsCount=0;m_iStationCount=0;CControlNetAdjust:CControlNetAdjust()delete m_pUnknowPoint;m_pUnknowPoint=NULL;delete m_pKnowPoint;m_pKnowPoint=NULL;delete m_pAngleObs;m_pAngleObs=NULL;delet
39、e m_pDistObs;m_pDistObs=NULL;void CControlNetAdjust:SetKnowPointSize( int size) / 设置已知点数组大小if (m_pKnowPoint!=NULL)delete m_pKnowPoint;m_pKnowPoint= NULL;m_iKnowPointCount=O;mKnowPointCount=size;m_pKnowPoint = new CControlPointsize;void CControlNetAdjust:SetUnknowPointSize( int size) / 设置未知点数组大小if (m
40、_pUnknowPoint!= NULL)delete m_pUnknowPoint;m_pUnknowPoint=NULL;mUnknowPointCount=0;m_iUnknowPointCount = size;m_pUnknowPoint= new CControlPointsize;void CControlNetAdjust:SetAngleObsSize( int size) / 设置方向观测值数组大小if (m_pAngleObs!=NULL)delete m_pAngleObs;m_pAngleObs= NULL;m_iAngleObsCount=0;m_iAngleObs
41、Count=size;m_pAngleObs= newCAngleObssize;if (m_pDistObs!=NULL)delete m_pDistObs; m_pDistObs=NULL; m_iDistObsCount=0;mDistObsCount=size; m_pDistObs= new CDistObssize;CControlPoint* CControlNetAdjust:SearchKnownPointUsinglD(CString strID)组中找到控制点,并返回该点的指针for (int i=0;i<m_iKnowPointCount;i+)if (strID
42、 = m_pKnowPointi.ptlD)return &m _pKnowPointi;return NULL;CControlPoint* CControlNetAdjust:SearchUnknownPointUsinglD(CString strID) 数组中找到控制点,并返回该点的指针for (int i =0;i<m_iUnknowPointCount;i+)if (strID = m_pUnknowPointi.ptlD)return &m _pUnknowPointi;return NULL;CControlPoint* CControlNetAdjust
43、:SearchPointUsinglD(CString ptID)数组中找到控制点,并返回该点的指针/根据点号从已知点数/根据点号从未知点/根据点号从未知点和已知点CControlPoint* pCP=NULL;pCP= SearchKnownPointUsinglD(ptlD);if (pCP=NULL)pCP= SearchUnknownPointUsinglD(ptlD);return pCP;/分割函数CString* CControlNetAdjust:SplitString(CString str,char split, int iSubStrs)int iPos = 0;/分割符
44、位置int iNums = 0;/分割符的总数CString strTemp = str;CString strRight;/先计算子字符串的数量while (iPos != -1)iPos = strTemp.Find(split);if (iPos = -1)break;strRight = strTemp.Mid(iPos + 1, str.GetLength();strTemp = strRight;iNums+;if (iNums = 0)/没有找到分割符/子字符串数就是字符串本身iSubStrs = 1;return NULL;/子字符串数组iSubStrs = iNums + 1
45、;/子串的数量=分割符数量+ 1CString* pStrSplit;pStrSplit = new CStringiSubStrs;strTemp = str;CString strLeft;for ( int i = 0; i < iNums; i+)iPos = strTemp.Find(split);/左子串strLeft = strTemp.Left(iPos);/右子串strRight = strTemp.Mid(iPos + 1, strTemp.GetLength();strTemp = strRight;pStrSpliti = strLeft;pStrSplitiNu
46、ms = strTemp;return pStrSplit;void CControlNetAdjust:SetStationCount()m_iStationCount=mKnowPointCount+mUnknowPointCount;/读取数据bool CControlNetAdjust:LoadObsData( const CString &strFileName,CString &screen)CStdioFile gjj;if (!gjj.Open(strFileName,CFile:modeRead)return false ;CString strLine;/读
47、取已知数据gjj.ReadString(strLine);SetKnowPointSize(_ttoi(strLine);screen+=strLine;screen+=_T( "rn");int n=0;for (int i=O;i<m_iKnowPointCount;i+)gjj.ReadString(strLine);screen+=strLine;screen+=_T( "rn");CString* pstrData=SplitString(strLine,',' ,n);m_pKnowPointi.ptlD=pstrDat
48、aO;m_pKnowPointi.X=_tstof(pstrData1);m_pKnowPointi.Y=_tstof(pstrData2);m_pKnowPointi.state=1;m_pKnowPointi.flg=1;delete pstrData;pstrData=NULL;/读取未知点数据gjj.ReadString(strLine);screen+=strLine;screen+=_T( "rn");SetUnknowPointSize(_ttoi(strLine);for (int i=O;i<m_iUnknowPointCount;i+)gjj.Re
49、adString(strLine);screen+=strLine;screen+=_T( "rn");/CString* pstrData=SplitString(strLine,',',n);m_pUnknowPointi.ptlD=strLine0; m_pUnknowPointi.state=2;m_pUnknowPointi.flg=2;/读取距离观测数据gjj.ReadString(strLine);screen+=strLine;screen+=_T( "rn");SetDistObsSize(_ttoi(strLine);
50、for (int i=0;i<m_iDistObsCount;i+)gjj.ReadString(strLine);screen+=strLine;screen+=_T( "rn");CString* pstrData=SplitString(strLine,',' ,n);m_pDistObsi.cpStart=SearchPointUsinglD(pstrData0); m_pDistObsi.cpEnd=SearchPointUsinglD(pstrData1); m_pDistObsi.dDist=_tstof(pstrData2);delet
51、e pstrData; pstrData=NULL;/读取方向观测值数据gjj.ReadString(strLine);screen+=strLine;screen+=_T( "rn");SetAngleObsSize(_ttoi(strLine);for (int i=0;i<m_iAngleObsCount;i+)gjj.ReadString(strLine);screen+=strLine;screen+=_T( "rn");CString* pstrData=SplitString(strLine,',' ,n);m_pAn
52、gleObsi.cpStation=SearchPointUsinglD(pstrData0); m_pAngleObsi.cpEnd=SearchPointUsinglD(pstrData1); m_pAngleObsi.ObsAngle=CAngle(_tstof(pstrData2),DMS); delete pstrData;pstrData=NULL;gjj.Close();return true ;/方位角计算CAngle CControlNetAdjust:Azimuth( double dX1, double dY1, double dX2, double dY2) CAngl
53、e A;int sgn;if (dY2-dY1+EPSILON>=0)sgn=1;else sgn=-1;A(RAD)=PI-sgn*PI/2-atan(dX2-dX1)/(dY2-dY1+EPSILON);return A;/两控制点距离函数double CControlNetAdjust:HDist(CControlPoint *cpStation1, CControlPoint *cpEnd1)double dDist;dDist= sqrt(cpStation1->X-cpEnd1->X)*(cpStation1->X-cpEnd1->X)+(cpStat
54、ion1->Y-cpEnd1->Y)*(cpStatio n1->Y-cpEnd1->Y);return dDist;/坐标概算void CControlNetAdjust:CoordinateEstimates()if (m_iKnowPointCount=0 |m_iAngleObsCount =0 |m_iDistObsCount=0|m_iUnknowPointCount=0) / 未读取数据则返回return ;int iCount=0;int lsCoordinateEstimate=0;if (lsCoordinateEstimate=0) /判断有没有计
55、算过近似坐标dofor (int i=0;i<m_iAngleObsCount;i+)if (m_pAngleObsi.cpStation->state=1 &&m_pAngleObsi.cpEnd->state=1)for (int j=0;j<m_iAngleObsCount;j+)if (m_pAngleObsj.cpStation->ptlD=m_pAngleObsi.cpStation->ptlD&&m _pAngleObsj.cpEnd->state=2)CAngleARF=m_pAngleObsj.ObsAngle-m_pAngleObsi.ObsAngle; / 方向值之差CAngleARF0=Azimuth(m_pAngleObsi.cpStation->X,m_pAngleObsi.cpStation->Y, m_pAngleObsi.cpEnd->X,m_pAngleObsi.cpEnd->Y); / 计算已知边的方位角double ARF
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 运输合同联运协议书
- 逻辑思维在财务管理中的实际应用试题及答案
- 只有合同怎么写协议书
- 达人分享2025年MS Office试题及答案
- 了解Access的用户自定义功能试题及答案
- 诗歌中的结构与情感体验文学概论试题及答案
- 2025年C语言考试方向指引试题及答案
- 计算机二级Web数据安全管理试题及答案
- 历年计算机二级试题及答案总结
- 内墙砌墙合同协议书范本
- GB/T 13262-1991不合格品率的计数标准型一次抽样检查程序及抽样表
- 年产二十万吨合成氨转化工段设计
- 《煤矿安全规程》专家解读(详细版)
- DB63-T 1806-2020金属非金属露天矿山企业安全生产风险分级管控和隐患排查治理实施指南
- 供应过程的核算说课市公开课金奖市赛课一等奖课件
- 2023年海南省中考英语试题
- 智慧海南总体方案(2020-2025年)
- DG-TJ 08-2122-2021 保温装饰复合板墙体保温系统应用技术标准
- SFR-SE-ARC-0031激光跟踪设置-作业指导书
- 录音棚、摄影棚、直播室设计方案
- 安全生产隐患排查概述PPT课件
评论
0/150
提交评论