中南大学测绘程序课程设计报告含代码汇总

上传人:沈*** 文档编号:84620915 上传时间:2022-05-04 格式:DOC 页数:27 大小:453.50KB
收藏 版权申诉 举报 下载
中南大学测绘程序课程设计报告含代码汇总_第1页
第1页 / 共27页
中南大学测绘程序课程设计报告含代码汇总_第2页
第2页 / 共27页
中南大学测绘程序课程设计报告含代码汇总_第3页
第3页 / 共27页
资源描述:

《中南大学测绘程序课程设计报告含代码汇总》由会员分享,可在线阅读,更多相关《中南大学测绘程序课程设计报告含代码汇总(27页珍藏版)》请在装配图网上搜索。

1、中南大学测绘程序课程设计报告姓名:XXX 学号:XXXXXXX 指导老师:XXX 专业班级:XXXX1系统设计1、实现功能1.1优化设计:根据控制网的观测精度与网形,全面评定网的精度1.2数据输入:使用外部数据倒入,通过读取.txt格式观测文件实现数据输入1.3概算:主要是进行近似坐标的推算1.4平差计算:对观测数据进行精密平差计算,得到平差后的点位坐标,方向 观测值,边长观测值等,精度评定。1.5成果输出:控制网图形输出,绘制误差椭圆,以及平差结果导出到 txt文 件中。2、系统总体框架2.1数据输入2.1.1文件格式:2已知点数据个数1,31250.2500,11500.41002,332

2、56.5700,10900.8400已知点数据未知点数据个数3,4, 二 未知点数据5,8距离观测数据个数1,3,2300.06001,4,3090.35302,5,3643.23402,3,2115.91902,4,4363.61103,5,2169.07303,4,2620.9090距离观测数据4,5,3922.860018 方向观测数据个数1,2,01,3,57.2032101,4,113.140635 2,5,0 2,3,32.122292 2,4,57.501530 2,1,98.261273 3,1,03,2,56.2537793,5,172.5339443,4,282.29538

3、3 4,1,0 4,2,26.095412 4,3,46.3617984,5,77.594671 5,4,0 5,3,39.001779 5,2,70.195151方向观测数据2.1.2数据输入实现:(1)创建点类用于存取点的信息,如坐标、点号、长短轴、精度信息class ClzControlPointpublic :CIzCo ntrolPoi nt();CIzCo ntrolPoi nt();double X;double Y;CString strPointID;int state;int flg;double dE;double dF;double dQ;double dMx;doub

4、le dMy;double dMk;(2) 创建距离类用于存取距离观测信息,如测站方向点、观测方向点、距离观 测值class ClzDistObspublic :ClzDistObs(); ClzDistObs();public :ClzCo ntrolPoi nt *cpStart, *cpE nd;double dDist;(3) 创建方向类用于存取方向观测信息,如测站方向点、照准方向点、方向观 测值class ClzAngleObspublic :ClzA ngleObs(); ClzA ngleObs();ClzCo ntrolPoi nt *cpStatio n;ClzC on tr

5、olPoi nt *cpE nd;An gle ObsA ngle;(4) 读取文件函数:bool ClzControlNetAdjust :LoadObsData( const CString & strFileName ),此函数功能为通过传入的文件名 strFileName进行文件读写,并 将信息存到相应成员数据中。2.2近似坐标推算2.2.1近似坐标计算原理按方向和边长观测值计算导线网中待定点的近似坐标Xkyk=xa d cost 二 xa 二 ya d sint 二目ad cos(tab A) d sin A)2.2.2具体实现(1)坐标概算函数:void CIzControlNet

6、Adjust :CoordinateEstimates(),此函数功能为:第一步查找某方向观测i两端都为已知点,第二步查找某方向观测 j的测站点与方向观测i测站点相同且观测方向未知,第三步根据近似坐标计算 原理计算方向观测j的观测方向近似坐标,需要注意的是,在近似坐标推算中, 循环计算一次之后,必须判断是否所有未知点的近似坐标已经推算出来,没有的话再进行循环计算。(这样做主要是为了防止在节点控制网中,当未知点很多时,可能推算到一个点之后,它所连得所有控制点均为坐标未知点,这样在一次循环中就会跳过这个控制点,这个点的近似坐标就没有计算出来。而在下一次循环中, 它所连得控制点中就会有坐标已知点,这

7、样这个点的近似坐标就计算出来了)。(2) 计算流程图:2.3平差计算2.3.1平差计算原理设:观测值为L,其权为P,相应的改正数为V,必要观测值个数为t,选定未 知数X,则有误差方程V = BX + LVTPV 二 min为近似坐标计算而得,为实测边长.(VTPV)二 2VTP丄二 2VTPB 二 0x:xBTPV = O,BtP(BX L) = 0, BtPBX BtPL = 0 ,得:法方程:btPBX btpl = 0 法方程的解:X (BtPB) BTPL单位权中误差:VTPV /(n -1)2.3.2间接平差流程(1) 列出误差方程及条件式(2) 定权(3) 组成法方程(4) 解算法

8、方程,求得 dX=dx1 dy1 dx2 dy2 (5) 平差后的坐标值计算X=X+dX(6) 精度评定,计算误差椭圆参数等2.3.3误差方程的列立以未知点坐标为平差对象,一个观测值对应一个误差方程式,误差方程式 包括两类:方向观测误差方程式和边长观测误差方程式(1)方向观测误差方程式I其中: lij般形式:Vj Z广 afXi + jY 一 a/Xj _ bYj +0 0a p sin片厲p cosTjrO 十 t。|Ziaj=:T0,6= _ ;to |j = - ZiTj _ Lij般取测站起始方向(零方向)的近似坐标方位角作为定向角近似值Y0 - Y0Tj。二 arctg (j)xj

9、_xi当测站点i为已知点时:Vij = 一辽)- a/Xj - bYj + lij 当照准点j为已知点时:vz a Xb Y I”当侧站点和照准点都为已知点时:VZ I(2)边长观测误差方程式iji ijVjlij-cosTXj - sinTj0&Y + cosTX/ sinTYj Tq=s ij0 - S ijSj当测站点i为已知点时: 当照准点j为已知点时:V厂 cosTjXj + sinT診Yj + 1耳Vi厂-cosTijXi - sinTY + h234定权(1)方向观测值的权在等精度方向观测的控制网中,一般把方向观测值的权定为(2)边长观测值的权其中Ms由对话框输入235平差后的坐

10、标值计算求得平差后的坐标值X=X+dX。因为只有dx很小时误差方程式、条件方程 式才是严密的,因此当dX的值较大时应把X=X_+dX作为新的近似值重复上述 步骤,直到dx中绝对值最大的一个小于给定的 0.1mm (注意:这里只是指坐标 改正值,不包括定向改正值,所以在求 dx中绝对值最大值时,应除去定向改正 值,否则会无限迭代计算,因为定向改正值很大,而且迭代计算时不会进行改正) 2.3.6精度评定T(1)中误差计算:=_ V PV ,n为观测值个数,t为未知数个数0 V n-1(2)待定点点位误差:mx 二m。. Qxx,my 二 m。,Qyymkmy(3)误差椭圆元素计算:长半径方位角 Q

11、 =arctg2QxyQxx _Qyy长半径、短半径E = m。Qxx QxytgQ,E 二 m。Qxx Qxytg(Q 90。)(1) void CIzControlNetAdjust :ComAngleObsEff( ClzAngleObs AngleObs , double & Fi, double & Ci, double & Di, double & Ck, double & Dk),此函数功 能为计算出AngleObs的系数Fi、Ci、Di、Ck;(2 ) void ClzControlNetAdjust :ComDistObsEff( ClzDistObs DistObs, do

12、uble& Fi , double& Ci, double& Di, double& CK double& DR,此函数功能 为计算出DistObs的系数Fi、Ci、Di、Ck;(3) void ClzControlNetAdjust :FormErrorEquations( CMatrix &B, CMatrix &f),此函数功能为组建法方程系数矩阵 B,常数项矩阵f; FixedWeight( CMatrix &p),此函数功能为计算权矩阵p; |;(4) void ClzControlNetAdjust :CalculateErrorEquations(const CString &

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

14、钮添加代码获得picture 控件的CDC和大小,调用控制网CIzControlNetAdjust中成员函数ErrorEllipseDraw( CDC pDCCRect& rect )进行绘图。2程序设计计划与进度表厶口、宀缶出六编号:完成内容:日期:1系统的总体设计、编制作业进度表6.24 6.252数据输入6.263近似坐标的推算6.274平差计算6.28-6.295控制网网形、误差椭圆的绘制6.306代码修改、程序整改、修饰工作、调试7.1-7.27实验报告的编写7.33设计心得3.1程序设计过程中遇到问题及解决方法3.1.1坐标概算时,Coordi nateEstimates(函数在查

15、找某方向观测方向两端为已知 时中断,设断点发现方向观测的测站点和观测方向点指针指向NULL ,初步断定读取函数出现问题。在 LoadObsData(co nst CStri ng& strFileName冲读取已知点、 未知点、方向观测、距离观测处设置断点,通过调试发现在读取方向观测时, SearchPointUsingID出现问题,发现是if语句出现了问题,改正后通过。3.1.2组成法方程时,常数项矩阵f数值过大,分别在函数 ComAngleObsEff(ClzAngleObs AngleObs , double& Fi, double& Ci, double& Di, double& Ck

16、, double& Dk)和 ComDistObsEff(ClzDistObs DistObs, double& Fi, double & Ci, double & Di, double & Ck, double & Dk) 中设置断点,经手算各方向观 测系数和距离观测系数后与监视值对比发现两个问题,第一个是在求解测站零方 向的近似方位角时,随着测站的变化,零方向的近似方位角没有作对应变化;第二个问题是方向观测的常数Fi由于角度类对象和double转换不统一出现问题。 经过改正后通过,与手算误差符合。3.1.3平差计算时,迭代平差进入死循环。设置断点后,调试发现问题在于求解 未知数坐标改正数找

17、最大值时,最大值始终为第一次平差时改正数最大值,并未随着迭代而变化。通过监视未知点的坐标时发现,一般再迭代两次左右坐标不会 变换,所以将迭代次数直接迭代5次,而不通过控制未知数改正数的最大值跳出 循环。3.1.4平差结果文件中,发现方向观测各测站零方向改正数不为零,在输出之前 写代码将零方向强制归零,相同测站的方向减去该零方向的改正数,经处理后问题得到解决。3.1.5平差后进行画图时,再制定比例尺时,通过坐标中的最大的坐标比上rect的宽度和高度,坐标转换后,图像画出来非常小。处理方法为:通过横纵坐标的 最大与最小的差与rect的宽度和高度比作为比例尺,并以控制点的某点相对画 图,图像的大小位

18、置符合要求。而在绘制椭圆过程中,直接通过长短轴求得椭圆 上的点到椭圆中心的距离,投影到屏幕坐标上,经绘制为误差曲线,经过将坐标 旋转后直接绘图得到正确图形。3.1.6后期测试时,发现在计算、画图后,再按计算、画图按钮,上一次的图形 并未清除,上网查找 GetDlgltem(IDC_DRAW)-ShowWi ndow(FALSE); GetDlgltem(IDC_DRAW)-ShowWindow(TRUE);,通过关闭和开启控件可将上次 所绘图形清除。3.2程序设计感想这次测绘程序课程设计让我学会了编写控制网平差的程序,其中包括文件读取、 坐标概算、组成法方程、定权、平差计算、精度评定以及绘制网

19、图和误差椭圆。其中,加深了文件读取的操作,MFC图形绘制操作的熟练程度。在编写过程中, 遇到了各种问题,最后都通过调试得到了解决,也更让我明白,一个好的程序调 试是至关重要的,而最麻烦的也是调试,因为语句编译通过,语法没有错误,错 误往往是一些细小的地方。这就得需要一步步的设断点,并进行监视,看监视值 和正确值是否一致,一步步进行调整。在编写过程中,往往由于一些原因引起不 必要的麻烦,这更叫提醒我在写程序的时候务必专心, 同时我也更有信心学好专 业编程,相信自己会做的更好。4代码(1)ClzCo ntrolPoi nt 头文件 class ClzControlPointpublic :ClzC

20、o ntrolPoi nt(); ClzCo ntrolPoi nt(); double X;double Y;CString strPointID;int state;int flg;double dE;double dF;double dQ;double dMx;double dMy;double dMk;ClzC on trolPoi nt源文件#pragma once#i nclude stdafx.h#i nclude ClzCo ntrolPoi nt.hClzCo ntrolPoi nt:ClzCo ntrolPoi nt()X = 0;Y = 0;strPointID = _T

21、();fig = 0;state = 0;dE = 0;dF = 0;dQ = 0;dMx=0;dMy=0;dMk=0;ClzCo ntrolPoi nt:ClzC on trolPoi nt() (2)ClzDistObs 头文件class ClzDistObspublic :ClzDistObs();ClzDistObs();public :ClzCo ntrolPoi nt*cpStart, *cpE nd;double dDist; IClzDistObs 源文件#i nclude stdafx.h#i nclude ClzDistObs.hClzDistObs :ClzDistObs

22、() dDist = 0;cpStart = NULL cpE nd = NULLClzDistObs :ClzDistObs() cpStart = NULL cpEnd = NULL(3) ClzA ngleObs 头文件class ClzAngleObspublic :ClzA ngleObs();ClzA ngleObs();public :ClzCo ntrolPoi nt*cpStati on;ClzC on trolPoi nt*cpE nd;An gle ObsA ngle;ClzA ngleObs 源文件#i nclude stdafx.h#i nclude ClzA ngl

23、eObs.hClzA ngleObs:ClzA ngleObs() cpStation = NULL; cpE nd = NULL ObsA ngle = 0;ClzA ngleObs:ClzA ngleObs() cpStatio n= NULLcpE nd=NULL(4) ClzC on trolNetAdjust头文件#pragma once#i nclude ClzCo ntrolPoi nt.h#i nclude ClzA ngleObs.h#i nclude ClzDistObs.h#i nclude Matrix.h#in clude A ngle.hclass ClzContr

24、olNetAdjustpublic :CIzCo ntrolNetAdjust();CIzCo ntrolNetAdjust();private :ClzC on trolPoi nt * m_pU nkn owPoi nt;int m_iUnknowPointCount;ClzC on trolPoi nt * m_pK no wPoi nt;int mKnowPointCount;ClzA ngleObs * m_pA ngleObs;int m_iAngleObsCount;ClzDistObs * m_pDistObs;int mDistObsCount;public :double

25、An glesigma;double Distsigma;int m_iStationCount;bool LoadObsData( c on st CStri ng& strFileName);void Coordin ateEstimates();void SetAnglesigmaD( double Asigma, double Dsigma, double count);void ErrorEllipseDraw(CDC * pDC, CRect & rect);void CalculateErrorEquatio ns( const CStri ng& strFileName); p

26、rivate :ClzControlPoint* SearchKnownPointUsingID(CString strlD);ClzControlPoint* SearchUnknownPointUsingID(CString strlD); void SetKnowPointSize( int size);void SetUnknowPointSize( int size);void SetAngleObsSize( int size);void SetDistObsSize( int size);CString* SplitString(CString str,char split, i

27、nt iSubStrs);ClzControlPoint* SearchPointUsingID(CString strPointID);Angle Azimuth( double dX1, double My1, double dX2, double My2); double HDist(ClzControlPoint*cpStation1, ClzControlPoint*cpEnd1);An gle ZeroA ngle(ClzA ngleObs An gleObs);void FormErrorEquatio ns(CMatrix &B, CMatrix &f);void ComA n

28、gleObsEff(ClzA ngleObs An gleObs , double & Fi, double & Ci, double & Di, double & Ck, double & Dk);void ComDistObsEff(ClzDistObs DistObs, double & Fi, double & Ci, double & Di, double & Ck, double & Dk);void FixedWeight(CMatrix & p);void GetMaxXY(double & dx, double & dy, double & minx, double & ma

29、xy); void OutMatrixToFile( const CMatrix& mat, CStdioFile& SF);ClzC on trolNetAdjust 源文件#i nclude stdafx.h#in elude CIzCo ntrolNetAdujst.h#i nclude #in elude math.hconst double PI =atan(1.0)*4.0; const double EPSILON = 1.0E-12; const double R0 = 206265;ClzC on trolNetAdjust :ClzC on trolNetAdjust()

30、m_pU nkno wPoi nt=NULLmUnkno wPoi ntCou nt=0;m_pK nowPoi nt=NULLm_iKno wPo in tCo un t=0;m_pA ngleObs=NULLm_iA ngleObsCou nt=0;m_pDistObs= NULLmDistObsCou nt = 0;An glesigma=0;Distsigma=0; m_iStati onCoun t=0; _ClzC on trolNetAdjust :ClzCo ntrolNetAdjust() |delete m_pUnknowPoint;m_pU nkno wPoi nt =

31、NULL delete m_pKnowPoint;m_pK no wPoi nt = NULL delete m_pAngleObs;m_pA ngleObs = NULL delete m_pDistObs; m_pDistObs = NULL;size ) _void ClzControlNetAdjust :SetKnowPointSize( int if (m_pKnowPoint != NULL delete m_pKnowPoint;m_pK no wPoi nt = NULLmKno wPoi ntCou nt=O; mKnowPointCount = size ; m_pKno

32、wPoint = new ClzControlPoint size ; _void ClzControlNetAdjust :SetUnknowPointSize( int size ) if (m_pUnknowPoint != NULL _delete m_pUnknowPoint;m_pU nkno wPoi nt = NULLmUnkno wPoi ntCou nt = 0;mUnknowPointCount = size ;m_pUnknowPoint = new ClzControlPoint size ; _void ClzControlNetAdjust :SetAngleOb

33、sSize( int size ) if (m_pAngleObs!= NULL _delete m_pAngleObs;m_pA ngleObs = NULL m_iA ngleObsCou nt = 0; _m_iAngleObsCount = size ;m_pAngleObs = new ClzAngleObssize ; _void ClzControlNetAdjust :SetDistObsSize( int size) Iif (m_pDistObs!= NULL delete m_pDistObs; m_pDistObs = NULL; mDistObsCou nt = 0;

34、m_iDistObsCount = size ;m pDistObs = new ClzDistObs size ;CString * ClzControlNetAdjust:SplitString(CString str , char split , intiSubStrs )int iPos = 0;/分割符位置int iNums = 0;/分割符的总数CString strTemp = str ;CString strRight;/先计算子字符串的数量while (iPos != -1)iPos = strTemp.Find( split );strTemp = strRight; iN

35、ums+;if (iNums = 0)/没有找到分割符/子字符串数就是字符串本身iSubStrs = 1;return NULL/子字符串数组iSubStrs = iNums + 1;/子串的数量=分割符数量+ 1CString * pStrSplit;pStrSplit =new CString iSubStrs ;strTemp = str ;CString strLeft;for (int i = 0; i iNums; i+)iPos = strTemp.Find(split );/左子串strLeft = strTemp 丄 eft(iPos);/右子串strRight = strT

36、emp.Mid(iPos + 1, strTemp.GetLe ngth();strTemp = strRight;pStrSpliti = strLeft;pStrSplitiNums = strTemp;return pStrSplit;CIzControlPoint * ClzControlNetAdjust :SearchKnownPointUsinglD( CString strlD )for ( int i = 0; imKnowPointCount; i+) _if ( strID = m_pKnowPointi.strPointID) _return &m_pKnowPoint

37、i; _return NULLClzCo ntrolPoi nt *ClzControlNetAdjust :SearchUnknownPointUsinglD( CString strID )for ( int i = 0; i= 0)A(RAD PI - sgn*PI / 2 - atan(dX2 - dX1) / ( dY2 - dY1 + EPSILON);return A;doubleCIzControlNetAdjust :HDist( CIzControlPoint *cpStation1 ,CIzControlPoint * cpEnd1)double dDist;dDist

38、= sqrt( cpStation1 -X - cpEnd1-X)*( cpStation1 -X - cpEnd1-X) + ( cpStation1 -Y - cpEnd1-Y)*( cpStation1 -Y- cpEnd1-Y);return dDist;Angle ClzControlNetAdjust :ZeroAngle( ClzAngleObs AngleObs)An gle ZeroAlf;for ( int i = 0; i strPoi ntID=An gleObs.cpStatio n-strPoi ntID)&m_pAngleObsi.ObsAngle( DM&0.0

39、00000 X,m_pA ngleObsi.cpStatio n-Y,m_pA ngleObsi.cpE nd-X,m_pA ngleObsi.cpE nd-Y);_ int iObsCount, iUnknownCount;iObsCou nt = m_iA ngleObsCou nt + mDistObsCou nt;iUnknownCount = mStati on Cou nt + mUnkno wPoi ntCou nt * 2; BSetSize(iObsCou nt, iU nkn ow nCou nt);f .SetSize(iObsCou nt, 1);for ( int i

40、 = 0; i iObsCount;i+)for (int j = 0; j iUnknownCount; j+)int StationNum = 1;int tmpi = 1;for (int i = 0; i strPoi ntID!=m_pA ngleObstmpi.cpStatio n-strPoi ntID_ )Statio nNu m+;B(i, mUnknowPointCount * 2 - 1 + StationNum) = -1;tmpi = i;for (int j = 0; j strPoi ntID=m_pU nkn owPoi ntj.strPoi ntID)_ B(

41、i, 2 * j) = ci;B(i, 2 * j + 1) = di; _if(m_pA ngleObsi.cpE nd-strPoi ntID=m_pU nkn owPoi ntj.strPoi ntID)_ B(i, 2 * j) = ck;B(i, 2 * j + 1) = dk; f(i, 0) = fi;距离观测误差方程for (int i = 0; i m_i DistObsCou nt; i+) _double fi, ci, di, ck, dk;ComDistObsEff(m_pDistObsi,fi,ci,di,ck,dk);for ( int j = 0; j strP

42、oi ntID=m_pU nkn owPoi ntj.strPoi ntID)_ B(i+m_iAngleObsCount, 2 * j) = ci;B(i+m_iAngleObsCount, 2 * j + 1) = di;if(m_pDistObsi.cpE nd-strPoi ntID=m_pU nkn owPoi ntj.strPoi ntID)B(i + mAngleObsCount, 2 * j) = ck;B(i + mAngleObsCount, 2 * j + 1) = dk; _f (i+m_iAngleObsCount, 0) = fi; _ void ClzContro

43、lNetAdjust :ComAngleObsEff( ClzAngleObs AngleObs , double & Fi, double& Ci, double& Di, double& Ck, double& Ddouble dXik, dYik,dSik;dXik = An gleObs.cpE nd-X - An gleObs.cpStatio n-X;dYik = An gleObs.cpE nd-Y - An gleObs.cpStatio n-Y;dSik = HDist( An gleObs.cpStatio n,An gleObs.cpE nd);An gle Aziik;

44、Aziik = Azimuth( AngleObscpStation-X,AngleObs.cpStation-Y,AngleObs.cpEnd-X, AngleObs.cpEnd-Y );double a, b;a = R0*dYik / (dSik*dSik * 1000.0);b =- R0*dXik / (dSik*dSik * 1000.0);Ci = a;Di = b;Ck = -a;Dk = -b;An gle Zero;Zero = ZeroAngle( AngleObs); double L0;L0 = Aziik( RAD - Zero( RAD if (L0 X - Di

45、stObs .cpStart-X) / dSik;d = ( DistObs .cpEnd-Y - DistObs .cpStart-Y) / dSik;Ci = -c;Di = -d;Ck = c;Dk = d;Fi = ( DistObs .dDist - dSik)*1000;voidClzControlNetAdjust:OutMatrixToFile( const CMatrix & mat,CStdioFile & SF)CString strLine, strTmp;for ( int i = 0; i mat.Row(); i+)strLi ne.Empty();for ( i

46、nt j = 0; j mat.Col(); j+)strTmp.Format( _T(%.4f ), mat(i, j);strLi ne = strLi ne + strTmp;SFWriteStri ng(strLi ne +_T(rn);void ClzControlNetAdjust :FixedWeight( CMatrix &p)int iCount = m_iAngleObsCount + mDistObsCount;p.SetSize(iCo un t, iCo un t);p.Un it();for (int i = m_iAngleObsCount ; i iCount;

47、 i+) _p(i,i)=An glesigma*A nglesigma/(Distsigma*Distsigma*m_pDistObsi-mAn gleObsCou nt.dDist/1OOO); 一 一/控制网主函数void ClzControlNetAdjust :CalculateErrorEquations( const CString & strFileName )CStdioFile sf;CString strLine;setlocale( LC_ALL );if(!sf.Open( strFileName ,CFile : modeCreate|CFile : modeWri

48、te) return ;strLine.Format( _T(概算后坐标 n);sf.WriteStri ng(strLi ne);strLine.Format( _T(未知点个数:%dn), mUnknowPointCount); sf.WriteStri ng(strLi ne);for (int i = 0; i m_iUnknowPointCount; i+) _strLine.Format( _T( %s,%.4f,%.4fn),m_pU nkno wPoi nti.strPoi ntID, m_pU nkno wPoi nti.X,m_pU nkno wPoi nti.Y);sf.

49、WriteStri ng(strLi ne);CMatrix B, v, x, f, p;CMatrix Nbb, fe;double max = 0;doFormErrorEquations(B, f);FixedWeight(p);Nbb =B*p*B;fe =B*p*f;x = Nbb.l nv()*fe;v = B*x - f;for ( int i = 0; i m_iUnknowPointCount; i+) _m_pUnknowPointi.X = m_pUnknowPointi.X + x(2 * i, 0) / 1000; m_pU nkno wPoi nti.Y = m_p

50、U nkn owPoi nti.Y + x(2 * i + 1,0)/ 1000;i;max+; while (max5);CMatrix Qxx;Qxx = Nbb.l nv();sf.WriteStri ng(_T(矩阵 Bn);OutMatrixToFile(B, sf);sf.WriteString(_T(矩阵 fn);OutMatrixToFile(f, sf);sf.WriteString(_T(矩阵权阵 pn);OutMatrixToFile(p, sf);sf.WriteStri ng(_T(矩阵 Qxxn);OutMatrixToFile(Qxx, sf);double dV

51、zero = 0;for (int i = 0; i m_iAngleObsCount; i+) _if (m_pAngleObsi.ObsAngle( DMS- 0.000000 EPSILON)dVzero = v(i, 0);v(i, 0) -= dVzero;CMatrix r(1,1);r =v *p*v;double r0; /单位权中误差r0 = sqrt(r(0, 0) / (m_iAngleObsCount + mDistObsCount - 2 * mUnkno wPoi ntCo un t-mStatio nCou nt );strLine.Format( _T(单位权中

52、误差:%.4fn ),r0);sf.WriteStri ng(strLi ne);for (int i = 0; i m_iUnknowPointCount; i+) _m_pUnknowPointi.dMx = rO*sqrt(Qxx(2 * i, 2 * i);m_pU nkno wPoi nti.dMy = r0*sqrt(Qxx(2 * i+1,2 * i+1);m_pU nkno wPoi nti.dMk=sqrt(m_pU nkno wPoi nti.dMx*m_pU nkno wPoi nti.dMx+m_pU nkn owPoi nti.dMy*m_pU nkno wPoi n

53、ti.dMy);m_pU nkno wPo in ti.dQ=ata n(2*Qxx(2*i,2*i+1)/(Qxx(2*i,2*i)-Qxx(2*i+1,2*i+1) / 2.0;m_pU nkno wPoi nti.dE = rO*sqrt(Qxx(2 * i, 2 * i) + Qxx(2 * i, 2* i + 1)*ta n(m_pU nkn owPoi nti.dQ);m_pU nkno wPoi nti.dF = rO*sqrt(Qxx(2 * i, 2 * i) + Qxx(2 * i, 2* i + 1)*ta n(m_pU nkno wPoi nti.dQ+PI/2);/*

54、double K = sqrt(Qxx(2 * i, 2 * i) - Qxx(2 * i + 1,2 * i +1)*(Qxx(2 * i, 2 * i) - Qxx(2 * i + 1,2 * i + 1)+ 4 * Qxx(2 * i, 2 * i + 1)*Qxx(2 * i, 2 * i + 1);double Qe = (Qxx(2 * i, 2 * i) + Qxx(2 * i, 2 * i + 1) + K)/2;Idouble Qf = (Qxx(2 * i, 2 * i) + Qxx(2 * i, 2 * i + 1) -K) / 2;m_pU nkn owPoi nti.dE = rO*sqrt(Qe);m_pU nkn owPoi nti.dF = rO*sqrt(Qf);m_pUnknowPointi.dQ = atan(Qe - Qxx(2 * i, 2 * i) / Qxx(2 * i,2 * i + 1);*/if (m_pUnknowPointi.dQ O)m_pU nkno wPoi nti.dQ += PI; _

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

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

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


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