int G_begin_geodesic_equation(double lon1, double lat1, double lon2, double lat2) { double sin21, tan1, tan2; adjust_lon(&lon1); adjust_lon(&lon2); adjust_lat(&lat1); adjust_lat(&lat2); if (lon1 > lon2) { register double temp; SWAP(lon1, lon2); SWAP(lat1, lat2); } if (lon1 == lon2) { A = B = 0.0; return 0; } lon1 = Radians(lon1); lon2 = Radians(lon2); lat1 = Radians(lat1); lat2 = Radians(lat2); sin21 = sin(lon2 - lon1); tan1 = tan(lat1); tan2 = tan(lat2); A = (tan2 * cos(lon1) - tan1 * cos(lon2)) / sin21; B = (tan2 * sin(lon1) - tan1 * sin(lon2)) / sin21; return 1; }
int G_begin_geodesic_equation(double lon1, double lat1, double lon2, double lat2) { double sin21, tan1, tan2; adjust_lon(&lon1); adjust_lon(&lon2); adjust_lat(&lat1); adjust_lat(&lat2); if (lon1 > lon2) { double temp; temp = lon1; lon1 = lon2; lon2 = temp; temp = lat1; lat1 = lat2; lat2 = temp; } if (lon1 == lon2) { st->A = st->B = 0.0; return 0; } lon1 = Radians(lon1); lon2 = Radians(lon2); lat1 = Radians(lat1); lat2 = Radians(lat2); sin21 = sin(lon2 - lon1); tan1 = tan(lat1); tan2 = tan(lat2); st->A = (tan2 * cos(lon1) - tan1 * cos(lon2)) / sin21; st->B = (tan2 * sin(lon1) - tan1 * sin(lon2)) / sin21; return 1; }
int G_begin_rhumbline_equation(double lon1, double lat1, double lon2, double lat2) { adjust_lat(&lat1); adjust_lat(&lat2); if (lon1 == lon2) { st->parallel = 1; /* a lie */ st->L = lat1; return 0; } if (lat1 == lat2) { st->parallel = 1; st->L = lat1; return 1; } st->parallel = 0; lon1 = Radians(lon1); lon2 = Radians(lon2); lat1 = Radians(lat1); lat2 = Radians(lat2); st->TAN1 = tan(M_PI_4 + lat1 / 2.0); st->TAN2 = tan(M_PI_4 + lat2 / 2.0); st->TAN_A = (lon2 - lon1) / (log(st->TAN2) - log(st->TAN1)); st->L = lon1; return 1; }