247{
248
249
250
251
252
253
254
255 double L1,L2,sinU1,sinU2,cosU1,cosU2;
256 double dl,dl1,dl2,dl3,cosdl1,sindl1;
257 double cosSigma,sigma,azimuthEQ,tsm;
258 double u2,A,B;
259 double dsigma;
260
261 double TEMP;
262
263 int iterations;
264
265
266 L1 = atan((1.0 - sphere->
f ) * tan( lat1) );
267 L2 = atan((1.0 - sphere->
f ) * tan( lat2) );
268 sinU1 = sin(L1);
269 sinU2 = sin(L2);
270 cosU1 = cos(L1);
271 cosU2 = cos(L2);
272
273 dl = long2- long1;
274 dl1 = dl;
275 cosdl1 = cos(dl);
276 sindl1 = sin(dl);
277 iterations = 0;
278 do
279 {
280 cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosdl1;
281 sigma = acos(cosSigma);
282 azimuthEQ = asin((cosU1 * cosU2 * sindl1)/sin(sigma));
283
284
285
286
287
288 TEMP = cosSigma - (2.0 * sinU1 * sinU2)/
289 (cos(azimuthEQ)*cos(azimuthEQ));
290 if (TEMP > 1)
291 {
292 TEMP = 1;
293 }
294 else if (TEMP < -1)
295 {
296 TEMP = -1;
297 }
298 tsm = acos(TEMP);
299
300
301
302
303
304
306 dl3 = dl1 - (dl + dl2);
307 dl1 = dl + dl2;
308 cosdl1 = cos(dl1);
309 sindl1 = sin(dl1);
310 iterations++;
311 }
312 while ( (iterations<999) && (fabs(dl3) > 1.0e-032));
313
314
315 u2 =
mu2(azimuthEQ,sphere);
318
319
320 dsigma = B * sin(sigma) * (cos(tsm) +
321 (B*cosSigma*(-1.0 + 2.0 * (cos(tsm)*cos(tsm))))/4.0);
322 return sphere->
b * (A * (sigma - dsigma));
323}
double mu2(double azimuth, SPHEROID *sphere)
double deltaLongitude(double azimuth, double sigma, double tsm, SPHEROID *sphere)