测绘程序设计课程实习报告 本文关键词:测绘,程序设计,实习报告,课程
测绘程序设计课程实习报告 本文简介:测绘程序设计课程实习报告一、实习目的巩固之前所学的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.