⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gauss.cpp

📁 高斯 克吕格投影... 实现XY<->BL的坐标正反算...已给起始坐标... 若要自己输入可以将注释部分的注释符取消
💻 CPP
字号:
#include "iostream.h"
#include "math.h"
#define Pi 3.141592653589793
#define Rho 206264.80624709636
double Rad(double d_Angle)
{
	double d_Temp1,d_Temp2;
	double d_Rad;
	cout.precision(20);
	d_Temp1=d_Angle-(int)d_Angle;
	d_Temp1*=100;
	d_Temp2=d_Temp1-(int)d_Temp1;
	d_Temp1=d_Temp1-d_Temp2;
	d_Temp2*=100;
	d_Rad=d_Angle-d_Temp1/100-d_Temp2/10000+d_Temp1/60+d_Temp2/3600;
//	d_Rad=d_Rad*Pi/180;
	d_Rad=d_Rad*3600/Rho;
//	cout<<d_Rad<<endl;
	return d_Rad;
}
//弧度显示为角度
void DisplayAngle(double d_Rad)
{
	int n_Temp1,n_Temp2;
	double d_Temp3;
	d_Rad*=Rho;
	n_Temp1=(int)(d_Rad/3600);
	n_Temp2=(int)((d_Rad-n_Temp1*3600)/60);
	d_Temp3=d_Rad-n_Temp1*3600-n_Temp2*60;
	cout.precision(6);
	cout<<n_Temp1<<"°"<<n_Temp2<<"′"<<d_Temp3<<"″"<<endl;
}
//正算函数
void Count_1(double d_B,double d_L,double d_L0,double &x,double &y)
{
	double d_l,d_N,d_a0,d_a4,d_a6,d_a3,d_a5;
	d_l=d_L-d_L0;
	d_N=6399698.902-(21562.267-(108.973-0.612*pow(cos(d_B),2))
		*pow(cos(d_B),2))*pow(cos(d_B),2);
	d_a0=32140.404-(135.3302-(0.7092-0.0040*pow(cos(d_B),2))
		*pow(cos(d_B),2))*pow(cos(d_B),2);
	d_a4=(0.25+0.00252*pow(cos(d_B),2))*pow(cos(d_B),2)-0.04166;
	d_a6=(0.166*pow(cos(d_B),2)-0.084)*pow(cos(d_B),2);
	d_a3=(0.3333333+0.001123*pow(cos(d_B),2))*pow(cos(d_B),2)-0.1666667;
	d_a5=0.0083-(0.1667-(0.1968+0.0040*pow(cos(d_B),2))*pow(cos(d_B),2))*pow(cos(d_B),2);
/*  //调试用
    cout<<"Debug:"<<endl;
    cout.precision(20);
	cout<<"l="<<d_l<<"\nN="<<d_N<<"\na0="
		<<d_a0<<"\na4="<<d_a4<<"\na6="<<d_a6<<"\na3="<<d_a3<<"\na5="<<d_a5<<endl;*/
	x=6367558.4969*d_B-(d_a0-(0.5+(d_a4+d_a6*d_l*d_l)*d_l*d_l)*d_l*d_l*d_N)
		*sin(d_B)*cos(d_B);
	y=(1+(d_a3+d_a5*d_l*d_l)*d_l*d_l)*d_l*d_N*cos(d_B);
}
//反算函数
void Count_2(double d_x,double d_y,double d_L0,double &B,double &L)
{
	double d_Bf,d_Beta,d_Z,d_Nf,d_b2,d_b3,d_b4,d_b5;
	d_Beta=d_x/6367558.4969;
	d_Bf=d_Beta+(50221746+(293622+(2350+22*pow(cos(d_Beta),2))*pow(cos(d_Beta),2))
		*pow(cos(d_Beta),2))/pow(10,10)*sin(d_Beta)*cos(d_Beta);
	d_Nf=6399698.902-(21562.2679-(108.973-0.612*pow(cos(d_Bf),2))*pow(cos(d_Bf),2))
		*pow(cos(d_Bf),2);
	d_Z=d_y/(d_Nf*cos(d_Bf));
	d_b2=(0.5+0.003369*pow(cos(d_Bf),2))*sin(d_Bf)*cos(d_Bf);
	d_b3=0.333333-(0.166667-0.001123*pow(cos(d_Bf),2))*pow(cos(d_Bf),2);
	d_b4=0.25+(0.16161+0.00562*pow(cos(d_Bf),2))*pow(cos(d_Bf),2);
	d_b5=0.2-(0.1667-0.0088*pow(cos(d_Bf),2))*pow(cos(d_Bf),2);
	B=d_Bf-(1-(d_b4-0.12*d_Z*d_Z)*d_Z*d_Z)*d_Z*d_Z*d_b2;
	L=(1-(d_b3-d_b5*d_Z*d_Z)*d_Z*d_Z)*d_Z+d_L0;
/*  //调试用
    cout<<"Debug:"<<endl;
	cout.precision(20);
    cout<<"Beta="<<d_Beta*Rho<<"\nBf="<<d_Bf*Rho<<"\nb3="
		<<d_b3<<"\nb4="<<d_b4<<"\nb5="<<d_b5<<"\nb2="<<d_b2<<"\nZ="<<d_Z<<"\nNf="<<d_Nf<<endl;*/
}
int main()
{
	double d_B,d_L,d_L0;
	d_L0=111.0*3600.0/Rho;//中央经线
	double d_x,d_y;
	cout.precision(20);//确保输出数据精度
/*	cout<<"Please input the B:";
	cin>>d_B;
	cout<<"Please input the L:";
	cin>>d_L;
	cout<<"Please input the L0:";
	cin>>d_L0;
	d_L0=Rad(d_L0);*/
	d_B=30.45254425;
	d_L=111.17583596;
//	d_B=30.30;
//	d_L=114.20;
	//把输入的经纬度转为弧度值
	d_B=Rad(d_B);
	d_L=Rad(d_L);
	Count_1(d_B,d_L,d_L0,d_x,d_y);
	cout<<"result:\nx="<<d_x<<"m\ny="<<d_y+500000<<"m"<<endl;
	double d_B1,d_L1;
	Count_2(d_x,d_y,d_L0,d_B1,d_L1);
	cout<<"back:"<<endl;
	cout<<"B=";
	DisplayAngle(d_B1);
	cout<<"L=";
	DisplayAngle(d_L1);
	return 0;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -