(VC++-MFC)高斯平均引数大地主题正反算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
地球科学与环境工程学院实验报告书
课程名:
学号:
姓名:
指导老师:
日期:
目录
一、目的与要求 (1)
二、实验内容 (1)
三、计算公式整理 (1)
四、程序代码 (4)
五、计算结果 (15)
六、实验体会 (16)
一、目的与要求
参考椭球面是大地测量计算的基准面。大地坐标是椭球面上的基本坐标系,根据大地测量的观测成果(如距离与方向),从大地原点出发,逐点计算在椭球面上的大地坐标;或根据两点的大地坐标,计算它们之间的大地线长度和大地方位角,这类计算称为大地问题解算(或称为大地主题解算)。大地问题解算的用途是多方面的,随着现代空间技术和航空航天、航海等领域的发展,大地问题解算(尤其是大地反算)有着更为重要的作用,因此需要熟练掌握其计算。
二、实验内容
在《大地测量学基础》教材中,介绍了高斯平均引数法与白塞尔方法的计算过程、步骤。鉴于此,需要熟练掌握高斯平均引数法与白塞尔方法解大地主题问题的基本方法与原理。采用所熟悉的计算机语言编程计算。计算时采用克拉索夫椭球参数,至少完成其中一种方法正反算,按照数据序号选取不同的已知数据,在计算结果中注明所选取的数据序号,选取其它数据作为无效数据处理。
三、计算公式整理
3.1、高斯平均引数正算计算公式(S< 200 km)
3.2、高斯平均引数正算计算公式(S< 200 km)
四、程序代码
4.1、角度转换类的头文件:
#pragma once
const double Pi=3.1493;
class AngleTrans
{
public:
AngleTrans(void);
~AngleTrans(void);
double D,F,M,DFM,Rad,Ten;
double trans1(double DFM), //度分秒形式的角度转换为弧度形式
trans2(double Rad), //弧度形式的角度转换为度分秒形式
trans3(double D); //十进制度转化为弧度
};
4.2、角度转换类的源文件:
#include"StdAfx.h"
#include"AngleTrans.h"
#include
AngleTrans::AngleTrans(void)
{
}
AngleTrans::~AngleTrans(void)
{
}
//度分秒转换为弧度
double AngleTrans::trans1(double DFM)
{ D=floor(DFM);
F=floor((DFM-D)*100);
M=(DFM-D-F/100)*10000;
Ten=D+F/60+M/3600;
Rad=Ten/180*Pi;
return Rad;
}
//弧度转换为度分秒
double AngleTrans::trans2(double Rad)
{ Ten=Rad/Pi*180;
D=floor(Ten);
F=(Ten-D)*60;
M=(F-floor(F))*60;
F=floor(F);
DFM=D+F/100+M/10000;
return DFM;
}
//十进制度转化为弧度
double AngleTrans::trans3(double D)
{ Rad=D/180*Pi;
return Rad;
}
4.3、正反算类的头文件:
#pragma once
class ZhengFanSuan
{
public:
ZhengFanSuan(void);
~ZhengFanSuan(void);
double zB1,zL1,zA12,zS,fB1,fL1,fB2,fL2;
double ZhengSuanB(double zB1,double zL1,double zA12,double zS),
ZhengSuanL(double zB1,double zL1,double zA12,double zS),
ZhengSuanA(double zB1,double zL1,double zA12,double zS);
double FanSuanA12(double fB1,double fL1,double fB2,double fL2),
FanSuanS(double fB1,double fL1,double fB2,double fL2),
FanSuanA21(double fB1,double fL1,double fB2,double fL2); };
4.3、正反算类的源文件:
#include"StdAfx.h"
#include"ZhengFanSuan.h"
#include"AngleTrans.h"
#include
ZhengFanSuan::ZhengFanSuan(void)
{
}
ZhengFanSuan::~ZhengFanSuan(void)
{
}
AngleTrans _AngleTrans;
const double e1= 0.22966,
e2=0.4683,
a=6378245.0000,
b= 6356863.01877,
temp=pow(10.0, -10);//精度要求
double Calc_M(double z) //计算Mm
{ double x=a*(1-pow(e1,2))/sqrt(pow(1-pow(e1,2)*pow(sin(z),2),3));
return x;
}
double Calc_N(double z) //计算Nm
{ double x=a/sqrt(1-pow(e1,2)*pow(sin(z),2));
return x;
}
double Calc_t(double z) //计算tm
{ double x=tan(z);
return x;
}
double Calc_yita(double z) //计算yitam
{ double x=pow(e2,2)*pow(cos(z),2);
return x;
}
//正算纬度
double ZhengFanSuan::ZhengSuanB(double zB1,double zL1,double zA12,double zS) { double M[10000],
N[10000],
t[10000],
B[10000],Bm[10000],
L[10000],Lm[10000],
A[10000],Am[10000],
yita[10000];
double_zB1=_AngleTrans.trans1(zB1),
_zL1=_AngleTrans.trans1(zL1),
_zA12=_AngleTrans.trans1(zA12),