10#if !defined(GEOGRAPHICLIB_GEODESICEXACT_HPP)
11#define GEOGRAPHICLIB_GEODESICEXACT_HPP 1
93 static const unsigned maxit1_ = 20;
95 real tiny_, tol0_, tol1_, tol2_, tolb_, xthresh_;
97 static constexpr unsigned CAP_NONE = 0U;
98 static constexpr unsigned CAP_E = 1U<<0;
100 static constexpr unsigned CAP_D = 1U<<2;
101 static constexpr unsigned CAP_H = 1U<<3;
102 static constexpr unsigned CAP_C4 = 1U<<4;
103 static constexpr unsigned CAP_ALL = 0x1FU;
104 static constexpr unsigned CAP_MASK = CAP_ALL;
105 static constexpr unsigned OUT_ALL = 0x7F80U;
106 static constexpr unsigned OUT_MASK = 0xFF80U;
110 real _a, _f, _f1, _e2, _ep2, _n, _b, _c2, _etol2;
118 real cbet1,
real cbet2,
unsigned outmask,
133 real& domg12,
bool diffp,
real& dlam12)
const;
135 unsigned outmask,
real& s12,
141 real X, tX, tdX, sX, sX1, sXX1, asinhsX, _k2;
287 real& lat2, real& lon2, real& azi2,
288 real& m12, real& M12, real& M21, real& S12)
291 return GenDirect(lat1, lon1, azi1,
false, s12,
294 lat2, lon2, azi2, t, m12, M12, M21, S12);
301 real& lat2, real& lon2)
304 return GenDirect(lat1, lon1, azi1,
false, s12,
306 lat2, lon2, t, t, t, t, t, t);
313 real& lat2, real& lon2, real& azi2)
316 return GenDirect(lat1, lon1, azi1,
false, s12,
318 lat2, lon2, azi2, t, t, t, t, t);
325 real& lat2, real& lon2, real& azi2, real& m12)
328 return GenDirect(lat1, lon1, azi1,
false, s12,
330 lat2, lon2, azi2, t, m12, t, t, t);
337 real& lat2, real& lon2, real& azi2,
338 real& M12, real& M21)
341 return GenDirect(lat1, lon1, azi1,
false, s12,
343 lat2, lon2, azi2, t, t, M12, M21, t);
350 real& lat2, real& lon2, real& azi2,
351 real& m12, real& M12, real& M21)
354 return GenDirect(lat1, lon1, azi1,
false, s12,
357 lat2, lon2, azi2, t, m12, M12, M21, t);
398 void ArcDirect(real lat1, real lon1, real azi1, real a12,
399 real& lat2, real& lon2, real& azi2, real& s12,
400 real& m12, real& M12, real& M21, real& S12)
405 lat2, lon2, azi2, s12, m12, M12, M21, S12);
411 void ArcDirect(real lat1, real lon1, real azi1, real a12,
412 real& lat2, real& lon2)
const {
416 lat2, lon2, t, t, t, t, t, t);
422 void ArcDirect(real lat1, real lon1, real azi1, real a12,
423 real& lat2, real& lon2, real& azi2)
const {
427 lat2, lon2, azi2, t, t, t, t, t);
433 void ArcDirect(real lat1, real lon1, real azi1, real a12,
434 real& lat2, real& lon2, real& azi2, real& s12)
439 lat2, lon2, azi2, s12, t, t, t, t);
445 void ArcDirect(real lat1, real lon1, real azi1, real a12,
446 real& lat2, real& lon2, real& azi2,
447 real& s12, real& m12)
const {
452 lat2, lon2, azi2, s12, m12, t, t, t);
458 void ArcDirect(real lat1, real lon1, real azi1, real a12,
459 real& lat2, real& lon2, real& azi2, real& s12,
460 real& M12, real& M21)
const {
465 lat2, lon2, azi2, s12, t, M12, M21, t);
471 void ArcDirect(real lat1, real lon1, real azi1, real a12,
472 real& lat2, real& lon2, real& azi2, real& s12,
473 real& m12, real& M12, real& M21)
const {
478 lat2, lon2, azi2, s12, m12, M12, M21, t);
537 bool arcmode,
real s12_a12,
unsigned outmask,
578 real& s12, real& azi1, real& azi2, real& m12,
579 real& M12, real& M21, real& S12)
const {
580 return GenInverse(lat1, lon1, lat2, lon2,
583 s12, azi1, azi2, m12, M12, M21, S12);
592 return GenInverse(lat1, lon1, lat2, lon2,
594 s12, t, t, t, t, t, t);
601 real& azi1, real& azi2)
const {
603 return GenInverse(lat1, lon1, lat2, lon2,
605 t, azi1, azi2, t, t, t, t);
612 real& s12, real& azi1, real& azi2)
615 return GenInverse(lat1, lon1, lat2, lon2,
617 s12, azi1, azi2, t, t, t, t);
624 real& s12, real& azi1, real& azi2, real& m12)
627 return GenInverse(lat1, lon1, lat2, lon2,
629 s12, azi1, azi2, m12, t, t, t);
636 real& s12, real& azi1, real& azi2,
637 real& M12, real& M21)
const {
639 return GenInverse(lat1, lon1, lat2, lon2,
641 s12, azi1, azi2, t, M12, M21, t);
648 real& s12, real& azi1, real& azi2, real& m12,
649 real& M12, real& M21)
const {
651 return GenInverse(lat1, lon1, lat2, lon2,
654 s12, azi1, azi2, m12, M12, M21, t);
747 unsigned caps =
ALL)
const;
768 unsigned caps =
ALL)
const;
791 unsigned caps =
ALL)
const;
814 unsigned caps =
ALL)
const;
840 bool arcmode, real s12_a12,
841 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
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
GeodesicLineExact InverseLine(real lat1, real lon1, real lat2, real lon2, unsigned caps=ALL) 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
GeodesicLineExact GenDirectLine(real lat1, real lon1, real azi1, bool arcmode, real s12_a12, unsigned caps=ALL) const
GeodesicLineExact DirectLine(real lat1, real lon1, real azi1, real s12, unsigned caps=ALL) 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
Math::real GenDirect(real lat1, real lon1, real azi1, bool arcmode, real s12_a12, unsigned outmask, real &lat2, real &lon2, real &azi2, real &s12, 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, real &m12, real &M12, real &M21, real &S12) const
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12) const
friend class GeodesicLineExact
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
GeodesicLineExact Line(real lat1, real lon1, real azi1, unsigned caps=ALL) 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
GeodesicLineExact ArcDirectLine(real lat1, real lon1, real azi1, real a12, unsigned caps=ALL) const
Namespace for GeographicLib.