#ifndef _FUNC_H #define _FUNC_H #include #include #include #include #include #include #include #include #define OUTPUT "-o" #define WGS84 "WGS84" #define RADIUS "-d" #define RANGE "-r" #define INSERT "-i" #define FILE "-f" #define pole_radius 6356752.3//WGS84椭球极半径 #define equator_radius 6378137//WGS84椭球长半径 #define pi 3.1415926535897932384626433832795 using namespace std; struct point3d { double x,y,z; }; double WGS84_r(double lati) { return pole_radius*equator_radius/sqrt(pow(pole_radius,2)*pow(cos((double) lati*pi/180.0),2)+pow(equator_radius,2)*pow(sin((double) lati*pi/180.0),2)); } point3d SCS2CCS(double phi,double thet,double radius) { point3d v; v.x = radius*sin((0.5-thet/180.0)*pi)*cos((2.0+phi/180.0)*pi); v.y = radius*sin((0.5-thet/180.0)*pi)*sin((2.0+phi/180.0)*pi); v.z = radius*cos((0.5-thet/180.0)*pi); return v; } int create_grid(double radius,int* interval,int* range,string outname) { point3d posi; int d_phi = *interval,d_thet = *(interval+1); int xmin = *range,xmax = *(range+1),ymin = *(range+2),ymax = *(range+3); ofstream outfile(outname.c_str()); if (radius==-1.0) { for (int i = ymin; i <= ymax; i+=d_thet) { for (int j = xmin; j <= xmax; j+=d_phi) { posi = SCS2CCS(j,i,WGS84_r(i)); outfile<>temp_phi>>temp_thet>>temp_radius; } if (radius==-1.0) { posi = SCS2CCS(temp_phi,temp_thet,WGS84_r(temp_thet)+temp_radius); outfile<