10#if !defined(GEOGRAPHICLIB_GEODESICEXACT_HPP)
11#define GEOGRAPHICLIB_GEODESICEXACT_HPP 1
19 class GeodesicLineExact;
92 static const unsigned maxit1_ = 20;
94 real tiny_, tol0_, tol1_, tol2_, tolb_, xthresh_;
111 real _a, _f, _f1, _e2, _ep2, _n, _b, _c2, _etol2;
115 void Lengths(
const EllipticFunction& E,
119 real cbet1,
real cbet2,
unsigned outmask,
122 real InverseStart(EllipticFunction& E,
134 real& domg12,
bool diffp,
real& dlam12)
const;
136 unsigned outmask,
real& s12,
142 real X, tX, tdX, sX, sX1, sXX1, asinhsX, _k2;
175 LATITUDE = 1U<<7 | CAP_NONE,
180 LONGITUDE = 1U<<8 | CAP_H,
187 AZIMUTH = 1U<<9 | CAP_NONE,
192 DISTANCE = 1U<<10 | CAP_E,
199 STANDARD = LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
205 DISTANCE_IN = 1U<<11 | CAP_E,
210 REDUCEDLENGTH = 1U<<12 | CAP_D,
215 GEODESICSCALE = 1U<<13 | CAP_D,
220 AREA = 1U<<14 | CAP_C4,
225 LONG_UNROLL = 1U<<15,
231 ALL = OUT_ALL| CAP_ALL,
288 real& lat2, real& lon2, real& azi2,
289 real& m12, real& M12, real& M21, real& S12)
292 return GenDirect(lat1, lon1, azi1,
false, s12,
293 LATITUDE | LONGITUDE | AZIMUTH |
294 REDUCEDLENGTH | GEODESICSCALE | AREA,
295 lat2, lon2, azi2, t, m12, M12, M21, S12);
302 real& lat2, real& lon2)
305 return GenDirect(lat1, lon1, azi1,
false, s12,
306 LATITUDE | LONGITUDE,
307 lat2, lon2, t, t, t, t, t, t);
314 real& lat2, real& lon2, real& azi2)
317 return GenDirect(lat1, lon1, azi1,
false, s12,
318 LATITUDE | LONGITUDE | AZIMUTH,
319 lat2, lon2, azi2, t, t, t, t, t);
326 real& lat2, real& lon2, real& azi2, real& m12)
329 return GenDirect(lat1, lon1, azi1,
false, s12,
330 LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH,
331 lat2, lon2, azi2, t, m12, t, t, t);
338 real& lat2, real& lon2, real& azi2,
339 real& M12, real& M21)
342 return GenDirect(lat1, lon1, azi1,
false, s12,
343 LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE,
344 lat2, lon2, azi2, t, t, M12, M21, t);
351 real& lat2, real& lon2, real& azi2,
352 real& m12, real& M12, real& M21)
355 return GenDirect(lat1, lon1, azi1,
false, s12,
356 LATITUDE | LONGITUDE | AZIMUTH |
357 REDUCEDLENGTH | GEODESICSCALE,
358 lat2, lon2, azi2, t, m12, M12, M21, t);
399 void ArcDirect(real lat1, real lon1, real azi1, real a12,
400 real& lat2, real& lon2, real& azi2, real& s12,
401 real& m12, real& M12, real& M21, real& S12)
403 GenDirect(lat1, lon1, azi1,
true, a12,
404 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
405 REDUCEDLENGTH | GEODESICSCALE | AREA,
406 lat2, lon2, azi2, s12, m12, M12, M21, S12);
412 void ArcDirect(real lat1, real lon1, real azi1, real a12,
413 real& lat2, real& lon2)
const {
415 GenDirect(lat1, lon1, azi1,
true, a12,
416 LATITUDE | LONGITUDE,
417 lat2, lon2, t, t, t, t, t, t);
423 void ArcDirect(real lat1, real lon1, real azi1, real a12,
424 real& lat2, real& lon2, real& azi2)
const {
426 GenDirect(lat1, lon1, azi1,
true, a12,
427 LATITUDE | LONGITUDE | AZIMUTH,
428 lat2, lon2, azi2, t, t, t, t, t);
434 void ArcDirect(real lat1, real lon1, real azi1, real a12,
435 real& lat2, real& lon2, real& azi2, real& s12)
438 GenDirect(lat1, lon1, azi1,
true, a12,
439 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
440 lat2, lon2, azi2, s12, t, t, t, t);
446 void ArcDirect(real lat1, real lon1, real azi1, real a12,
447 real& lat2, real& lon2, real& azi2,
448 real& s12, real& m12)
const {
450 GenDirect(lat1, lon1, azi1,
true, a12,
451 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
453 lat2, lon2, azi2, s12, m12, t, t, t);
459 void ArcDirect(real lat1, real lon1, real azi1, real a12,
460 real& lat2, real& lon2, real& azi2, real& s12,
461 real& M12, real& M21)
const {
463 GenDirect(lat1, lon1, azi1,
true, a12,
464 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
466 lat2, lon2, azi2, s12, t, M12, M21, t);
472 void ArcDirect(real lat1, real lon1, real azi1, real a12,
473 real& lat2, real& lon2, real& azi2, real& s12,
474 real& m12, real& M12, real& M21)
const {
476 GenDirect(lat1, lon1, azi1,
true, a12,
477 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
478 REDUCEDLENGTH | GEODESICSCALE,
479 lat2, lon2, azi2, s12, m12, M12, M21, t);
538 bool arcmode,
real s12_a12,
unsigned outmask,
579 real& s12, real& azi1, real& azi2, real& m12,
580 real& M12, real& M21, real& S12)
const {
581 return GenInverse(lat1, lon1, lat2, lon2,
583 REDUCEDLENGTH | GEODESICSCALE | AREA,
584 s12, azi1, azi2, m12, M12, M21, S12);
593 return GenInverse(lat1, lon1, lat2, lon2,
595 s12, t, t, t, t, t, t);
602 real& azi1, real& azi2)
const {
604 return GenInverse(lat1, lon1, lat2, lon2,
606 t, azi1, azi2, t, t, t, t);
613 real& s12, real& azi1, real& azi2)
616 return GenInverse(lat1, lon1, lat2, lon2,
618 s12, azi1, azi2, t, t, t, t);
625 real& s12, real& azi1, real& azi2, real& m12)
628 return GenInverse(lat1, lon1, lat2, lon2,
629 DISTANCE | AZIMUTH | REDUCEDLENGTH,
630 s12, azi1, azi2, m12, t, t, t);
637 real& s12, real& azi1, real& azi2,
638 real& M12, real& M21)
const {
640 return GenInverse(lat1, lon1, lat2, lon2,
641 DISTANCE | AZIMUTH | GEODESICSCALE,
642 s12, azi1, azi2, t, M12, M21, t);
649 real& s12, real& azi1, real& azi2, real& m12,
650 real& M12, real& M21)
const {
652 return GenInverse(lat1, lon1, lat2, lon2,
654 REDUCEDLENGTH | GEODESICSCALE,
655 s12, azi1, azi2, m12, M12, M21, t);
748 unsigned caps = ALL)
const;
769 unsigned caps = ALL)
const;
792 unsigned caps = ALL)
const;
815 unsigned caps = ALL)
const;
841 bool arcmode, real s12_a12,
842 unsigned caps = ALL)
const;
Header for GeographicLib::Constants class.
#define GEOGRAPHICLIB_EXPORT
Header for GeographicLib::DST class.
Header for GeographicLib::EllipticFunction class.
GeographicLib::Math::real real
Exact geodesic calculations.
Math::real Direct(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21) const
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &M12, real &M21) const
Math::real Direct(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12) const
Math::real EllipsoidArea() const
Math::real Flattening() const
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12, real &M12, real &M21, real &S12) const
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12) const
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21) const
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12) const
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12) const
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12, real &M12, real &M21) const
Math::real Direct(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &M12, real &M21) const
Math::real Direct(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2) const
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &azi1, real &azi2) const
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2) const
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2) const
Math::real Direct(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21, real &S12) const
Math::real EquatorialRadius() const
Math::real Direct(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2) const
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12) const
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2) const
GeodesicLineExact LineClass
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &M12, real &M21) const
Namespace for GeographicLib.