还剩25页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
设计二导线网平差程序的设计与实现
一、设计目的立足于”数据构造与测绘软件开发”这一课程的课堂教学及其实验课程设计,为着实提高学生基于计算机辅助的方式切实解决工程实际问题的动手能力,通过本实习,一方面,使学生深入了解课堂所学知识,另一方面,通过实践掌握测绘行业软件设计与开发的根本方法,深刻掌握矩阵运算、曲线/曲面拟合的数值解法,掌握不同类型的典型测绘软件设计方法,使得学生初步具备编写测绘软件常用算法的能力以及开发中小规模测绘专业软件的能力=
16.0y1SQnmmA、B、C、D、E、F点的坐标〔无误差〕,如下表表1点数据S点号Xm YmA
5256.
9534520.068B
5163.
7524281.277C
3659.
3713621.210D
4119.
8793891.607E
4581.
1505345.292F
4851.
5545316.953表2角度观测值编号角度观测值〔°〃〕编号角度观测值〔°〃〕1163450491691030264583710982204325018111194535041035734121111423583080513792018625854181426806047249131715180411882073234161032308表3边长观测值编号边长观测值〔m〕编号边长观测值〔m〕总之,在这次课程设计中我不但过了比拟充实的一周,还收获了不少知识我或多或少明白,编程是一个循序渐迸的过程,我想真的能够在这方面有所突破,就更要花时间多花工夫
2.遇到的问题
六、附录〔完整代码〕
1.平面控制网平差类的设计在头文件PlaneNetAdjust.h下米i nc1udeiostream米includeMatrix.hnusing namespace std;struct XYint Index;doub1e X;double Y;};struct BianchangstringstartPoint;string endPoint;doub1e Len;;struct Guancejiao{intIndex;string Cezhan;string Huozhan;string Qianzhan;double Guancezhi;;class CPlaneNetAdjust{public:CP1aneNetAd justvo id;〜CPlaneNetAdjustvoid;void GetdataO;〃获取数据void Printdata;〃数据显示void outdataO;〃数据输出CMatrix P;〃计算权阵CMatrix L;//l的计算CMatrix B;〃计算误差系数矩阵CMatrix Q;〃计算协因数阵CMatrix XYJS;//计算近似坐标CMatrix dx;〃参数平差值CMatrix V;〃残差计算void ErrorEllipse;〃误差椭圆doub1e pute_T12int kl,int k2;protected:doub1e dms_raddouble a;doub1e rad_dmsdouble a;int GetDianhaostringdianming;string GetDiamingint dianhao;double Getsl2int kl,int k2;doub1e GetAint kl,int k2,int k3;doub1e GetT12int kl,int k2;int Lnumber;int Snumber;int Tnumber;int Pnumber;int knPnumber;double Cjwucha;doub1e Bcbi1iwucha,Bcgudingwucha;XY米xy;Guancejiao米guance jiao;Bianchang*b ianchang;CMatrix_XYJS;CMatrix_Q;CMatrix_B;CMatrix_P;CMatrix_L;CMatrix_dx;string米Pname;int米start;int*end;int*cezhan;int*huoshi;int*qianshi;};
2.平面控制网类的实现在文件PlaneNetAdjust.cpp下米include stdafx.h米include PlaneNetAdjust.hn求i nc1udefstream米i nc1udeiostream*includecctype米include iomanipusingnamespace std;CP1aneNetAdjust::CP1aneNetAdjustvoid{Lnumber=0;Snumber=0;Tnumber=0;Pnumber=0;knPnumber=O;CP1aneNetAdj ust::〜CP1aneNetAdjustvoid{delete[]Pname;delete[Jxy;delete[]guancejiao;delete[]bianchang;delete[]start;delete[Jend;doub1e CPIaneNetAdjust::dms_raddouble a//提取角度值的符号double sign=a
0.0-
1.0:
1.0;a=fabsa;〃提取角度值的整度int d=inta+
0.00001/
10000.0;a二a-d米
10000.0;ifa
0.0{d=d-l;a=a+10000;}〃提取角度值的整分及秒值int m=inta+
0.00001/
100.0;a=a-m*100;ifa
0.0{m=m-l;a=a+
100.0;}a=sign米d*
3600.0+m*
60.0+a/
206264.3;return a;//将角度的弧度值化为度分秒连写的角度〔double型〕doub1e CPlaneNetAdjust::rad_dmsdoublea{a=a*
206264.3;doub1c sign=a
0.0n-
1.0:
1.0;a=fabsa;intd=inta/
3600.0+
0.0000001;a=a-d*
3600.0;ifa
0.0{d=d-l;a=a+
3600.0;}int m=inta/
60.0+
0.0001;a=a-m*
60.0;ifa
0.0{m=m-l;a=a+
60.0;}a=d*
10000.0+m米
100.0+a;return a米sign;}void CPlaneNetAdjust::Getdatastring file=”;if streaminFile;cout«endl;cout请输入文件的位置和文件名H«endl;cin»f ile;cout«endl;inFile.openfile ios::in;if!inFile cout不能翻开endl;exitl;}inFile»Lnumber;inFi le»Pnumber;inFil e»knPnumber;inFile»Snumber;inFi le»Tnumber;inFi le»Cjwucha»Bcbi1iwucha»Bcgudingwucha;xy=new XY[Pnumber];Pname=new string[Pnumber];forint i=0;iPnumber;i++inFile»Pname[i];inFile»xy[i].X;inFile»xy[i].Y;xy[i].Index=i;bianchang=new Bi anchang[Snumber];forint i=0;iSnumber;i++{inFile»bianchang[i].startPoint;inFile»bianchang[i].endPoint;inFilc»bianchang[i].Lcn;}start=new int[Snumber];end=new int[Snumber];forint i=0;iSnumber;i++start[i]=GetDianhaobianchang[i].startPoint;end[i]=GetDianhaobianchang[i].endPoint;}guancejiao二new Guancejiao[Tnumber];doub1e*dms=new double[Tnumber];forint i=0;iTnumber;i++{inFile»guancejiao[i].Cezhan;inFile»guancejiao[i].Huozhan;inFile»guancejiao[i].Qianzhan;inFile»dms[i];guancejiao[i].Guancezhi=dms_raddms[ij;guancejiao[i].Index=i;}cezhan=new int[Tnumber];huoshi=new int[Tnumber];qianshi=new int[Tnumber];forint i=0;inumber;i++cezhan[i]=GetDianhaoguancejiao[i].Cezhan;huoshi[i]=GetDianhaoguancejiao[i].Huozhan;qianshi[i]=GetDianhaoguance jiao[i].Qianzhan;cout总点数-H«Pnumber«,,边长观测数-H«Snumber«,角度观测数:H«Tnumber«endl;//cout«n测角中误差:n«Cjwucha«H测边固定误差n«Bcgudingwucha«n测边比例误差-n«Bcbiliwucha«endl«endl;cout«endl;cout点的坐标〔未知点坐标用0表示〕endl;cout“点号点名X”Yn«endl;cout«setprecision3«setiosflags ios::fixed;forint i=0;iPnumber;i++cout«i«n n«Pname[i]”n«xy[i].X«nn«xy[i].Y«endl;cout边长观测*«endl;cout«n起点“终点”“观测值endl;forint i=0;iSnumbcr;i++cout«bianchang[i].startPoint«n n«bianchang[i].endPoint«n n«bi anchang[i].Len«end1;cout«n角度观测值:H«endl;cout“测站“后视观测值“endl;forint i=0;iTnumber;i++cout«setprecision4«setiosflags ios::fixed;cout«guancejiao[i].Cezhan«nn«guancejiao[i].Huozhan«!«guancejiao[i].Qianzhan«H,f«dms[i]«end1;int CP1aneNetAdjust::GetDianhaostring dianmingforint i=0;iPnumber;i++{ifPname[i]==dianming{return i;return-1;string CPlaneNetAdjust::GetDiamingint dianhaoreturnPname[d ianhao];doub1e CPIaneNetAdjust::Getsl2int kl,int k2{forint i=0;iSnumber;i++ifkl==start[i]k2==end[i]{return bianchang[i].Len;ifk2==start[i]kl==end[i]{return bianchang[i].Len;}return-1;//找不到符合条件的囱5返回负值}doub1e CPlaneNetAdjust::GetAint kl,int k2,int k3{forint i=0;iTnumber;i++ifkl==cezhan[i]k2=二huoshi[i]k3=二qianshi[i]return guancejiao[i].Guancezhi;ifkl==cezhan[i]k3=二huoshi[i]k2=二qianshi[i]|return guancejiao[i].Guancezhi;}return-
1.0;//找不到符合条件的角返回负值CMatrix CPlaneNetAdjust::P CMatrix_PLnumber,Lnumber;forint i=0;iSnumber;i++{doub1etemp二temp=Cjwucha*Cjwucha/1*sqrtbianchang[i].Len/1*sqrtbianchan g[i].Len;_P.setValuei,i,temp;forint i=Snumber;iLnumber;i++{_P.setValuei,i,Cjwucha*Cjwucha/Cjwucha*Cjwucha;}return_P;doub1e CPlaneNetAdjust::GetT12int kl,int k2{const doub1e Pi=
3.1415926;doub1e dx=xy[k2].X-xy[kl].X;double dy=xy[k2].Y-xy[kl].Y;doub1e T=atan2dy,dx;ifT0T=T+
2.0*Pi;}return T;}CMatrix CPlaneNetAdjust::XYJS{CMatrix_XYJSPnumber,2;doub1e T12;forint i=0;iTnumber;i++int kl=cezhan[i];doub1e xl=xy[klL X;doub1e yl=xy[kl].Y;ifxl=0{continue;int k2=huoshi[i];int k3=qianshi[i];ifxy[k2].X0xy[k2].Y0T12=GetT12kl,k2;doub1e sl2=Getsl2kl,k2;doub1e sl3=Getsl2kl,k3;doub1e T13=T12+guance ji ao[i].Guancezhi;double dx二sl3米cosT13;doub1e dy=sl3*sinT13;xy[k3].X=xy[kl].X+dx;xy[k3].Y=xy[kl].Y+dy;forint i=0;KPnumber;i++doub1e tempi=xy[i].X;double temp2=xy[i].Y;_XYJS.setValuei,0,tempi;_XYJS.setValuei,1,temp2;return_XYJS;}CMatrix CPlaneNetAdjust::B{CMatrix_B1Lnumber,Pnumber^2;doub1e a;doub1e b;double c;double d;doub1e m;doub1c n;double ml;double nl;forint i=0;iSnumber;i++int kl=start[i int k2=end[i];doub1e dx=xy[k2].X-xy[klJ.X;doub1e dy=xy[k2].Y-xy[klJ.Y;a=-dx/Getsl2kl,k2;b=-dy/Getsl2kl,k2;if kKknPnumber_Bl.setValuei,2*kl,0;_Bl.setValuei,2*kl+l,0;else_B1,setValuei,2米kl,a;_Bl.setValuei,2*kl+l b;5ifk2knPnumber{_Bl.setValuei,2*k2,0;_Bl.setValuei,2*k2+l,0;else{_B
1.setValuei,2米k2,-a;_Bl.setValuei,2*k2+l,-b;forint i=0;iTnumber;i++const doub1e p=
206.265;int kl=cezhan[i];int k3=huoshi[i];int k2=qianshi[i];doub1e dxl2=xy[k2].X-xy[kl].X;doub1e dyl2=xy[k2].Y-xy[kl].Y;double dxl3=xy[k3].X-xy[kl].X;doub1e dyl3=xy[k3].Y-xy[kl].Y;c二p*dxl3/Getsl2kl,k3/Getsl2kl,k3-p*dxl2/Getsl2kl,k2/Getsl2kl,k2;c二一c;d=-p*dyl3/Getsl2kl,k3/Getsl2kl,k3+p*dyl2/Getsl2kl,k2/Getsl2kl,k2;d二一d;m=-p*dyl3/Getsl2kl,k3/Getsl2kl,k3;m=-m;n=p*dxl3/Getsl2kl,k3/Getsl2kl,k3;n=-n;ml=p*dyl2/Getsl2kl,k2/Getsl2kl,k2;nl=-p*dxl2/Getsl2kl,k2/Getsl2kl,k2;nl=-nl;if kKknPnumber{_B
1.setValuei+Snumber,2*kl,0;_B
1.setValuei+Snumber,2*kl+l,0;else ifk1=knPnumber{_B
1.setVa1uei+Snumber,2米kl,c;_B
1.setVa1uei+Snumber,2米kl+1,d;}ifk2knPnumber{_B1,setValuei+Snumber,2米k2,0;_B
1.setValuei+Snumber,2求k2+l,0;else ifk2=knPnumber_B
1.setVa1uei+Snumber,2米k2,ml;_B
1.setVa1uei+Snumber,2米k2+l,nl;ifk3knPnumber{_B
1.setVa1uei+Snumber,2*k3,0;_B
1.setVa1uei+Snumber,2米k3+l,0;else ifk3=knPnumber{_B
1.setVa1uei+Snumber,2米k3,m;_B
1.setVa1uei+Snumber,2米k3+l,n;}CMatrix_BLnumber,2*Pnumber-knPnumber;forint i=0;i_Bl.getRowO;i++
1238.
6198241.5602170,
7599224.
9963217.
86910261.8264318,
17311279.
8405245.
63512346.
4436215.
51413312.
1097273.
82914197.637试编程实现该导线网的平差,给出计算结果,并对其精度进展评价
三、关键问题描述
3.1未知点近似坐标计算平面控制网迸展平差计算时需要计算未知点的近似坐标
1.坐标计算公式
1、2点的坐标,并观测了1-
2、1-3的夹囱,根据这些数据可以求出3号点坐标根据
1、2两点的坐标,可以反算出
1、2方向的方位角T12,3号点的坐标为玉+S]3COS7]+a[为二+5sin7]+«2132式子中S13为观测边长,二为观测角度
2.计算流程从读入的数据循环计算未知点的坐标,已计算出的坐标当做坐标的点处理参加下次计算,以此类推,逐步计算出未知点的坐标
3.实现算法CMatrix CPlaneNetAdjust::XYJSCMatrix_XYJSPnumber,2;double T12;forint i=0;iTnumber;i++int kl=cezhan[i];double xl=xy[kl].X;double yl=xy[kl].Y;ifxl=0continue;int k2=huoshi[i];int k3=qianshi[i];ifxy[k2].X0xy[k2].Y0T12=GetT12kl,k2;doub1esl2=Getsl2kl,k2;doub1esl3=Getsl2kl,k3;doub1eT13=T12+guance ji ao[i].Guancezhi;doub1edx=sl3*cosT13;doubledy=sl3*sinT13;xy[k3].X=xy[kl].X+dx;xy[k3].Y=xy[kl].Y+dy;forint i=0;iPnumber;i++doub1e temp=_Bl.getValuei,j;_B.setValuei,j-2*knPnumber,temp;return_B;CMatrix CPlaneNetAdjust::LCMatrix_LLnumber,1;double1;doub1es;doub1e sO;forint i=0;iSnumber;i++int kl=start[i];int k2=end[i];s=Getsl2kl,k2;doub1e dx=xy[k2].X-xy[kl].X;doub1e dy=xy[k2].Y-xy[kl].Y;sO=sqrtdx米dx+dy米dy;l=s-sO;_L.setValuei,0,1*1000;//cout«l«endl;forint i=0;iTnumber;i++const doub1e pi=2*
3.1415926;doub1e A12;doub1e A13;double A;int kl=cezhan[i];int k2=huoshi[i];int k3=qianshi[i];A12=GetT12kl,k2;A13=GetT12kl,k3;A=GetAkl,k2,k3;1-A13-A12;ifl0{l=pi+l;ifl=pi1二1-pi;1=1-A;//cout«rad_dmsA12«n n«rad_dmsA13«n H«rad_dmsA«n n«rad_dms1«endl;_L.setVa1uei+Snumber,0,rad_dmsl;return_L;}CMatrix CPlaneNetAdjust::Q{CMatrix N;N二B.transpose.operator米P.operator米B;return N.inverseO;CMatrix CPlaneNetAdjust::dx CMatrixW;W二B.transposeC.operator米P.operator米L;_dx=Q.operator米W;return Q.operator米W.operator米
0.OOlf;}CMatrix CPlaneNetAdjust::V{CMatrix F;F=B.operator*dx-L;return F;}void CPlaneNetAdjust::ErrorEllipse{CMatrix_Q=Q;const doublePAI=
3.;doub1e m2=C j wucha*C jwucha;cout«end1«end1«n====点位误差椭圆====!,«endl;cou t”点名点位误差椭圆长半轴椭圆短半轴长轴方位角H«end1;forint i=0;iPnumber-knPnumber;i++doub1e mx2=_Q.getValue2米i,2米i米m2;//x坐标中误差的平方doub1e my2=_Q.getValue2*i+l,2*i+l^m2;//y坐标中误差的平方doub1c mxy=_Q.gctValuc2*i,2*i+l*m2;//xy坐标的协方差doub1e K=sqrtmx2-my2*mx2-my2+
4.O*mxy*mxy;doub1e E=sqrt
0.5*mx2+my2+K;〃长轴doub1e F=sqrt
0.5*mx2+my2-K;〃短轴double A;//误差椭圆长轴的方位有iffabsmxyl.0e-14//mxy=0ifmx2my2A=
0.0;else A=
0.51PAi;丰else//mxy0{A=atan E*E-mx2/mxy;ifA
0.0A+=PAI;cout«endl;cout«H n«Pname[i+knPnumber]«nn«Cjwucha*sqrt_Q.getValue2*i,2*i+_Q.getValue2*i+l,2*i+1«n n«E«n n«F«nn«rad_dmsA;void CPlaneNetAdjust::Printdata_dx=dx;_XYJS=XYJS;cout总点数-H«Pnumber«,,边长观测数-H«Snumber«,,角度观测数:n«Tnumber«endl;cout«n测角中误差:n«Cjwucha«n测边固定误差n«Bcgudingwucha«n测边比例误差-n«Bcbiliwucha«endl«endl;Xn«n Yn«endl;COllt“点号点名forinti=0;KPnumber;i++cout«i«n H«Pname[i«H H«xy[i].X«n«xy[i].Y«endl;cout边长观测endl;cout起点终点“观测值endl;forint i=0;iSnumber;i++{cout«bianchang[i].startPoint«n n«bianchang[i].n«bianchang[i].endPoint«nLen«endl;cout«H角度观测值:n«endl;“测站后视COllt前视观测值cndl;forint i=0;iTnumber;i++cout«guancejiao[i].Cezhan«nn«guancejiao[i].Huozhan«ncout点的坐标〔未知点坐标用0表示〕:H«endl;«guance jiaofij.Qi anzhan*«rad_dmsguancejiao[i].Guancezhi«endl;cout«!,近似坐标•n«endl;cout«“点名””Xn«H Yn«endl;forint i=0;iPnumber;i++{cout«H n«Pname[i]xy[i].X«nn«xy[i].Y«endl;cout«n坐标平差结果endl;cout«n点名n«n Xn«n Yn«end1;cout«setprecision4«setiosflags ios::fixed;forint i=0;iknPnumber;i++cout«Pname[i]n«xy[i].X«nn«xy[i].Y«endl;forint i=knPnumber;iPnumber;i++cout«Pname[i]«n n«xy[iL X+_dx.getValuei-knPnumber,0«nn«xy[iJ.Y+_dx.getVa1uei-knPnumber+1,0«endl;cout«H误差桶圆参数”endl;ErrorEllipse;}void CPlaneNetAdjust::outdata//GetdataO;CMatrix_Q二Q;CMatrix_dx=dx;CMatrix_B=B;CMatrix_P=P;string file=C:\\导线网平差.txt;ofstream outfile;outfile.openfile,ios::out;outfile总点数Pnumber边长观测数-n«Snumber«H角度观测数H«Tnumber«endl;outfilc«H测角中误差:M«Cjwucha«n测边固定误差H«Bcgudingwucha«n测边比例误差n«Bcbiliwucha«endl«endl;outfile边长观测:H«endl;outfi le«H起点终点”观测值endl;forint i=0;iSnumber;i++outf i1e«bianchang[i].startPoint«n H«bianchang[i].endPoint«n«bianchang[i].Len«endl;outf ile«n角度观测值:n«endl;outf ile«setprecision4«setiosf1ags ios::f ixed;outfile测站后视”前视观测值H«endl;forint i=0;iTnumber;i++{outfile«guancejiao[i].Cezhan«n«guancejiao[i].Huozhan«nit«guance ji ao[i].Qianzhan«nn«rad_dmsguancejiao[i].Guancezhi«endl;outfile”近似坐标n«endl;outfile«H点号”“点名“”Xn«n YH«end1;forint i=0;KPnumber;i++outfile«i«H!«Pname[i]«u u«xy[i].X«Hn«xy[i].Y«endl;outf ile«n坐标平差结果endl;outfile«setprecision4«setiosflags ios::fixed;forint i=0;iknPnumber;i++{outf i1e«Pname[i]n«xy[i].X«nn«xy[i].Y«endl;forint i=knPnumber;iPnumber;i++{outf ile«Pname[i]«*H«xy[i].X+_dx.getValuei-knPnumber,0«nxy[i].Y+_dx.getValuei-knPnumber+l,0«endl;outf i16误差系数矩阵Bn«endl;forint i=0;iLnumber;i++forint j=0;j2*Pnumber-knPnumber;j++outfilc«_B.gctValuci,j«n;}outf ile«endl;outf ile«H权阵Pn«endl;forint i=0;iLnumber;i++forint j=0;jLnumber;j++{outf i1e«_P.getVa1uei,j«n outf ile«endl;outfile«n协因数矩阵Qn«end1;forint i=0;i_Q.getRowO;i++forint j=0;j_Q.getColumnO;j++outf ile«_Q.getValuei,j;outf ile«endl;outfile«n误差椭圆参数”endl;const doublePAI=
3.;doub1e m2=C jwucha^C jwucha;outfile«endl«endl«n====点位误差椭圆====n«endl;outfile«n点名点位误差桶圆长半轴椭圆短半轴长轴方位角H«endl;forint i=0;iPnumber-knPnumber;i++double mx2=_Q,getValue2*i,2*i*m2;doub1e my2=_Q.getValue2*i+l,2米i+1米m2;doub1e mxy=_Q.getValue2*i,2*i+1米m2;doub1e K=sqrtmx2-my2*mx2-my2+
4.0米mxy米mxy;doub1e E=sqrt
0.5*mx2+my2+K;double F=sqrt
0.5*mx2+my2-K;doub1e A;iffabsmxyl.Oe-14{ifmx2my2A=
0.0;else A=
0.5米PAI;else A=atan E*E-mx2/mxy;}ifA
0.0A+=PAI;outf ile«endl;outf ile«nn«Cjwucha*sqrt_Q.getValue2*i,2*i+_Q.getValue2*i+l,2*i+1«H n«E«H f,«F«HH«rad_dmsA;}
3.矩阵类的设计与水准网的一致
4.主函数,在导线网平差.cpp文件下*include stdafx.h*includeMatrix.hn求includePlaneNetAdjust,hint_tmainint argc,_TCHAR*argv[]{CPlaneNetAdjust Net;Net.GetdataO;CMatrix P,JS,Q,1,B,dx,v;JS二Net.XYJSO;cout«n近似坐标n«endl;cout«JS;P二Net.PO;B-Net.B;dx=Net.dx;v二Net.V;1二Net.L;Net.outdataO;Net.ErrorEllipse;cout«endl;cout平差结果已经保存C:\\导线网平差.txt中!H«endl;return0;double templ=xy[i].X;doub1e temp2=xy[i],Y;_XYJS.setValuei,0,tempi;_XYJS.setValuei,1,temp2;return_XYJS;
3.2误差方程列立
1.理论分析/A平面控制网的误差方程都是非线性方程,必须引入参数近似值将误差方程线性化,^0-arctans=而一/+r-疔取其的充分近似值x°,£是微小量,在按台劳公式展开时可以略去二次和二次以上的项,而只取至一次项,于是可对非线性平差值观测方程式线性化,于是有如下的式子对于观测角的改正数有自小、WP^Yjk.p・Yk PN*广bjk飞L厂所+用>=a..jh人力川[p^Yjk.AX%.P^Yjk“ZX%[Li函一面严一所巧一可以+而力一万一超一娟_乙3363+310k力函与2J S%22S%29%akV对于边长观测值的改正数有、△x\k.AKj.X“jk.qO/k,jk_V勺一黄匕•+y/+V,=、、S%=JXX,2+BT2jk jkbjk
2.实现算法如下CMatrix CPlaneNetAdjust::BCMatrix_B1Lnumber,Pnumber*2;double a;double b;double c;double d;double m;double n;double ml;double nl;forint i=0;iSnumber;i++27!\XA7JO-LZ-int kl二start]i];int k2=end[i];doub1e dx=xy[k2].X-xy[kl].X;doub1e dy=xy[k2],Y-xy[kl].Y;a=-dx/Getsl2kl,k2;b=-dy/Getsl2kl,k2;ifkKknPnumber{_Bl.setValuei,2*kl,0;_Bl.setValuei,2*kl+l,0;else_B
1.setValuei,2*kl,a;_Bl.setValuei,2*kl+l,b;ifk2knPnumber_Bl.setValuei,2*k2,0;_Bl.setValuei,2*k2+l,0;else{_B
1.setValuei,2*k2,-a;_Bl.setValuei,2*k2+l,-b;}forint i=0;iTnumber;i++const doub1e p=
206.265;int kl=cezhan[i];int k3=huoshi[i];int k2=qianshi[i];doub1e dxl2=xy[k2L X-xy[kl].X;doub1e dyl2=xy[k2].Y-xy[kl].Y;doub1e dxl3=xy[k3].X-xy[kl].X;double dyl3=xy[k3].Y-xy[kl].Y;c=p*dxl3/Getsl2kl,k3/Getsl2kl,k3-p*dxl2/Getsl2kl,k2/Getsl2kl,k2;c=-c;d=-p*dyl3/Getsl2kl,k3/Getsl2kl,k3+p*dyl2/Getsl2kl,k2/Getsl2kl,k2;d二-d;m=-p*dyl3/Getsl2kl,k3/Getsl2kl,k3;m=-m;n=p*dxl3/Getsl2kl,k3/Getsl2kl,k3;n=-n;ml=p*dyl2/Getsl2kl,k2/Getsl2kl,k2;nl=-p*dxl2/Getsl2kl,k2/Getsl2kl,k2;nl=-nl;if kKknPnumber_B
1.setValuei+Snumber,2*kl,0;_B
1.setVa1uei+Snumber,2*kl+l,0;}else ifkl=knPnumber_B
1.setValuei+Snumber,2*kl,c;_B
1.setVa1uei+Snumber,2米kl+1,d;ifk2knPnumber_B
1.setVa1uei+Snumber,2*k2,0;_B
1.setVa1uei+Snumber,2*k2+l,0;else ifk2=knPnumber_B
1.setValuei+Snumber,2*k2,ml;_B
1.setValuei+Snumber,2粒2+1,nl;}ifk3knPnumber{_B
1.setValuei+Snumber,2*k3,0;_B
1.setVa1uei+Snumber,2*k3+l,0;else ifk3=knPnumber{_B
1.setVa1ueifSnumber,2米k3,m;_B
1.setVa1uei+Snumber,2宗k3+l,n;}CMatrix_BLnumber,2*Pnumber-knPnumber;forint i=0;i_Bl.getRowO;i++forint j=2*knPnumber;j2*Pnumber;j++{double temp=_Bl.getValuei,j;_B.setValuei,j-2*knPnumber,temp;return_B;}
3.3法方程构建与解算
1.理论分析误差方程系数V Bx-1构成法方程BTPBX-BTP1=
02.实现代码
①计算LCMatrix CPlaneNetAdjust::LCMatrix_LLnumber,1;double1;double s;double sO;forint i=0;iSnumber;i++int kl=start]i];int k2=end[i];s=Getsl2kl,k2;double dx=xy[k2].X-xy[kl].X;double dy=xy[k2].Y-xy[kl].Y;sO=sqrtdx*dx+dy*dy;1二s-sO;_L.setValuei,0,1*1000;//cout«l«endl;}forCint i=0;iTnumber;i++{const doub1e pi=2*
3.1415926;doub1e A12;doub1e A13;double A;int kl=cezhan[i];intk2=huoshi[i];intk3=qianshi[i];A12=GetT12kl,k2;A13=GetT12kl,k3;A=GetAkl,k2,k3;1=A13-A12;{l=pi+l;}ifl=pi{pi;1=1-A;//cout«rad_dms A12«H n«rad_dms A13«H«rad_dmsA«H«rad_dms1«endl;_L.setValuei+Snumber,0,rad_dmsl;return_L;}
②计算权阵PCMatrix CPlaneNetAdjust::PCMatrix_PLnumber,Lnumber;forint i=0;iSnumber;i++doub1etemp二temp=Cjwucha*Cjwucha/1*sqrtbianchang[i].Len/1*sqrtbianchang[i].Len_P.setValuei,i,temp;forinti=Snumber;iLnumber;i++_P.setValuei,i,Cjwucha*Cjwucha/Cjwucha^Cjwucha;return_P;
3.4精度估计
1.单位权中误差间接平差与条件平差虽采用了不同的函数模型,但它们是在一样的最小乘原理下迸展的,所以两法的平差结果总是相等的,这是因为在满足条饼行海,浅《唯rr确定的,故平差值不因方法不同而异L=^+V°r单位权方差的估值计算式仍然蜀余以其自由度,即ylpvvT PVVT PV-2b二7r n—t
2.协因数阵在间接平差中,线F%PQPBN;;=
3.误差椭圆参数点位误差0»=b;:+y端=说德+r xr y椭圆参数EE2=S O^XXCOSVE+QyySil+QxySin即E椭圆参数FF2=%Q2+QyySin”+Q sin2^COS TFXX xyl;
4.实现代码voidCP1aneNetAdjust::ErrorE11ipseCMatrix_Q=Q;constdoublePAI=
3.;doub1em2=C jwucha%jwucha;cout«end1«end1«n====点位误差椭圆====H«endl;cout«H点名点位误差桶圆长半轴椭圆短半轴长轴方位角H«end1;forinti=0;iPnumber-knPnumber;i++{doublemx2=_Q.getValue2*i,2*i02;〃x坐标中误差的平方doublemy2=_Q.getValue2*i+l,2*i+1米m2;〃y坐标中误差的平方doublemxy=_Q.getValue2*i,2*i+l*m2;//xy坐标的协方差doubleK=sqrtmx2-my2*mx2-my2+
4.0*mxy*mxydoub1eE=sqrt
0.5米mx2+my2+K;〃长轴doubleF=sqrt
0.5*mx2+my2-K;〃短轴doubleA;//误差椭圆长轴的方位角.iffabsmxyl.Oe-14//mxy=0{ifmx2my2A=
0.0;elseA=
0.51PAi;丰else//mxy0{A=atanE米E-mx2/mxy;ifA
0.0A+=PAI;cout«endl;cout«n n«Pname[i+knPnumber]«nn«Cjwucha*sqrt_Q.getValue2*i,2*i+_Q.getValue2*i+1,2*i+1«n n«E«n H«F«nn«rad_dmsA
5.5程序设计流程图近似坐标计算▼误差方程列立平差值计算精度评定
四、算法运行结果与分析c:\Winaows\system5Z\cmci.exe角度观测值;1后视前视观测值B A
21634504.00002B
3645837.
00003242501811.
00004351035734.0000D C
6830805.00006D
72585418.
00007682491317.
00008792073234.
000098101691030.
00001095982204.
00005104945350.0000F E
131111423.000013F
14792018.
00001413152680604.
0000151451804118.
0000515101032308.0000近似坐标
5256.
95304520.
06805163.
75204281.
27703659.
37103621.
21004119.
87903891.
60704581.
15005345.
29204851.
55405316.
95305018.
25954092.
14494939.
65734243.
73754723.
84834214.
39104606.
21364510.
16484218.
04173666.
43904428.
47973712.
93764468.
09693983.
88564388.
56004211.
97574355.
52314434.
61934925.
19285046.
97574579.
86345019.
22054594.
54554707.4570
五、小结
1.实习感受通过这次课程设计,我又对整本书有了一个更深的理解其实课程设计就是将我们所学的理论知识应用于实践的过程,在这一过程中避一步掌握测量平差的根本原理和根本公式,并熟悉测量数据欠理的根本技能和计算方法这门课程与计算机程序完美地结合这便要求我们在原有的解题思路中参加C++语言程序,并让它来帮助我们解决矩阵的复杂运算既然用到了程序,我们就必须保证其运算的简洁性、正确性,尤其是在编写过程中要认真检查,为程序顺利运行打下根底另外在各个子程序调用过程中,我们要充分考虑其顺序性并反复调试,以便得到理想结果尽管在这次课程设计中遇到了很多困难,但我却得到了不少收获,并培养了自己正确应用公式、综合分析和解决问题的能力,同时也为今后步入社会打下了一定的根底另外,我们还要学会综合利用自身所学的知识,并将它们联系起来帮助自己有效地解决实际中的问题。
个人认证
优秀文档
获得点赞 0