当前位置:首页 > 范文大全 > 整改报告 >

整改报告

附合导线平差程序设计报告

2021-10-20 10:13:45整改报告
附合导线平差程序设计报告本文关键词:导线,程序设计,报告,附合附合导线平差程序设计报告本文简介:地图

附合导线平差程序设计报告 本文关键词:导线,程序设计,报告,附合

附合导线平差程序设计报告 本文简介:地图学课程设计报告《测量平差程序》课程设计(报告)学生姓名:罗正材学号:1108030128专业:2011级测绘工程指导教师:肖东升目录一、前言…………………………………………………………3二、平差程序的基本要求………………………………………3三、平差程序模块化……………………………………………3四

附合导线平差程序设计报告 本文内容:

地图学课程设计报告

《测量平差程序》课程设计

(报告)

学生姓名:罗正材

号:1108030128

业: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

为提取的度值(int类型),angle为分秒值(小数)

angle=modf(angle*100.0,//

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),angle=modf(angle*60.0,angle=modf(angle*60.0,return

a+b*0.01+c*0.0001+angle*0.0001;

}

其中,函数modf(angle,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)

_TORAD

-

f

4.8481368110953599358991410235795e-9;

}

//弧度转“度分秒”

double

RADtoDMS(double

rad)

{

int

f

=

rad

>=

0

?

1

:

-1;

//

符号

//加0.001秒(用弧度表示),化为度

rad

=

(rad

+

f

4.8481368110953599358991410235795e-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

buffer[256];

double

dx,dy;

SurPnt

pnt;

while

(

!feof(in)

)

{

fgets(buffer,sizeof(buffer),in);

if

(

sscanf(buffer,“%s

%lf

%lf“,pnt.name,}

else

break;

}

dx

=

array->elem[1].x

-

array->elem[0].x;

dy

=

array->elem[1].y

-

array->elem[0].y;

adj.azi0=atan2(dy,dx)

+

(dy

elem[3].x

-

array->elem[2].x;

dy

=

array->elem[3].y

-

array->elem[2].y;

adj.azin=atan2(dy,dx)

+

(dy

elem[1].x;

adj.y1=array->elem[1].y;

adj.xn=array->elem[2].x;

adj.yn=array->elem[2].y;

Destroy(array);//

}

//观测值信息写到动态数组

void

ReadObsValue(FILE

in,DyArray

array)

{

char

buffer[256];

double

dir0,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,pnt.dir0.dist=dist0;

pnt.dir1.dv=DMStoRAD(dir1);

pnt.dir1.dist=dist1;

pnt.b=pnt.dir1.dv-pnt.dir0.dv+(pnt.dir1.dv-pnt.dir0.dvlength;

i++)

{

sumb+=array->elem[i].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.judge,“方位角闭合差没超限“);

}

//角度改正

void

CorrectAngle(DyArray

array)

{

for

(int

i=0;

ilength;

i++)

{

array->elem[i].b+=adj.v;

}

adj.v=adj.v/_PI*180*3600;

}

//推算方位角

void

Direct(DyArray

array)

{

SurPnt

pnt;

//第一个未知边

pnt.dir1.alfa=adj.azi0+array->elem[0].b-_PI;

pnt.dir1.dist=(array->elem[0].dir1.dist+array->elem[1].dir0.dist)/2;

pnt.dir1.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->elem[i-1].dir1.alfa+array->elem[i].b-_PI;

pnt.dir1.dist=(array->elem[i].dir1.dist+array->elem[i+1].dir0.dist)/2;

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->elem[i].dir1.alfa=RADtoDMS(array->elem[i].dir1.alfa);//alfa转为角度

}

}

//坐标增量改正

void

CorrectDirect(DyArray

array)

{

double

sumx=0.0;

double

sumy=0.0;

double

sums=0.0;

for(int

i=0;ilength-1;i++)

{

sumx+=array->elem[i].dir1.dx;

sumy+=array->elem[i].dir1.dy;

sums+=array->elem[i].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);//导线全长相对闭合差分母

for(

i=0;ilength-1;i++)

{

array->elem[i].dir1.dx-=adj.fx*array->elem[i].dir1.dist/sums;//坐标增量改正

array->elem[i].dir1.dy-=adj.fy*array->elem[i].dir1.dist/sums;

}

}

//解算近似平差坐标

void

Coordinate(DyArray

array)

{

SurPnt

pnt;

array->elem[0].x=adj.x1;

array->elem[0].y=adj.y1;

for(int

i=0;ilength-2;i++)

{

//strcpy(pnt.name,array->elem[i+1].name);

pnt.x=array->elem[i].x+array->elem[i].dir1.dx;//

pnt.y=array->elem[i].y+array->elem[i].dir1.dy;

AddCor(array,pnt,i+1);

}

}

//输出

void

Print(DyArray

array,FILE

out)

{

double

d,m,s;

fprintf(out,“方位角闭合差fb=%.0lf秒

%s

角度改正v=%.0lf秒/n“,adj.fb,adj.judge,adj.v);

fprintf(out,“坐标增量闭合差

fx=%.0lfmm

fy=%.0lfmm

fs=%.0lfmm/n“,adj.fx*1000,adj.fy*1000,adj.fs*1000);

fprintf(out,“导线全长相对闭合差

fs/∑S=1/%d/n/n“,adj.f);

fprintf(out,“坐标方位角/n“);

for

(int

i=0;

ilength-1;

i++)

{

d=array->elem[i].dir1.alfa;

m=(d-(int)d)*100;

s=(m-(int)m)*100;

fprintf(out,“α%s-%s=%.0lf°%.0lf′%.0lf″/n“,array->elem[i].name,array->elem[i+1].name,d,m,s);

}

fprintf(out,“/n近似平差坐标/n“);

for

(i=1;

ilength-1;

i++)

{

fprintf(out,“%s

x=%.3lfm

y=%.3lfm/n“,array->elem[i].name,array->elem[i].x,array->elem[i].y);

}

}

int

main(int

argc,char*

argv[])

{

DyArray

pnts;

Init(

char

infile[255],outfile[255];

if

(argc

<

2)

{

printf(“Enter

infile

name:/n“);

scanf(“%s“,infile);

}

else

strcpy(infile,argv[1]);

FILE

in

=

fopen(infile,“r“);

if(in

==

NULL)

{

printf(“File

%s

cann

t

open!“,infile);

return

-1;

}

if

(argc

<

3)

{

printf(“Enter

outfile

name:/n“);

scanf(“%s“,outfile);

}

else

strcpy(outfile,argv[2]);

FILE

out

=

fopen(outfile,“w“);

if(out

==

NULL)

{

printf(“File

%s

cann

t

open!“,outfile);

return

-1;

}

//读入已知点的坐标

ReadKnwData(in,Init(

//观测值信息写到动态数组

ReadObsValue(in,//求角度闭合差fb

Fb(

//角度改正

CorrectAngle(

//推算方位角

Direct(

//坐标增量改正

CorrectDirect(

//解算近似平差坐标

Coordinate(

fclose(in);

//输出

Print(

fclose(out);

Destroy(

return

0;

}

14

篇2:《测量平差报告》

《测量平差报告》word版 本文关键词:测量,报告,word

《测量平差报告》word版 本文简介:测量平差程序设计实习报告书学院:某院班级:某班学号:XXXXxXx姓名:某某指导老师:某某程序实验实验目的:通过C#程序设计,对数据进行平差计算,并进行精度平差,消除数据中的矛盾。实验内容及步骤1.水准网平差理论由于存在观测误差,当水准网中有多余观测值时,观测值之间就会存在矛盾,水准网平差的目的是消

《测量平差报告》word版 本文内容:

测量平差程序设计

学院:某院

班级:某班

学号:XXXXxXx

姓名:某某

指导老师:某某

程序实验

实验目的:通过C#程序设计,对数据进行平差计算,并进行精度平差,消除数据中的矛盾。

实验内容及步骤

1.水准网平差理论

由于存在观测误差,当水准网中有多余观测值时,观测值之间就会存在矛盾,水准网平差的目的是消除矛盾,求得各高程点高程的最可靠值(也叫平差值),并对观测值和平差值进行精度评定。

在参数平差原理的基础上,本实验就选用间接平差结合最小二乘法来进行程序设计。

选用的算例如下

如图所示水准网,A、B

、C三点为已知高程点,

D、E为未知点,各观测高差及路线长度如下表所列。(20分)

用间接平差法计算未知点D、E的高程平差值及其中误差;

高差观测值/m

对应线路长度/km

已知点高程/m

h1=

-1.348

h2=

0.691

h3=

1.265

h4=

-0.662

h5=

-0.088

h5=

0.763

1

1

1

1

1

1

HA=23.000

HB=23.564

CB=23.663

,,

2.程序设计思路

(1)定义所需的成员变量。(2)设计数据信息读取程序。

(3)写入平差计算程序。(4)在平差程序设计过程中添加一个数组运算类,包含平差计算数组相乘、转置、求逆等运算。(5)设计数据存放输出文件所需程序。

3.

原始数据文件读取格式

先在Excel中填写题中相关的各个信息如观测总数、总点数、已知点数、已知点及点名对应的已知点高程值等。

4.

读取数据文件,并将数据存入相应变量。

读取文件:

System.Windows.Forms.OpenFileDialogopenFile=newSystem.Windows.Forms.openFileDialog

{

};

string

output;

openFile

.Filter=“文本文件t(.txt)|.txt“;

逐行读取数据并把它存入相应的变量中。

5.

平差计算程序设计

添加类,调用其中数组运算程序,完成平差计算。

求逆,求和及求积。

6.

结果文件存放并输出

存放:

FileStream

fs;//定义一个文件读写实例

string

filename

=

“定义文件存放路径和文件名”

输出:生成新的对象实例,

StreamWriter

sw

=

new

StreamWriter(fs);

sw.Write(“所要输出的数据“)

7.

输出结果文件

8.

实验总结

这次的C#程序实验,相较之前有更大的难度,综合了之前所学的很多的知识,通过这次的实验,对于自己的C#程序设计思路有了比较系统有条理的整理,相信对自己的程序设计能力会有所提高。

推荐访问:导线 程序设计 报告