2022年附合导线平差程序设计报告 .pdf

上传人:Q****o 文档编号:28023239 上传时间:2022-07-26 格式:PDF 页数:14 大小:276.06KB
返回 下载 相关 举报
2022年附合导线平差程序设计报告 .pdf_第1页
第1页 / 共14页
2022年附合导线平差程序设计报告 .pdf_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《2022年附合导线平差程序设计报告 .pdf》由会员分享,可在线阅读,更多相关《2022年附合导线平差程序设计报告 .pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、地图学课程设计报告1 测量平差程序课程设计(报告)学生姓名:罗正材学号:1108030128 专业:2011 级测绘工程指导教师:肖东升名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 14 页 - - - - - - - - - 地图学课程设计报告2 目录一、前言 ,3 二、平差程序的基本要求,3三、平差程序模块化 ,3 四、平差中的重要函数 ,4 五、结论 ,7 六、部分源代码 ,7 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -

2、- - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 14 页 - - - - - - - - - 地图学课程设计报告3 一、前言随着测绘科学技术的不断发展,在测量数据的处理中产生很多种平差的方法。在本文中,附合导线近似平差程序是利用C+编程实现的, 我们需要将导线网的已知数据信息按照特定的规则输入到.txt 文本中,利用C+程序读取文本数据信息后,对其进行一系列的平差计算,最终获得平差后的结果,并以.txt 文本的形式输出且保存,这样就可为测量工作提供一定的参考,还能为测绘数据的管理带来帮助。二、平差程序的基本要求平差程序设计与其它程序设计相同,应当满足一定的

3、要求。(1)程序逻辑结构简单,清晰易读,符合结构化程序设计要求,便于扩展;(2)运算速度快,占用内存小,内外存之间的交换不宜过于频繁;(3)数学模型及计算方法正确、先进,计算结果精度高;(4)适应性强,便于移植,充分考虑各种可能形式,尽量满足不同要求与需要;(5)方便用户,操作简便。数据输入与用户作业方式与习惯相统一,输出明了、齐全;尽量减少手工处理工作量,操作简便;人机交互性要强。上述要求,既体现在平差程序的总体设计中,也贯穿于平差程序设计的各个环节中。三、平差程序模块化名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心

4、整理 - - - - - - - 第 3 页,共 14 页 - - - - - - - - - 地图学课程设计报告4 图 1 四、平差中的重要函数(一) 、角度制与弧度制的相互转化C/C+程序设计中,关于角度的计算以弧度制为单位,而在测量以及具体工作中我们通常习惯以角度制为单位。这样, 在数据处理中, 经常需要在角度制与弧度制之间进行相互转化。这里,我们利用C/C+数学函数库math. h 中的相关函数完成这两种功能。这里, 我们使用double 类型数据表示角度制数和弧度制数。例如: 123 度 44 分 58. 445秒,用 double 类型表示为123. 4458445,其中分、秒根据

5、小数位确定。在角度制与弧度制的转化中,涉及如下图2 所示的两个环节。图 2 1. 角度化弧度函数double d_h( double angle) /角度化弧度 double a, b; angle=modf( angle,&a);/a 为提取的度值(int 类型) , angle 为分秒值(小数)angle=modf( angle* 100. 0,& b); / b 为提取的分值(int 类型),angle 为秒值(小数)return ( a+b/ 60. 0+angle/ 36.0)*( PI+3. 0E-16)/ 180. 0; 2. 弧度化角度函数double h_d( double

6、angle) /弧度化角度度.分秒度弧度名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 14 页 - - - - - - - - - 地图学课程设计报告5 double a, b, c; angle=modf( angle*180. 0/( PI- 3. 0E- 16),& a); angle=modf( angle*60. 0,&b); angle=modf( angle*60. 0,&c); return a+b*0. 01+c*0.0001+angle*0. 000

7、1; 其中,函数 modf( angle,&a) 为 C 语言数学库函数,返回值有两个,以引用类型定义的a返回 angle 的整数部分,函数直接返回值为angle 的小数部分。(二)近似坐标计算在平面网间接平差计算中,近似坐标计算是非常重要的一项基础工作。近似坐标是否计算成功是间接平差是否可以进行的必要条件。1. 两方向交会已知条件:两个点的近似坐标,这两个点到未知点的方位角,如图3 所示图 3 两方向交会根据图 4. 2,设11tgk,22tgk,则很容易写出BPBPAPAPxxyykxxyyk21整理该式,得两方向交会的的计算公式BBAAPPyxkyxkyxkk212111(4. 1)对(

8、 4.1)式计算,即可得到未知点的近似坐标。应用中需要注意的是,若两方向值相同或相反,则该式无解。程序中,定义该问题的函数为:int xy0ang( obser &a1, obser &a2) 2. 三边交会如图 4 所示,为排除两边长交会的二义性,给出如下三边交会的模型,已知条件: 三个名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 14 页 - - - - - - - - - 地图学课程设计报告6 点的近似坐标,这三个点到未知点的距离测量值。图 4 三边交会对每条边长

9、测量值,可列出边长条件)()()()()()()()()(222322222221cyyxxSbyyxxSayyxxSCPCPBPBPAPAP计算上式中(a)与( b)和( c)三式的差,消去未知参数的平方项,整理得三边交会的计算公式222221222322212222AACCAABBPPCACABABAyxSyxSyxSyxSyxyyxxyyxx(4. 2)对( 4. 2)式计算,即可得到未知点的近似坐标。应用中需要注意的是,若三点位于同一条直线,则该式无解。程序中,定义该问题的函数为:int xy0dist( obser &a, obser &b, obser&c) 。3. 坐标正算使用测

10、量正算公式计算控制网的近似坐标。程序中,定义该问题的函数为:int zheng( obser &a) 4. 角度后方交会使用测量后方交会计算公式计算控制网的近似坐标。程序中,定义该问题的程序函数为:int houj( obser &a, obser &b, obser &c) 5. 测角网无定向导线计算无定向导线, 主要应用于计算已知控制点不相邻的三角网的近似坐标。基本思想为: 先由一个已知点开始,假设一条边的边长与方位角,根据三角网的角度观测值推算其它边的边长与方位角, 然后,由任一导线计算, 直到计算至另一个已知点为止。假设导线的起点为A,终点为B。这时,计算出的B 点坐标必然与已知坐标不

11、同,设A 与 B 的已知坐标为(BBAAyxyx,) ,B 点的计算坐标为B(,BByx) ,则用这些数据可以计算边长的放大系数 k 和假设方位角的改正数da2222)()()()(ABABABAByyxxyyxxk名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 14 页 - - - - - - - - - 地图学课程设计报告7 ),(),(BAafaBAafad其中,),(BAafa为计算方位角的函数。这时,对网中的假设边长和所有由假设边长推算的近似边长进行k 倍的放大

12、, 对假设方位角和所有由假设方位角推算的近似方位角进行方位角改正。然后应用坐标正算法可以计算三角网中所有点的近似坐标。五、结论:C+ 在导线平差中的应用在导线网的间接平差程序设计与实现中,通过使用C+编程,采用测量平差中的间接平差的方法,实现了导线网的间接平差,最终得到了导线网中待定数据。在导线网平差的程序应用中,利用已经编好的导线网间接平差程序,对边角网、 三角网的实例进行了平差,最终得到导线网的待定数据以及相关的精度评定,通过对这些平差结果的检查,最后,认为此导线网的间接平差程序可以为测量的平差工作提供一些服务。虽然此程序可以完成导线网平差一些工作,但是它还有很多的不足地方需要改进以及完善

13、。平差程序的实现定义了五个结构体(间接平差结构、 平面网、 平面点、 测站、观测值) ,通过一系列的函数将这五个结构体联系起来,最终完成平差任务。下面阐述一下导线网的间接平差程序实现的基本流程:(1)以DAT文件的形式输入导线网中的已知控制点、测站信息、观测值、测角中误差、测距加、 乘常数等所有的已知数据,并且这些数据的输入必须符合前面所提到的数据输入格式;(2) 运用程序读取输入数据文件,通过相应的函数求得待定点的近似坐标;(3)通过相应函数,求取间接平差的结构:误差方程系数阵A、观测权阵P、误差方程常数项l;(4)通过间接平差函数,实现对已经得到的间接平差结构的平差工作。(5)最后,以DA

14、T文件的格式输出并保存平差处理结果,为以后的测量工作提供参考。六、部分源代码:/ 度分秒 化成弧度double DMStoRAD(double dms) int d, m, f; double s; f = dms=0 ? 1 : -1; /0.001秒 4.8481368110953599358991410235795e-9弧度dms += f * 0.0000001; d = (int)dms; dms = (dms - d) * 100.0; m = (int)dms; s = (dms - m) * 100.0; return (d + m / 60.0 + s / 3600.0) *

15、 _TORAD - f * 4.8481368110953599358991410235795e-9; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 14 页 - - - - - - - - - 地图学课程设计报告8 / 弧度转“度分秒”double RADtoDMS(double rad) int f = rad = 0 ? 1 : -1; / 符号 /加 0.001 秒(用弧度表示) ,化为度 rad = (rad + f * 4.84813681109535993

16、58991410235795e-9) * _TODEG; int d = (int)rad; rad = (rad - d) * 60.0; int m = (int)rad; double s = (rad - m) * 60.0; return d + m / 100.0 + s / 10000.0 - f * 0.0000001; / 读入已知点的坐标void ReadKnwData(FILE * in, DyArray * array) char buffer256; double dx,dy; SurPnt pnt; while ( !feof(in) ) fgets(buffer,

17、 sizeof(buffer), in); if ( sscanf(buffer, %s %lf %lf, pnt.name, &pnt.x, &pnt.y) = 3) Add(array, pnt); else break; dx = array-elem1.x - array-elem0.x; dy = array-elem1.y - array-elem0.y; adj.azi0=atan2(dy, dx) + (dy elem3.x - array-elem2.x; dy = array-elem3.y - array-elem2.y; adj.azin=atan2(dy, dx) +

18、 (dy elem1.x; adj.y1=array-elem1.y; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 14 页 - - - - - - - - - 地图学课程设计报告9 adj.xn=array-elem2.x; adj.yn=array-elem2.y; Destroy(array);/ / 观测值信息写到动态数组void ReadObsValue(FILE * in, DyArray * array) char buffer256; double d

19、ir0,dir1,dist0,dist1; SurPnt pnt;/用于临时保存点的坐标while ( !feof(in) ) fgets(buffer, sizeof(buffer), in); if( feof(in) ) return; if(sscanf(buffer, %s %s %lf %lf %s %lf %lf, pnt.name, pnt.dir0.name, &dir0, &dist0, pnt.dir1.name, &dir1, &dist1) = 7) pnt.dir0.dv=DMStoRAD(dir0); pnt.dir0.dist=dist0; pnt.dir1.d

20、v=DMStoRAD(dir1); pnt.dir1.dist=dist1; pnt.b=pnt.dir1.dv-pnt.dir0.dv+(pnt.dir1.dv-pnt.dir0.dv 0 ? 1 : 0) * _2PI; Add(array, pnt);/观测值信息写到动态数组 else break;/退出读观测值的循环 / 求角度闭合差fb void Fb(DyArray * array) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 14 页 - - - - -

21、 - - - - 地图学课程设计报告10 double sumb=0.0;/beta求和for (int i=0; ilength; i+) sumb+=array-elemi.b; adj.fb=adj.azi0+sumb-_PI*array-length-adj.azin; adj.v=-adj.fb/array-length; adj.fb=adj.fb/_PI*180*3600; adj.fr=2*8*sqrt(array-length); if (abs(adj.fb) = adj.fr) strcpy(adj.judge,方位角闭合差超限了!); else strcpy(adj.j

22、udge,方位角闭合差没超限); / 角度改正void CorrectAngle(DyArray * array) for (int i=0; ilength; i+) array-elemi.b+=adj.v; adj.v=adj.v/_PI*180*3600; / 推算方位角void Direct(DyArray * array) SurPnt pnt; / 第一个未知边pnt.dir1.alfa=adj.azi0+array-elem0.b-_PI; pnt.dir1.dist=(array-elem0.dir1.dist+array-elem1.dir0.dist)/2; pnt.di

23、r1.dx=pnt.dir1.dist*cos(pnt.dir1.alfa); pnt.dir1.dy=pnt.dir1.dist*sin(pnt.dir1.alfa); AddDir(array,pnt,0); for(int i=1;ilength-1;i+) pnt.dir1.alfa=array-elemi-1.dir1.alfa+array-elemi.b-_PI; pnt.dir1.dist=(array-elemi.dir1.dist+array-elemi+1.dir0.dist)/2; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -

24、- - - - - - 名师精心整理 - - - - - - - 第 10 页,共 14 页 - - - - - - - - - 地图学课程设计报告11 pnt.dir1.dx=pnt.dir1.dist*cos(pnt.dir1.alfa); pnt.dir1.dy=pnt.dir1.dist*sin(pnt.dir1.alfa); AddDir(array,pnt,i); for(i=0;ilength-1;i+) array-elemi.dir1.alfa=RADtoDMS(array-elemi.dir1.alfa);/alfa转为角度 / 坐标增量改正void CorrectDire

25、ct(DyArray * array) double sumx=0.0; double sumy=0.0; double sums=0.0; for(int i=0;ilength-1;i+) sumx+=array-elemi.dir1.dx; sumy+=array-elemi.dir1.dy; sums+=array-elemi.dir1.dist; adj.fx=adj.x1+sumx-adj.xn; adj.fy=adj.y1+sumy-adj.yn; adj.fs=sqrt(adj.fx*adj.fx+adj.fy*adj.fy); adj.f=int(sums/adj.fs);/

26、导线全长相对闭合差分母for( i=0;ilength-1;i+) array-elemi.dir1.dx-=adj.fx*array-elemi.dir1.dist/sums;/坐标增量改正array-elemi.dir1.dy-=adj.fy*array-elemi.dir1.dist/sums; / 解算近似平差坐标void Coordinate(DyArray * array) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 14 页 - - - - - - -

27、 - - 地图学课程设计报告12 SurPnt pnt; array-elem0.x=adj.x1; array-elem0.y=adj.y1; for(int i=0;ilength-2;i+) /strcpy(pnt.name,array-elemi+1.name); pnt.x=array-elemi.x+array-elemi.dir1.dx;/ pnt.y=array-elemi.y+array-elemi.dir1.dy; AddCor(array,pnt,i+1); / 输出void Print(DyArray * array, FILE * out) double d,m,s;

28、 fprintf(out, 方位角闭合差fb=%.0lf秒 %s 角度改正v=%.0lf秒n, adj.fb, adj.judge, adj.v); fprintf(out, 坐标增量闭合差 fx=%.0lfmm fy=%.0lfmm fs=%.0lfmmn, adj.fx*1000, adj.fy*1000, adj.fs*1000); fprintf(out, 导线全长相对闭合差 fs/S=1/%dnn, adj.f); fprintf(out, 坐标方位角 n); for (int i=0; ilength-1; i+) d=array-elemi.dir1.alfa; m=(d-(in

29、t)d)*100; s=(m-(int)m)*100; fprintf(out, %s-%s=%.0lf %.0lf %.0lf n, array-elemi.name, array-elemi+1.name, d, m, s); fprintf(out, n近似平差坐标n); for (i=1; ilength-1; i+) fprintf(out, %s x=%.3lfm y=%.3lfmn, array-elemi.name, array-elemi.x, 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 -

30、- - - - - - 第 12 页,共 14 页 - - - - - - - - - 地图学课程设计报告13 array-elemi.y); int main(int argc, char* argv) DyArray pnts; Init(&pnts); char infile255, outfile255; if (argc 2) printf(Enter infile name:n); scanf(%s, infile); else strcpy(infile, argv1); FILE * in = fopen(infile, r); if(in = NULL) printf(Fil

31、e %s cannt open!, infile); return -1; if (argc 3) printf(Enter outfile name:n); scanf(%s, outfile); else strcpy(outfile, argv2); FILE * out = fopen(outfile, w); if(out = NULL) printf(File %s cannt open!, outfile); return -1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -

32、 - 第 13 页,共 14 页 - - - - - - - - - 地图学课程设计报告14 / 读入已知点的坐标ReadKnwData(in, &pnts); Init(&pnts); / 观测值信息写到动态数组ReadObsValue(in, &pnts); / 求角度闭合差fb Fb(&pnts); / 角度改正 CorrectAngle(&pnts); / 推算方位角 Direct(&pnts); / 坐标增量改正 CorrectDirect(&pnts); / 解算近似平差坐标Coordinate(&pnts); fclose(in); / 输出 Print(&pnts, out); fclose(out); Destroy(& pnts); return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 14 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁