49 double gf_ori_lon = -80.0 *
YAC_RAD;
50 double gf_ori_lat = 25.0 *
YAC_RAD;
51 double gf_end_lon = -1.8 *
YAC_RAD;
52 double gf_end_lat = 50.0 *
YAC_RAD;
53 double gf_dmp_lon = -25.5 *
YAC_RAD;
54 double gf_dmp_lat = 55.5 *
YAC_RAD;
56 double dr0 = sqrt(pow(gf_end_lon - gf_ori_lon, 2.0) +
57 pow(gf_end_lat - gf_ori_lat, 2.0));
58 double dr1 = sqrt(pow(gf_dmp_lon - gf_ori_lon, 2.0) +
59 pow(gf_dmp_lat - gf_ori_lat, 2.0));
61 if (lon > M_PI) lon -= 2.0 * M_PI;
62 if (lon < -M_PI) lon += 2.0 * M_PI;
64 double dx = lon - gf_ori_lon;
65 double dy = lat - gf_ori_lat;
66 double dr = sqrt(dx * dx + dy * dy);
67 double dth = atan2(dy, dx);
68 double dc = 1.3 * gf_coef;
69 if (dr > dr0) dc = 0.0;
70 if (dr > dr1) dc = dc * cos(M_PI*0.5*(dr-dr1)/(dr0-dr1));
72 (
MAX(1000.0 * sin(0.4 * (0.5*dr+dth) +
73 0.007*cos(50.0*dth) + 0.37*M_PI),999.0) - 999.0) * dc;
87 double dSinC = sin(dLat0);
88 double dCosC = cos(dLat0);
92 double dCosT = cos(lat);
93 double dSinT = sin(lat);
95 double dTrm = dCosT * cos(lon - dLon0);
96 double dX = dSinC * dTrm - dCosC * dSinT;
97 double dY = dCosT * sin(lon - dLon0);
98 double dZ = dSinC * dSinT + dCosC * dTrm;
100 double dlon = atan2(dY, dX);
101 if(dlon < 0.0) dlon = dlon + 2.0 * M_PI;
102 double dlat = asin(dZ);
104 double dRho = dR0 * cos(dlat);
105 double dVt = 3.0 * sqrt(3.0)/2.0/cosh(dRho)/cosh(dRho)*tanh(dRho);
106 double dOmega = (dRho == 0.0)?0.0:dVt/dRho;
108 return 2.0 * (1.0 + tanh(dRho / dD * sin(dlon - dOmega * dT)));