47 double gf_ori_lon = -80.0 *
YAC_RAD;
48 double gf_ori_lat = 25.0 *
YAC_RAD;
49 double gf_end_lon = -1.8 *
YAC_RAD;
50 double gf_end_lat = 50.0 *
YAC_RAD;
51 double gf_dmp_lon = -25.5 *
YAC_RAD;
52 double gf_dmp_lat = 55.5 *
YAC_RAD;
54 double dr0 = sqrt(pow(gf_end_lon - gf_ori_lon, 2.0) +
55 pow(gf_end_lat - gf_ori_lat, 2.0));
56 double dr1 = sqrt(pow(gf_dmp_lon - gf_ori_lon, 2.0) +
57 pow(gf_dmp_lat - gf_ori_lat, 2.0));
59 if (lon > M_PI) lon -= 2.0 * M_PI;
60 if (lon < -M_PI) lon += 2.0 * M_PI;
62 double dx = lon - gf_ori_lon;
63 double dy = lat - gf_ori_lat;
64 double dr = sqrt(dx * dx + dy * dy);
65 double dth = atan2(dy, dx);
66 double dc = 1.3 * gf_coef;
67 if (dr > dr0) dc = 0.0;
68 if (dr > dr1) dc = dc * cos(M_PI*0.5*(dr-dr1)/(dr0-dr1));
70 (
MAX(1000.0 * sin(0.4 * (0.5*dr+dth) +
71 0.007*cos(50.0*dth) + 0.37*M_PI),999.0) - 999.0) * dc;
85 double dSinC = sin(dLat0);
86 double dCosC = cos(dLat0);
90 double dCosT = cos(lat);
91 double dSinT = sin(lat);
93 double dTrm = dCosT * cos(lon - dLon0);
94 double dX = dSinC * dTrm - dCosC * dSinT;
95 double dY = dCosT * sin(lon - dLon0);
96 double dZ = dSinC * dSinT + dCosC * dTrm;
98 double dlon = atan2(dY, dX);
99 if(dlon < 0.0) dlon = dlon + 2.0 * M_PI;
100 double dlat = asin(dZ);
102 double dRho = dR0 * cos(dlat);
103 double dVt = 3.0 * sqrt(3.0)/2.0/cosh(dRho)/cosh(dRho)*tanh(dRho);
104 double dOmega = (dRho == 0.0)?0.0:dVt/dRho;
106 return 2.0 * (1.0 + tanh(dRho / dD * sin(dlon - dOmega * dT)));