![数据结构课程设计_导线网平差程序的设计与实现_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/14/10b79fda-af3a-4157-a61b-64a4151e284f/10b79fda-af3a-4157-a61b-64a4151e284f1.gif)
![数据结构课程设计_导线网平差程序的设计与实现_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/14/10b79fda-af3a-4157-a61b-64a4151e284f/10b79fda-af3a-4157-a61b-64a4151e284f2.gif)
![数据结构课程设计_导线网平差程序的设计与实现_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/14/10b79fda-af3a-4157-a61b-64a4151e284f/10b79fda-af3a-4157-a61b-64a4151e284f3.gif)
![数据结构课程设计_导线网平差程序的设计与实现_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-3/14/10b79fda-af3a-4157-a61b-64a4151e284f/10b79fda-af3a-4157-a61b-64a4151e284f4.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、下载可编辑.专业 .整理 .下载可编辑设计二:导线网平差程序的设计与实现一、设计目的立足于数据结构与测绘软件开发这一课程的课堂教学及其实验课程设计,为着实提高学生基于计算机辅助的方式切实解决工程实际问题的动手能力,通过本实习, 一方面, 使学生深入了解课堂所学知识, 另一方面,通过实践掌握测绘行业软件设计与开发的基本方法,深刻掌握矩阵运算、曲线 / 曲面拟合的数值解法,掌握不同类型的典型测绘软件设计方法,使得学生初步具备编写测绘软件常用算法的能力以及开发中小规模测绘专业软件的能力。二、设计容有导线网如图, 观测了 14 条边长和16 个转折角, 已知测角精度10,测边精度为 S 1.0 S(
2、m)( mm) 。已知 A、B、 C、 D、 E、 F 点的坐标(无误差) ,如下表:表 1已知点数据点号X(m)Y(m)A5256.9534520.068B5163.7524281.277C3659.3713621.210D4119.8793891.607E4581.1505345.292F4851.5545316.953表 2角度观测值编号角度观测值( )编号角度观测值( )116345049169103026458 371098220432501811119453504103573412111142358308 05137920186258541814268060472491317151
3、80411882073234161032308表 3边长观测值.专业 .整理 .下载可编辑编号边长观测值( m)编号边长观测值( m)1238.6198241.5602170.7599224.9963217.86910261.8264318.17311279.8405245.63512346.4436215.51413312.1097273.82914197.637试编程实现该导线网的平差,给出计算结果,并对其精度进行评价。三、关键问题描述3.1未知点近似坐标计算平面控制网进行平差计算时需要计算未知点的近似坐标1. 坐标计算公式1、 2 点的坐标已知,并观测了1-2 、 1-3 的夹角,根据这
4、些数据可以求出3 号点坐标根据 1、 2 两点的坐标,可以反算出1、2 方向的方位角T12,3 号点的坐标为x3x1S13 cos(T12)y3y1S13 sin(T12)式子中 S13 为观测边长,为观测角度2. 计算流程从读入的数据循环计算未知点的坐标,已计算出的坐标当做已知坐标的点处理参加下次计算,以此类推,逐步计算出未知点的坐标3. 实现算法CMatrix CPlaneNetAdjust:XYJS()CMatrix _XYJS(Pnumber,2);double T12;for(int i=0;i0&xyk2.Y0)T12=GetT12(k1,k2);double s12=Gets12
5、(k1,k2);double s13=Gets12(k1,k3);double T13=T12+guancejiaoi.Guancezhi;double dx=s13*cos(T13);double dy=s13*sin(T13);xyk3.X=xyk1.X+dx;xyk3.Y=xyk1.Y+dy;for(int i=0;iPnumber;i+).专业 .整理 .下载可编辑double temp1=xyi.X;double temp2=xyi.Y;_XYJS.setValue(i,0,temp1);_XYJS.setValue(i,1,temp2);return _XYJS;3.2误差方程列立
6、1. 理论分析平面控制网的误差方程都是非线性方程,必须引入参数近似值将误差方程线性化,?YBYA?arctanYDYDL1?arctan?DBDAXBXAXDXDS?XA2?2XDYDYA?0?取 X 的充分近似值X, x 是微小量,在按台劳公式展开时可以略去二次和二次以上的项,而只取至一次项,于是可对非线性平差值观测方程式线性化,于是有如下的式子对于观测角的改正数有?Y jk0?X 0jk?Yjk0?Y jk0?jk( S0jk ) 2x j(S0jk )2y j( S0jk ) 2xk( S0jk )2yk?Y jh0?X 0jh?Y jh0?Y jh0?jh( S0jh ) 2x j(S
7、0jh )2y j( S0jh ) 2xh(S0jh )2yhvi Y jk0? X 0jk? Y jk0? X 0jk?02x j0)2y j02xk02 yk(S jk )( Sjk(S jk )(S jk ) Yjh0? X0jh? Y jh0? X 0jh?00x jy jxh( jhjkLi )( S0jh )2( S 0jh ) 2(S0jh )2( S0jh )2yh对于边长观测值的改正数有X 0Y 0X0Y00v ijkx?jjky?jjkx?kjky?kl iSjk0Sjk0Sjk0Sjk0l iLiS jkS0jk( X k0X 0j) 2(Yk0Yj0 )22. 实现算法
8、如下:CMatrix CPlaneNetAdjust:B()CMatrix _B1(Lnumber,Pnumber*2);double a;double b;double c;double d;double m;double n;double m1;double n1;for(int i=0;iSnumber;i+).专业 .整理 .下载可编辑int k1=starti;int k2=endi;double dx=xyk2.X-xyk1.X;double dy=xyk2.Y-xyk1.Y;a=-dx/Gets12(k1,k2);b=-dy/Gets12(k1,k2);if(k1knPnumbe
9、r)_B1.setValue(i,2*k1,0);_B1.setValue(i,2*k1+1,0);else_B1.setValue(i,2*k1,a);_B1.setValue(i,2*k1+1,b);if(k2knPnumber)_B1.setValue(i,2*k2,0);_B1.setValue(i,2*k2+1,0);else_B1.setValue(i,2*k2,-a);_B1.setValue(i,2*k2+1,-b);for(int i=0;iTnumber;i+)const double p=206.265;int k1=cezhani;int k3=huoshii;int
10、k2=qianshii;double dx12=xyk2.X-xyk1.X;double dy12=xyk2.Y-xyk1.Y;double dx13=xyk3.X-xyk1.X;double dy13=xyk3.Y-xyk1.Y;c=(p*dx13/Gets12(k1,k3)/Gets12(k1,k3)-p*dx12/Gets12(k1,k2)/Gets12(k1,k2); c=-c;d=-p*dy13/Gets12(k1,k3)/Gets12(k1,k3)+p*dy12/Gets12(k1,k2)/Gets12(k1,k2); d=-d;m=-p*dy13/Gets12(k1,k3)/Ge
11、ts12(k1,k3);m=-m;n=p*dx13/Gets12(k1,k3)/Gets12(k1,k3);n=-n;m1=p*dy12/Gets12(k1,k2)/Gets12(k1,k2);m1=-m1;n1=-p*dx12/Gets12(k1,k2)/Gets12(k1,k2);.专业 .整理 .下载可编辑n1=-n1;if(k1=knPnumber)_B1.setValue(i+Snumber,2*k1,c);_B1.setValue(i+Snumber,2*k1+1,d);if(k2=knPnumber)_B1.setValue(i+Snumber,2*k2,m1);_B1.setV
12、alue(i+Snumber,2*k2+1,n1);if(k3=knPnumber)_B1.setValue(i+Snumber,2*k3,m);_B1.setValue(i+Snumber,2*k3+1,n);CMatrix _B(Lnumber,2*(Pnumber-knPnumber);for(int i=0;i_B1.getRow();i+)for(int j=2*knPnumber;j2*Pnumber;j+)double temp=_B1.getValue(i,j);_B.setValue(i,(j-2*knPnumber),temp);return _B;3.3法方程构建与解算1
13、. 理论分析误差方程系数VBx?l构成法方程BT PBx?BT Pl02. 实现代码计算 L.专业 .整理 .下载可编辑CMatrix CPlaneNetAdjust:L()CMatrix _L(Lnumber,1);double l;double s;double s0;for(int i=0;iSnumber;i+)int k1=starti;int k2=endi;s=Gets12(k1,k2);double dx=xyk2.X-xyk1.X;double dy=xyk2.Y-xyk1.Y;s0=sqrt(dx*dx+dy*dy);l=s-s0;_L.setValue(i,0,l*100
14、0);/coutlendl;for(int i=0;iTnumber;i+)const double pi=2*3.1415926;double A12;double A13;double A;int k1=cezhani;int k2=huoshii;int k3=qianshii;A12=GetT12(k1,k2);A13=GetT12(k1,k3);A=GetA(k1,k2,k3);l=A13-A12;if(l=pi)l=l-pi;l=l-A;/coutrad_dms(A12)rad_dms(A13)rad_dms(A)rad_dms(l)endl;_L.setValue(i+Snumb
15、er,0,rad_dms(l);return _L;计算权阵PCMatrix CPlaneNetAdjust:P()CMatrix _P(Lnumber,Lnumber);for(int i=0;iSnumber;i+).专业 .整理 .下载可编辑doubletemp=temp=Cjwucha*Cjwucha/(1*sqrt(bianchangi.Len)/(1*sqrt(bianchangi.Len);_P.setValue(i,i,temp);for(int i=Snumber;iLnumber;i+)_P.setValue(i,i,Cjwucha*Cjwucha/(Cjwucha*Cjw
16、ucha);return _P;3.4精度估计1. 单位权中误差间接平差与条件平差虽采用了不同的函数模型,但它们是在相同的最小乘原理下进行的,所以两法的平差结果总是相等的,这是因为在满足V T PV min 条件下的V 是唯一确定?LV不因方法不同而异。的,故平差值 LVT PV单位权方差2的估值?2计算式仍然是除以其自由度,即00?02VTPVVTPVrn t2. 协因数阵在间接平差中, Q3. 误差椭圆参数点位误差? ? Qxx? 进一步有X XQ ? ? Nbb1 BTPQPBNbb1N bb1X XP0 ( Qxx Qyy )0( 11 )222PxPy椭圆参数E2?22Qyysin2
17、Qxysin2E )E0(QxxcosEE椭圆参数 F?222Qyysin2Qxysin2F )F0(QxxcosFF4. 实现代码voidCPlaneNetAdjust:ErrorEllipse()CMatrix_Q=Q();constdoubledoublem2=Cjwucha*Cjwucha;coutendlendl=点位误差椭圆 =endl;cout点名点位误差椭圆长半轴椭圆短半轴长轴方位角 endl;for(inti=0;i(Pnumber-knPnumber);i+)doublemx2=_Q.getValue(2*i,2*i)*m2;/x坐标中误差的平方doublemy2=_Q.g
18、etValue(2*i+1,2*i+1)*m2;/y坐标中误差的平方doublemxy=_Q.getValue(2*i,2*i+1)*m2;/xy坐标的协方差doubleK=sqrt(mx2-my2)*(mx2-my2)+4.0*mxy*mxy);doubleE=sqrt(0.5*(mx2+my2+K);/ 长轴.专业 .整理 .下载可编辑doubleF=sqrt(0.5*(mx2+my2-K);/ 短轴doubleA; / 误差椭圆长轴的方位角if(fabs(mxy)my2)A=0.0;elseA=0.5*PAI;else/ mxy 0A=atan( (E*E-mx2)/mxy);if(A0
19、.0)A+=PAI;coutendl;coutPnamei+knPnumberCjwucha*sqrt(_Q.getValue(2*i,2*i)+_Q.getValue(2*i+1,2*i+1)EFrad_dms(A);3.5程序设计流程图近似坐标计算误差方程列立平差值计算精度评定.专业 .整理 .下载可编辑四、算法运行结果与分析五、小结1. 实习感受通过这次课程设计, 我又对整本书有了一个更深的理解。 其实课程设计就是将我们所学的理论知识应用于实践的过程, 在这一过程中, 进一步掌握测量平差的基本原理和基本公式,并熟悉测量数据处理的基本技能和计算方法。这门课程与计算机程序完美地结合。这便要求
20、我们在原有的解题思路中加入C+语言程序,并让它来帮助我们解决矩阵的复杂运算。既然用到了程序,我们就必须保证其运算的简洁性、正确性, 尤其是在编写过程中要认真检查, 为程序顺利运行打下基础。另外在各个子程序调用过程中,我们要充分考虑其顺序性并反复调试,以便得到理想结果。尽管在这次课程设计中遇到了很多困难,但我却得到了不少收获,并培养了自己正确应用公式、综合分析和解决问题的能力,同时也为今后步入社会打下了一定的基础。另外,我们还要学会综合利用自身所学的知识,并将它们联系起来帮助自己有效地解决实际中的问题。总之,在这次课程设计中我不但过了比较充实的一周,还收获了不少知识。我或多或.专业 .整理 .下
21、载可编辑少明白, 编程是一个循序渐进的过程,我想真的能够在这方面有所突破,就更要花时间多花工夫2. 遇到的问题六、附录(完整代码)1. 平面控制网平差类的设计在头文件 PlaneNetAdjust.h 下#include#includeMatrix.husing namespace std;structXYint Index;double X;double Y;structBianchangstringstartPoint;stringendPoint;doubleLen;structGuancejiaointIndex;string Cezhan;string Huozhan;string
22、Qianzhan;double Guancezhi;class CPlaneNetAdjustpublic:CPlaneNetAdjust(void);CPlaneNetAdjust(void);void Getdata();/获取数据void Printdata();/数据显示void outdata();/数据输出CMatrix P();/计算权阵CMatrix L();/l的计算CMatrix B();/计算误差系数矩阵CMatrix Q();/计算协因数阵CMatrix XYJS();/计算近似坐标CMatrix dx();/参数平差值.专业 .整理 .下载可编辑CMatrix V()
23、;/残差计算void ErrorEllipse();/误差椭圆double Compute_T12(int k1,int k2);protected :double dms_rad(double a);double rad_dms(double a);int GetDianhao(string dianming);string GetDiaming(int dianhao);double Gets12(int k1,int k2);double GetA(int k1,int k2,int k3);double GetT12(int k1,int k2);int Lnumber;int Snu
24、mber;int Tnumber;int Pnumber;int knPnumber;double Cjwucha;double Bcbiliwucha,Bcgudingwucha;XY*xy;Guancejiao *guancejiao;Bianchang*bianchang;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. 平面控制网类的实现在文件 Pla
25、neNetAdjust.cpp下#include stdafx.h#include PlaneNetAdjust.h#include#include#include#include using namespace std;CPlaneNetAdjust:CPlaneNetAdjust(void).专业 .整理 .下载可编辑Lnumber=0;Snumber=0;Tnumber=0;Pnumber=0;knPnumber=0;CPlaneNetAdjust:CPlaneNetAdjust(void)delete Pname;delete xy;delete guancejiao;delete b
26、ianchang;delete start;delete end;double CPlaneNetAdjust:dms_rad(double a)/ 提取角度值的符号double sign=(a0.0) ? -1.0 : 1.0;a=fabs(a);/ 提取角度值的整度int d=(int)(a+0.00001)/10000.0);a=a-d*10000.0;if(a0.0) d=d-1; a=a+10000;/ 提取角度值的整分及秒值int m=(int)(a+0.00001)/100.0);a=a-m*100;if(a0.0) m=m-1; a=a+100.0;a=sign*(d*3600
27、.0+m*60.0+a)/206264.806247096363; return a;/ 将角度的弧度值化为度分秒连写的角度( double 型) double CPlaneNetAdjust:rad_dms(double a)a=a*206264.806247096363;double sign=(a0.0) ? -1.0 : 1.0;a=fabs(a);int d=(int)(a/3600.0+0.0000001);a=a-d*3600.0;if(a0.0) d=d-1; a=a+3600.0; int m=(int)(a/60.0+0.0001);a=a-m*60.0;.专业 .整理 .
28、下载可编辑if(a0.0) m=m-1; a=a+60.0; a=d*10000.0+m*100.0+a;return a*sign;void CPlaneNetAdjust:Getdata()stringfile=;ifstreaminFile;coutendl;cout 请输入文件的位置和文件名:file;coutendl;inFile.open(file,ios:in);if(!inFile)cout 不能打开 Lnumber;inFilePnumber;inFileknPnumber;inFileSnumber;inFileTnumber;inFile CjwuchaBcbiliwuc
29、haBcgudingwucha; xy=new XYPnumber;Pname=new stringPnumber;for(int i=0;iPnamei;inFilexyi.X;inFilexyi.Y ;xyi.Index=i;bianchang=new BianchangSnumber;for(int i=0;ibianchangi.startPoint;inFilebianchangi.endPoint;inFilebianchangi.Len;start=new intSnumber;end=new intSnumber;for(int i=0;iSnumber;i+)starti=G
30、etDianhao(bianchangi.startPoint);.专业 .整理 .下载可编辑endi=GetDianhao(bianchangi.endPoint);guancejiao=new GuancejiaoTnumber;double *dms=new doubleTnumber;for(int i=0;iguancejiaoi.Cezhan;inFileguancejiaoi.Huozhan;inFileguancejiaoi.Qianzhan;inFiledmsi;guancejiaoi.Guancezhi=dms_rad(dmsi);guancejiaoi.Index=i;c
31、ezhan=new intTnumber;huoshi=new intTnumber;qianshi=new intTnumber;for(int i=0;iTnumber;i+)cezhani=GetDianhao(guancejiaoi.Cezhan);huoshii=GetDianhao(guancejiaoi.Huozhan);qianshii=GetDianhao(guancejiaoi.Qianzhan);cout总点数:Pnumber边长观测数: Snumber角度观测数: Tnumberendl;/cout测 角 中 误 差 :Cjwucha测 边 固 定 误 差 :Bcgud
32、ingwucha测边比例误差: Bcbiliwucha endlendl;coutendl;cout 点的坐标(未知点坐标用0 表示):endl;cout 点号 点名 XYendl;coutsetprecision(3)setiosflags (ios:fixed);for(int i=0;iPnumber;i+)coutiPnameixyi.Xxyi.Y endl;cout 边长观测: endl;cout 起点 终点 观测值 endl;for(int i=0;iSnumber;i+)coutbianchangi.startPointbianchangi.endPoint bianchangi
33、.Lenendl;cout 角度观测值: endl;cout 测站 后视 前视 观测值 endl;.专业 .整理 .下载可编辑for(int i=0;iTnumber;i+)coutsetprecision(4)setiosflags (ios:fixed);coutguancejiaoi.Cezhanguancejiaoi.Huozhanguancejiaoi.Qianzhan dmsiendl;int CPlaneNetAdjust:GetDianhao(string dianming)for(int i=0;iPnumber;i+)if(Pnamei=dianming)return i;
34、return -1;string CPlaneNetAdjust:GetDiaming(int dianhao)return Pnamedianhao;double CPlaneNetAdjust:Gets12(int k1,int k2)for(int i=0;iSnumber;i+)if(k1=starti&k2=endi)return bianchangi.Len;if(k2=starti&k1=endi)return bianchangi.Len;return -1;/找不到符合条件的角,返回负值double CPlaneNetAdjust:GetA(int k1,int k2,int
35、 k3)for(int i=0;iTnumber;i+)if(k1=cezhani&k2=huoshii&k3=qianshii).专业 .整理 .下载可编辑return guancejiaoi.Guancezhi;if(k1=cezhani&k3=huoshii&k2=qianshii)return guancejiaoi.Guancezhi;return -1.0;/找不到符合条件的角,返回负值CMatrix CPlaneNetAdjust:P()CMatrix _P(Lnumber,Lnumber);for(int i=0;iSnumber;i+)doubletemp=temp=Cjwu
36、cha*Cjwucha/(1*sqrt(bianchangi.Len)/(1*sqrt(bianchangi.Len);_P.setValue(i,i,temp);for(int i=Snumber;iLnumber;i+)_P.setValue(i,i,Cjwucha*Cjwucha/(Cjwucha*Cjwucha);return _P;double CPlaneNetAdjust:GetT12(int k1,int k2)const double Pi=3.1415926;double dx=xyk2.X -xyk1.X ;double dy=xyk2.Y -xyk1.Y ;double
37、 T=atan2(dy,dx);if(T0)T=T+2.0*Pi;return T;CMatrix CPlaneNetAdjust:XYJS()CMatrix _XYJS(Pnumber,2);double T12;for(int i=0;i0&xyk2.Y0)T12=GetT12(k1,k2);double s12=Gets12(k1,k2);double s13=Gets12(k1,k3);double T13=T12+guancejiaoi.Guancezhi;double dx=s13*cos(T13);double dy=s13*sin(T13);xyk3.X=xyk1.X+dx;xyk3.Y=xyk1.Y+dy;for(int i=0;iPnumber;i+)double temp1=xyi.X;double temp2=xyi.Y;_XYJS.setValue(i,0,temp1);_XYJS.setValue(i,1,temp2);return _XYJS;CMatrix CPlaneNetAdjust:B()CMatrix _B1(Lnumber,Pnumber*2);dou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软件外包服务合同范本
- 摄影工作室合作合同范本
- 现代职高教育的创新教学方法与实践
- 2024-2025学年新教材高中物理分层集训11牛顿第三定律含解析新人教版必修第一册
- 2024-2025学年高中历史第四单元中国社会主义建设发展道路的探索第19课经济体制改革练习岳麓版必修2
- 2024-2025学年高中物理第6章力与运动第1节牛顿第一定律课时作业含解析鲁科版必修1
- 2024-2025学年九年级物理下册第十九章电磁波与信息时代19.1最快的“信使”教案新版粤教沪版
- 2024年高考化学一轮复习专题4.2卤素及其化合物练含解析
- 电子商务平台的用户心理与营销策略研究
- 电子竞技产业的国际合作与交流机制建设
- DL∕T 5452-2012 变电工程初步设计内容深度规定
- 2024至2030年中国中档商务酒店连锁行业市场调查研究及发展战略规划报告
- 血栓性微血管病的诊治
- 综合客运枢纽换乘区域设施设备配置要求JTT1066-2016
- 人工智能产业分类目录
- 中国急性缺血性卒中诊治指南(2023)解读
- 一年级下册写字表练字帖
- 青岛版小学数学三年级上册《分数的初步认识》教学案例
- 2024PowerTitan系列运维指导储能系统运维指导
- 2024年成都温江兴蓉西城市运营集团有限公司招聘笔试冲刺题(带答案解析)
- 患者发生输液反应的应急预案
评论
0/150
提交评论