好好学习,天天向上,一流范文网欢迎您!
当前位置:首页 >> 最新范文 内容页

测绘程序设计课程实习报告

测绘程序设计课程实习报告 本文关键词:测绘,程序设计,实习报告,课程

测绘程序设计课程实习报告 本文简介:测绘程序设计课程实习报告一、实习目的巩固之前所学的c++类定义、文件操作等各方面知识,掌握矩阵计算的基本算法,熟悉并熟练运用平差模型,掌握测量平差的基本原理和公式,并处理测量观测数据。二、实习内容该课程的实习主要为c语言及c++编程基础,矩阵操作算法,条件平差,间接平差,以及在水准网平差中的应用。三

测绘程序设计课程实习报告 本文内容:

测绘程序设计课程实习报告

一、实习目的

巩固之前所学的c++类定义、文件操作等各方面知识,掌握矩阵计算的基本算法,熟悉并熟练运用平差模型,掌握测量平差的基本原理和公式,并处理测量观测数据。

二、实习内容

该课程的实习主要为c语言及c++编程基础,矩阵操作算法,条件平差,间接平差,以及在水准网平差中的应用。

三、实习过程

(1)

实习1(文件的基本操作以及角度、弧度的转化)

1.

准备

C++文件操作函数包含于头文件,一般情况下使用即可。在计算过程中需要文件输出格式控制,函数包含于。c++的流操作函数包含于,相应的流函数在命名空间“std”。

角度转弧度的过程中,首先判断正负,对符号进行不同情况的处理。将度数的分,秒位分别除以60、3600,然后把得到的结果与度位绝对值相加,判断符号。

弧度转角度的过程中,同样判断正负,取小数位乘以60取整数得到相应角度的分,再取剩余的小数乘以60即得到相应角度的秒。

2.

代码

#include

#include

#include

#include

using

namespace

std;

const

double

pi

=

3.14159;

int

main()

{

fstream

file(“a.txt“);

//定义文件操作对象

string

aa;

file>>aa;

cout>a1;

cout>a2;

cout>a3;

cout=

0)

//判断输入度数的正负

deg

=

a1

+

a2/60

+

a3/3600;

else

deg

=

a1

-

a2/60

-

a3/3600;

double

radian;

radian

=

deg/180*pi;

cout>radian;

bool

tm

=

0;

deg

=

radian*180/pi;

if(deg

#include

#include

using

namespace

std;

class

mat

{

public:

void

add(int

row,int

col,double

m[],double

n[],double

result[]);//加法

void

sub(int

row,int

col,double

m[],double

n[],double

result[]);//减法

double*

multiply(int

row,int

col,int

col2,double

m[],double

n[]);//乘法

void

trans(int

row,int

col,double

m[],double

result[]);//转置

bool

inverse(double

a[],int

n);//求逆

void

fileIn(ifstream

//从文件中读入

void

fileOut(ofstream

out,int

row,int

col,doublemat);

//向文件输出

void

outPut(int

row,int

col,doublemat);//向控制台输出

void

inPut(int

row,int

col,doublemat);//从控制台输入

int

ij(int

i,int

j)//下三角矩阵元素判断

{

return

(i>=j)?

i*(i+1)/2+j

:

j*(j+1)/2+i;

}

};

文件mat.cpp:

#include

“mat.h“void

mat::add(int

row,int

col,double

m[],double

n[],double

result[])

{

for(int

i=0;

i>mat[i];

}

void

mat::fileOut(ofstream

out,int

row,int

col,doublemat)

{

for(int

i=0;

i>mat[i*col+j];

}

测试文件main.cpp:

#include

“mat.h“mat

g_mat;

void

main()

{

doublemat1;

doublemat2;

doublemat3;

doublemat4;

doublemat_result;

mat1

=

new

double[2*3];

mat2

=

new

double[2*3];

mat3

=

new

double[3*1];

mat4

=

new

double[2*2];

cout

mat

mat_c;

/**

V

=

BX-L;

V:

n*1

B:

n*t

X:

t*1

L:

n*1

P:

n*1

已知:B、L、P

求:X、V、/

void

adjust(int

n,int

t,double

V[],double

B[],double

X[],double

L[],double

P[],double

doubleBTPB

=

new

double[(t+1)*t/2];

doubleBTPB2

=

new

double[(t+1)*t/2];

for(i=0;

i>n;

file>>t;

cout,使用

cout

#include

#include

#include

“mat.h“using

namespace

std;

mat

mat_cul;

void

condition(int

n,int

r,double

A[],double

W[],double

P[],double

V[],double

doubleAQAT

=

new

double[r*(r+1)/2];

//法方程系数阵

for(i=0;

i

#include

#include

#include

#include

#include

“mat.h“using

namespace

std;

class

Clevel

{

public:

int

n;

//总观测值数

int

p_k;

//已知点数

int

t;

//未知点数

int

pNum;

//高程点总数

double

m;

//单位权

stringPname;

//点名地址数组

intstartP;

//起点号

intendP;

//终点号

doubleh;

//观测值

doubleH;

//高程值

doubleS;

//距离长度

doubleP;

//权

doubleB;

doubleL;

doubleX;

doubleV;

double

u;

//中误差

Clevel(charfileName);

void

inputdata(charfileName);

int

GetPNum(string

name);

void

adjust();

void

outputResult();

void

calculataHBPL();

mat

mat_c;//矩阵计算类

private:

void

calH();

void

calB();

void

calP();

void

calL();

};

文件Clevel.cpp:

#include

“Clevel.h“Clevel::Clevel(char*

fileName)

{

inputdata(fileName);

calculataHBPL();

adjust();

outputResult();

}

/**

V

=

BX-L;

V:

n*1

B:

n*t

X:

t*1

L:

n*1

P:

n*1

已知:B、L、P

求:X、V、/

void

Clevel::adjust()

{

int

i,j,k;

doubleBTPB

=

new

double[(t+1)*t/2];

doubleBTPB2

=

new

double[(t+1)*t/2];

//

下三角求BTPB2

for(i=0;

i>n>>pNum>>p_k>>m;

t

=

pNum-p_k;

startP

=

new

int[n];//起点号

endP

=

new

int[n];//终点号

L

=

new

double[n];//观测值

H

=

new

double[pNum];//高程值

S

=

new

double[n];//距离长度

P

=

new

double[n*n];//权

B

=

new

double[t*n];

h

=

new

double[n];

Pname

=

new

string[pNum];

X

=

new

double[t];

V

=

new

double[n];

int

i;

for(i=0;i>buffer;

int

bb

=

GetPNum(buffer);

in>>H[bb];

//cout>buffer;//读取起点名

startP[i]

=

GetPNum(buffer);//获取起点对应的点号

in>>buffer;//读取终点名

endP[i]

=

GetPNum(buffer);

in>>h[i]>>S[i];//读取观测值高差及对应的距离

}

in.close();

//cout-9999.0

Hcount++;

}

}

if(Hcount

==

t)

break;

}

}

void

Clevel::calB()

{

int

i,j;

for(i=0;

i=p_k

}

}

//输出矩阵B

cout<

for(

i=0;i

{

for(int

j=0;j

{

cout<

}

cout<

}

}

void

Clevel::calP()

{

int

i;

for(i=0;

i

i++)

{

P[i]=m/S[i];

}

//输出矩阵P

cout<

for(i=0;

i

i++)

{

cout<

}

}

void

Clevel::calL()

{

int

i;

for(i=0;i

{

int

k1=startP[i];

int

k2=endP[i];

L[i]=h[i]-(H[k2]-H[k1]);

}

//输出矩阵L

cout<

for(i=0;

i

i++)

{

cout<

<<

setprecision(4)<

}

}

void

Clevel::outputResult()

{

cout<<“中误差:

“<

cout<<“观测值改正数:“<

mat_c.outPut(n,1,V);

int

i;

for(i=0;

i

i++)

{

cout<<“改正后观测值h“<

h[i]

=

H[i]+V[i];

}

cout<

for(i=p_k;

i

i++)

{

cout<<“改正后高程值“<

}

}

void

Clevel::calculataHBPL()

{

calH();

calB();

calP();

calL();

}

主函数main.cpp:

#include

“Clevel.h“void

main()

{

Clevel

l(“Dat.txt“);

//建立对象之后又输入文件名的数据计算结果

}

3.

运行结果

B:

1

0

0

0

1

0

1

0

0

0

1

0

-1

1

0

-1

0

1

0

0

-1

P:

0.909091

0.588235

0.434783

0.37037

0.416667

0.714286

0.384615

L:

0.0000

-0.0000

0.0040

0.0030

0.0070

0.0000

0.0020

中误差:

0.0022

观测值改正数:

-0.0002

0.0029

-0.0042

-0.0001

-0.0039

-0.0006

-0.0011

改正后观测值h0:1.3588

改正后观测值h1:2.0119

改正后观测值h2:0.3588

改正后观测值h3:1.0119

改正后观测值h4:0.6531

改正后观测值h5:0.2374

改正后观测值h6:-0.5961

改正后高程值P1:6.

TAG标签: