测绘程序设计基础实验七
实验报告
班 级:测绘0903班
姓 名:
学 号: 指导老师:
实验 7 常用测量程序设计
一、实验目的
1、巩固类的创建与使用 2、掌握数组参数的传递
3、掌握常用测绘程序设计的技巧
二、实验内容
要清楚计算步骤和公式,还有各个参数计算的前后顺序。编写高斯正反算公式。
界面设计
三、实验步骤
1、combox 。
我为了实现椭球参数的选择使用了combox 控件。 添加每行的显示信息
添加combox 函数,定义一个全局变量type 获得选择的参数
2、添加一个C++类,编写关于高斯正反算的各个函数 在头文件中定义
在CPP 中写函数 定义参数
角度转换
改变参数
3、调用函数
四、实验结果 正算:
反算:
#include "stdafx.h" #include "Gauss.h" #include "math.h"
const double PI=3.[***********][1**********]95; double a=6378245;
double b=6356863.0187730473; double e2=sqr(a*a-b*b)/a; double e'2=sqr(a*a-b*b)/b;
double dms2deg(double dms)//度分秒转换度 {
double deg;
int idegree imin; double dsec;
idegree=int(dms);
imin=int((dms-idegree)*100);
dsec=((dms-idegree)*100-imin)*100;
deg=ideree+double(imin/60)+double(dsec/3600); return deg; }
double deg2dms(double deg)//度转换度分秒 {
double dms; int idegree imin; double dsec; double dtmp; idegree=int(dms);
dtmp=(deg=idegree)*60; immin=int(dtmp); dsec=(dtmp-imin)*60; return dms; }
//椭球参数
void ellipd(int type) {
if (type==0) {
a=6378245;
b=6356863.0187730473; e2=0.[***********]; e'2=0.[**************]97; };
if (type==1) {
a=6378140;
b=6356755.2881575287; e2=0.[***********]; e'2=0.[***********]; }; }
//正算
double ComptX(double B) {
double
a0=1+3/4*e2+45/64*pow(e2,2)+350/512*pow(e2,3)+11025/16384*pow(e2,4); double
a2=-1/2*(3/4*e2+60/64*pow(e2,2)+525/512*pow(e2,3)+17640/16384*pow(e2,4)); double a4=1/4*(15/64*pow(e2,2)+210/512*pow(e2,3)+8820/16384*pow(e2,4)); double a6=-1/6*(35/512*pow(e2,3)+2520/16384*pow(e2,4)); double a8=1/8*(315/16384*pow(e2,4));
double X=a*(1-e2)*(a0*B+a2*sin(2*B)+a4*sin(4*B)+a6*sin(6*B)+a8*sin(8*B)); return X; }
double ComptForward(double B,double L,double cmd,int type,double &x,double &y) {
L=dms2deg(L);
cmd=dms2deg(cmd);
double l=(L-cmd)*3600/206265; double b=dms2deg(B)*PI/180; ellipd(type)
double N=a/sqr(1-e2*sin(b)*sin(b)); double t=tan(b);
double n=sqr(e'2)*cos(b); double X=ComptX(b)
x=X+1/2*N*sin(b)*cos(b)*l*l+1/24*N*sin(b)*pow(cos(b),3)*pow(l,4)*(5-t*t+9*n*n+4*pow(n,4))+1/720*pow(l,6)*N*sin(b)*pow(cos(b),5)*(61-58*t*t+pow(t,4))
y=l*N*cos(b)+1/6*pow(l,3)*N*pow(cos(b),3)*(1-t*t+n*n)+1/120*pow(l,5)*N*pow(cos(b),5)*(5-18*t*t+pow(t,4)+14*n*n-58*n*n*t*t) }
//反算
double ComptBf(double x) {
double
a0=1+3/4*e2+45/64*pow(e2,2)+350/512*pow(e2,3)+11025/16384*pow(e2,4); double B0=x/(a*(1-e2)*a0); double
K0=1/2*(3/4*e2+45/64*pow(e2,2)+350/512*pow(e2,3)+11025/16384*pow(e2,4)); double K2=-1/3*(63/64*pow(e2,2)+1108/512*pow(e2,3)+58239/16384*pow(e2,4)); double K4=1/3*(604/512*pow(e2,3)+68484/16384*pow(e2,4));
double K6=-1/3*(26328/16384*pow(e2,4)); double
Bf=B0+sin(2*B0)*(K0+sin(B0)*sin(B0)*(K2+sin(B0)*sin(B0)*(K4+K6*sin(B0)*sin(B0)))); return Bf; }
double ComptInserse(double x,double y,double cmd,int type,double &B,double &L) {
double Bf=ComptBf(Bf); double tf=tan(Bf);
double nf=sqr(e'2)*cos(Bf);
double Nf=a/sqr(1-e2*sin(Bf)*sin(Bf)); double Mf=Nf/(1+e'2*cos(Bf)*cos(Bf)); y=y-500000;
B=Bf-1/(2*Mf*Nf)*tf*y*y+pow(y,4)*tf*(5+3*tf*tf+nf*nf-9*tf*tf*nf*nf)/(24*Mf*pow(Nf,3))-tf*pow(y,6)*(61+90*tf*tf+45*pow(tf,4))/(720*Mf*pow(Nf,5));
l=y/(Nf*cos(Bf))-pow(y,3)*(1+2*tf*tf+nf*nf)+pow(y,5)*(5+28*tf*tf+24*pow(tf,4)+6*nf*nf+8*nf*nf*tf*tf);
L=deg2dms(l/PI*180+dms2deg(cmd)); B=deg2dms(B/PI*180) }
测绘程序设计基础实验七
实验报告
班 级:测绘0903班
姓 名:
学 号: 指导老师:
实验 7 常用测量程序设计
一、实验目的
1、巩固类的创建与使用 2、掌握数组参数的传递
3、掌握常用测绘程序设计的技巧
二、实验内容
要清楚计算步骤和公式,还有各个参数计算的前后顺序。编写高斯正反算公式。
界面设计
三、实验步骤
1、combox 。
我为了实现椭球参数的选择使用了combox 控件。 添加每行的显示信息
添加combox 函数,定义一个全局变量type 获得选择的参数
2、添加一个C++类,编写关于高斯正反算的各个函数 在头文件中定义
在CPP 中写函数 定义参数
角度转换
改变参数
3、调用函数
四、实验结果 正算:
反算:
#include "stdafx.h" #include "Gauss.h" #include "math.h"
const double PI=3.[***********][1**********]95; double a=6378245;
double b=6356863.0187730473; double e2=sqr(a*a-b*b)/a; double e'2=sqr(a*a-b*b)/b;
double dms2deg(double dms)//度分秒转换度 {
double deg;
int idegree imin; double dsec;
idegree=int(dms);
imin=int((dms-idegree)*100);
dsec=((dms-idegree)*100-imin)*100;
deg=ideree+double(imin/60)+double(dsec/3600); return deg; }
double deg2dms(double deg)//度转换度分秒 {
double dms; int idegree imin; double dsec; double dtmp; idegree=int(dms);
dtmp=(deg=idegree)*60; immin=int(dtmp); dsec=(dtmp-imin)*60; return dms; }
//椭球参数
void ellipd(int type) {
if (type==0) {
a=6378245;
b=6356863.0187730473; e2=0.[***********]; e'2=0.[**************]97; };
if (type==1) {
a=6378140;
b=6356755.2881575287; e2=0.[***********]; e'2=0.[***********]; }; }
//正算
double ComptX(double B) {
double
a0=1+3/4*e2+45/64*pow(e2,2)+350/512*pow(e2,3)+11025/16384*pow(e2,4); double
a2=-1/2*(3/4*e2+60/64*pow(e2,2)+525/512*pow(e2,3)+17640/16384*pow(e2,4)); double a4=1/4*(15/64*pow(e2,2)+210/512*pow(e2,3)+8820/16384*pow(e2,4)); double a6=-1/6*(35/512*pow(e2,3)+2520/16384*pow(e2,4)); double a8=1/8*(315/16384*pow(e2,4));
double X=a*(1-e2)*(a0*B+a2*sin(2*B)+a4*sin(4*B)+a6*sin(6*B)+a8*sin(8*B)); return X; }
double ComptForward(double B,double L,double cmd,int type,double &x,double &y) {
L=dms2deg(L);
cmd=dms2deg(cmd);
double l=(L-cmd)*3600/206265; double b=dms2deg(B)*PI/180; ellipd(type)
double N=a/sqr(1-e2*sin(b)*sin(b)); double t=tan(b);
double n=sqr(e'2)*cos(b); double X=ComptX(b)
x=X+1/2*N*sin(b)*cos(b)*l*l+1/24*N*sin(b)*pow(cos(b),3)*pow(l,4)*(5-t*t+9*n*n+4*pow(n,4))+1/720*pow(l,6)*N*sin(b)*pow(cos(b),5)*(61-58*t*t+pow(t,4))
y=l*N*cos(b)+1/6*pow(l,3)*N*pow(cos(b),3)*(1-t*t+n*n)+1/120*pow(l,5)*N*pow(cos(b),5)*(5-18*t*t+pow(t,4)+14*n*n-58*n*n*t*t) }
//反算
double ComptBf(double x) {
double
a0=1+3/4*e2+45/64*pow(e2,2)+350/512*pow(e2,3)+11025/16384*pow(e2,4); double B0=x/(a*(1-e2)*a0); double
K0=1/2*(3/4*e2+45/64*pow(e2,2)+350/512*pow(e2,3)+11025/16384*pow(e2,4)); double K2=-1/3*(63/64*pow(e2,2)+1108/512*pow(e2,3)+58239/16384*pow(e2,4)); double K4=1/3*(604/512*pow(e2,3)+68484/16384*pow(e2,4));
double K6=-1/3*(26328/16384*pow(e2,4)); double
Bf=B0+sin(2*B0)*(K0+sin(B0)*sin(B0)*(K2+sin(B0)*sin(B0)*(K4+K6*sin(B0)*sin(B0)))); return Bf; }
double ComptInserse(double x,double y,double cmd,int type,double &B,double &L) {
double Bf=ComptBf(Bf); double tf=tan(Bf);
double nf=sqr(e'2)*cos(Bf);
double Nf=a/sqr(1-e2*sin(Bf)*sin(Bf)); double Mf=Nf/(1+e'2*cos(Bf)*cos(Bf)); y=y-500000;
B=Bf-1/(2*Mf*Nf)*tf*y*y+pow(y,4)*tf*(5+3*tf*tf+nf*nf-9*tf*tf*nf*nf)/(24*Mf*pow(Nf,3))-tf*pow(y,6)*(61+90*tf*tf+45*pow(tf,4))/(720*Mf*pow(Nf,5));
l=y/(Nf*cos(Bf))-pow(y,3)*(1+2*tf*tf+nf*nf)+pow(y,5)*(5+28*tf*tf+24*pow(tf,4)+6*nf*nf+8*nf*nf*tf*tf);
L=deg2dms(l/PI*180+dms2deg(cmd)); B=deg2dms(B/PI*180) }