📄 gauss.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 + -