附合导线平差程序设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《测量平差程序》课程设计
(报告)
学生姓名:***
学号:**********
专业:2011级测绘工程
指导教师:肖东升
目录
一、前言 (3)
二、平差程序的基本要求 (3)
三、平差程序模块化 (3)
四、平差中的重要函数 (4)
五、结论 (7)
六、部分源代码 (7)
一、前言
随着测绘科学技术的不断发展,在测量数据的处理中产生很多种平差的方法。在本文中,附合导线近似平差程序是利用C++编程实现的,我们需要将导线网的已知数据信息按照特定的规则输入到.txt文本中,利用C++程序读取文本数据信息后,对其进行一系列的平差计算,最终获得平差后的结果,并以.txt文本的形式输出且保存,这样就可为测量工作提供一定的参考,还能为测绘数据的管理带来帮助。
二、平差程序的基本要求
平差程序设计与其它程序设计相同,应当满足一定的要求。
(1)程序逻辑结构简单,清晰易读,符合结构化程序设计要求,便于扩展;
(2)运算速度快,占用内存小,内外存之间的交换不宜过于频繁;
(3)数学模型及计算方法正确、先进,计算结果精度高;
(4)适应性强,便于移植,充分考虑各种可能形式,尽量满足不同要求与需要;
(5)方便用户,操作简便。数据输入与用户作业方式与习惯相统一,输出明了、齐全;尽量减少手工处理工作量,操作简便;人机交互性要强。
上述要求,既体现在平差程序的总体设计中,也贯穿于平差程序设计的各个环节中。
三、平差程序模块化
图1
四、平差中的重要函数
(一)、角度制与弧度制的相互转化
C/C++程序设计中,关于角度的计算以弧度制为单位,而在测量以及具体工作中我们通常习惯以角度制为单位。这样,在数据处理中,经常需要在角度制与弧度制之间进行相互转化。这里,我们利用C/C++数学函数库math.h中的相关函数完成这两种功能。
这里,我们使用double类型数据表示角度制数和弧度制数。例如:123度44分58.445秒,用double类型表示为123.4458445,其中分、秒根据小数位确定。
在角度制与弧度制的转化中,涉及如下图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 angle) //弧度化角度
{ 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.0001; }
其中,函数modf (angle ,&a )为C 语言数学库函数,返回值有两个,以引用类型定义的a 返回angle 的整数部分,函数直接返回值为angle 的小数部分。
(二)近似坐标计算
在平面网间接平差计算中,近似坐标计算是非常重要的一项基础工作。近似坐标是否计算成功是间接平差是否可以进行的必要条件。 1.两方向交会
已知条件:两个点的近似坐标,这两个点到未知点的方位角,如图3所示
图3 两方向交会
根据图4.2,设11
αtg k =,22αtg k =,则很容易写出
⎪⎪⎩
⎪⎪⎨⎧
--=--=B P B P A
P A P x x y y k x x y y k 21 整理该式,得两方向交会的的计算公式
⎪⎪⎭⎫
⎝⎛--=⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛--B B
A A P P y x k y x k y x k k 212111
(4.1)
对(4.1)式计算,即可得到未知点的近似坐标。应用中需要注意的是,若两方向值相同或相反,则该式无解。
程序中,定义该问题的函数为:int xy0ang (obser &a1,obser &a2) 2.三边交会
如图4所示,为排除两边长交会的二义性,给出如下三边交会的模型,已知条件:三个
点的近似坐标,这三个点到未知点的距离测量值。
图4 三边交会 对每条边长测量值,可列出边长条件
⎪⎩⎪⎨⎧-+-=-+-=-+-=)
()
()()()()()()()(222322222221c y y x x S b y y x x S a y y x x S C P C P B P B P A P A P
计算上式中(a )与(b )和(c )三式的差,消去未知参数的平方项,整理得三边交会的计算公式
⎪
⎪
⎪⎪
⎭
⎫ ⎝⎛++---++---=⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫
⎝⎛----222221222322212222A A C C A A B B P P C A C
A B A B
A y x S y x S y x S y x S y x y y x x y y x x (4.2)
对(4.2)式计算,即可得到未知点的近似坐标。应用中需要注意的是,若三点位于同一条直线,则该式无解。程序中,定义该问题的函数为:int xy0dist (obser &a ,obser &b , obser &c )。 3.坐标正算
使用测量正算公式计算控制网的近似坐标。程序中,定义该问题的函数为:
int zheng (obser &a ) 4.角度后方交会
使用测量后方交会计算公式计算控制网的近似坐标。程序中,定义该问题的程序函数为:
int houj (obser &a ,obser &b , obser &c ) 5.测角网无定向导线计算
无定向导线,主要应用于计算已知控制点不相邻的三角网的近似坐标。基本思想为:先由一个已知点开始,假设一条边的边长与方位角,根据三角网的角度观测值推算其它边的边长与方位角,然后,由任一导线计算,直到计算至另一个已知点为止。假设导线的起点为A ,终点为B 。这时,计算出的B 点坐标必然与已知坐标不同,设A 与B 的已知坐标为(B B A A y x y x ,,,),B 点的计算坐标为B ’
('
',B B y x ),则用这些数据可以计算边长的放大系
数k 和假设方位角的改正数da
2
22
'
2')
()()()(A B A B A B A B y y x x y y x x k -+--+-=