10#if !defined(GEOGRAPHICLIB_GEODESICEXACT_HPP)
11#define GEOGRAPHICLIB_GEODESICEXACT_HPP 1
19 class GeodesicLineExact;
96 static const unsigned maxit1_ = 20;
98 real tiny_, tol0_, tol1_, tol2_, tolb_, xthresh_;
100 static constexpr unsigned CAP_NONE = 0U;
101 static constexpr unsigned CAP_E = 1U<<0;
103 static constexpr unsigned CAP_D = 1U<<2;
104 static constexpr unsigned CAP_H = 1U<<3;
105 static constexpr unsigned CAP_C4 = 1U<<4;
106 static constexpr unsigned CAP_ALL = 0x1FU;
107 static constexpr unsigned CAP_MASK = CAP_ALL;
108 static constexpr unsigned OUT_ALL = 0x7F80U;
109 static constexpr unsigned OUT_MASK = 0xFF80U;
113 real _a, _f, _f1, _e2, _ep2, _n, _b, _c2, _etol2;
121 real cbet1,
real cbet2,
unsigned outmask,
136 real& domg12,
bool diffp,
real& dlam12)
const;
138 unsigned outmask,
real& s12,
144 real X, tX, tdX, sX, sX1, sXX1, asinhsX, _k2;
177 LATITUDE = 1U<<7 | CAP_NONE,
182 LONGITUDE = 1U<<8 | CAP_H,
189 AZIMUTH = 1U<<9 | CAP_NONE,
194 DISTANCE = 1U<<10 | CAP_E,
201 STANDARD = LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
207 DISTANCE_IN = 1U<<11 | CAP_E,
212 REDUCEDLENGTH = 1U<<12 | CAP_D,
217 GEODESICSCALE = 1U<<13 | CAP_D,
222 AREA = 1U<<14 | CAP_C4,
227 LONG_UNROLL = 1U<<15,
233 ALL = OUT_ALL| CAP_ALL,
290 real& lat2, real& lon2, real& azi2,
291 real& m12, real& M12, real& M21, real& S12)
294 return GenDirect(lat1, lon1, azi1,
false, s12,
295 LATITUDE | LONGITUDE | AZIMUTH |
296 REDUCEDLENGTH | GEODESICSCALE | AREA,
297 lat2, lon2, azi2, t, m12, M12, M21, S12);
304 real& lat2, real& lon2)
307 return GenDirect(lat1, lon1, azi1,
false, s12,
308 LATITUDE | LONGITUDE,
309 lat2, lon2, t, t, t, t, t, t);
316 real& lat2, real& lon2, real& azi2)
319 return GenDirect(lat1, lon1, azi1,
false, s12,
320 LATITUDE | LONGITUDE | AZIMUTH,
321 lat2, lon2, azi2, t, t, t, t, t);
328 real& lat2, real& lon2, real& azi2, real& m12)
331 return GenDirect(lat1, lon1, azi1,
false, s12,
332 LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH,
333 lat2, lon2, azi2, t, m12, t, t, t);
340 real& lat2, real& lon2, real& azi2,
341 real& M12, real& M21)
344 return GenDirect(lat1, lon1, azi1,
false, s12,
345 LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE,
346 lat2, lon2, azi2, t, t, M12, M21, t);
353 real& lat2, real& lon2, real& azi2,
354 real& m12, real& M12, real& M21)
357 return GenDirect(lat1, lon1, azi1,
false, s12,
358 LATITUDE | LONGITUDE | AZIMUTH |
359 REDUCEDLENGTH | GEODESICSCALE,
360 lat2, lon2, azi2, t, m12, M12, M21, t);
401 void ArcDirect(real lat1, real lon1, real azi1, real a12,
402 real& lat2, real& lon2, real& azi2, real& s12,
403 real& m12, real& M12, real& M21, real& S12)
405 GenDirect(lat1, lon1, azi1,
true, a12,
406 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
407 REDUCEDLENGTH | GEODESICSCALE | AREA,
408 lat2, lon2, azi2, s12, m12, M12, M21, S12);
414 void ArcDirect(real lat1, real lon1, real azi1, real a12,
415 real& lat2, real& lon2)
const {
417 GenDirect(lat1, lon1, azi1,
true, a12,
418 LATITUDE | LONGITUDE,
419 lat2, lon2, t, t, t, t, t, t);
425 void ArcDirect(real lat1, real lon1, real azi1, real a12,
426 real& lat2, real& lon2, real& azi2)
const {
428 GenDirect(lat1, lon1, azi1,
true, a12,
429 LATITUDE | LONGITUDE | AZIMUTH,
430 lat2, lon2, azi2, t, t, t, t, t);
436 void ArcDirect(real lat1, real lon1, real azi1, real a12,
437 real& lat2, real& lon2, real& azi2, real& s12)
440 GenDirect(lat1, lon1, azi1,
true, a12,
441 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
442 lat2, lon2, azi2, s12, t, t, t, t);
448 void ArcDirect(real lat1, real lon1, real azi1, real a12,
449 real& lat2, real& lon2, real& azi2,
450 real& s12, real& m12)
const {
452 GenDirect(lat1, lon1, azi1,
true, a12,
453 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
455 lat2, lon2, azi2, s12, m12, t, t, t);
461 void ArcDirect(real lat1, real lon1, real azi1, real a12,
462 real& lat2, real& lon2, real& azi2, real& s12,
463 real& M12, real& M21)
const {
465 GenDirect(lat1, lon1, azi1,
true, a12,
466 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
468 lat2, lon2, azi2, s12, t, M12, M21, t);
474 void ArcDirect(real lat1, real lon1, real azi1, real a12,
475 real& lat2, real& lon2, real& azi2, real& s12,
476 real& m12, real& M12, real& M21)
const {
478 GenDirect(lat1, lon1, azi1,
true, a12,
479 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
480 REDUCEDLENGTH | GEODESICSCALE,
481 lat2, lon2, azi2, s12, m12, M12, M21, t);
540 bool arcmode,
real s12_a12,
unsigned outmask,
581 real& s12, real& azi1, real& azi2, real& m12,
582 real& M12, real& M21, real& S12)
const {
583 return GenInverse(lat1, lon1, lat2, lon2,
585 REDUCEDLENGTH | GEODESICSCALE | AREA,
586 s12, azi1, azi2, m12, M12, M21, S12);
595 return GenInverse(lat1, lon1, lat2, lon2,
597 s12, t, t, t, t, t, t);
604 real& azi1, real& azi2)
const {
606 return GenInverse(lat1, lon1, lat2, lon2,
608 t, azi1, azi2, t, t, t, t);
615 real& s12, real& azi1, real& azi2)
618 return GenInverse(lat1, lon1, lat2, lon2,
620 s12, azi1, azi2, t, t, t, t);
627 real& s12, real& azi1, real& azi2, real& m12)
630 return GenInverse(lat1, lon1, lat2, lon2,
631 DISTANCE | AZIMUTH | REDUCEDLENGTH,
632 s12, azi1, azi2, m12, t, t, t);
639 real& s12, real& azi1, real& azi2,
640 real& M12, real& M21)
const {
642 return GenInverse(lat1, lon1, lat2, lon2,
643 DISTANCE | AZIMUTH | GEODESICSCALE,
644 s12, azi1, azi2, t, M12, M21, t);
651 real& s12, real& azi1, real& azi2, real& m12,
652 real& M12, real& M21)
const {
654 return GenInverse(lat1, lon1, lat2, lon2,
656 REDUCEDLENGTH | GEODESICSCALE,
657 s12, azi1, azi2, m12, M12, M21, t);
750 unsigned caps = ALL)
const;
771 unsigned caps = ALL)
const;
794 unsigned caps = ALL)
const;
817 unsigned caps = ALL)
const;
843 bool arcmode, real s12_a12,
844 unsigned caps = ALL)
const;
870 {
return 4 * Math::pi() * _c2; }
Header for GeographicLib::Constants class.
#define GEOGRAPHICLIB_EXPORT
Header for GeographicLib::DST class.
Header for GeographicLib::EllipticFunction class.
GeographicLib::Math::real real
Discrete sine transforms.
Elliptic integrals and functions.
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.