10#if !defined(GEOGRAPHICLIB_GEODESICEXACT_HPP)
11#define GEOGRAPHICLIB_GEODESICEXACT_HPP 1
19 class GeodesicLineExact;
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;
174 LATITUDE = 1U<<7 | CAP_NONE,
179 LONGITUDE = 1U<<8 | CAP_H,
186 AZIMUTH = 1U<<9 | CAP_NONE,
191 DISTANCE = 1U<<10 | CAP_E,
198 STANDARD = LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
204 DISTANCE_IN = 1U<<11 | CAP_E,
209 REDUCEDLENGTH = 1U<<12 | CAP_D,
214 GEODESICSCALE = 1U<<13 | CAP_D,
219 AREA = 1U<<14 | CAP_C4,
224 LONG_UNROLL = 1U<<15,
230 ALL = OUT_ALL| CAP_ALL,
287 real& lat2, real& lon2, real& azi2,
288 real& m12, real& M12, real& M21, real& S12)
291 return GenDirect(lat1, lon1, azi1,
false, s12,
292 LATITUDE | LONGITUDE | AZIMUTH |
293 REDUCEDLENGTH | GEODESICSCALE | AREA,
294 lat2, lon2, azi2, t, m12, M12, M21, S12);
301 real& lat2, real& lon2)
304 return GenDirect(lat1, lon1, azi1,
false, s12,
305 LATITUDE | LONGITUDE,
306 lat2, lon2, t, t, t, t, t, t);
313 real& lat2, real& lon2, real& azi2)
316 return GenDirect(lat1, lon1, azi1,
false, s12,
317 LATITUDE | LONGITUDE | AZIMUTH,
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,
329 LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH,
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,
342 LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE,
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,
355 LATITUDE | LONGITUDE | AZIMUTH |
356 REDUCEDLENGTH | GEODESICSCALE,
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)
402 GenDirect(lat1, lon1, azi1,
true, a12,
403 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
404 REDUCEDLENGTH | GEODESICSCALE | AREA,
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 {
414 GenDirect(lat1, lon1, azi1,
true, a12,
415 LATITUDE | LONGITUDE,
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 {
425 GenDirect(lat1, lon1, azi1,
true, a12,
426 LATITUDE | LONGITUDE | AZIMUTH,
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)
437 GenDirect(lat1, lon1, azi1,
true, a12,
438 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
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 {
449 GenDirect(lat1, lon1, azi1,
true, a12,
450 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
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 {
462 GenDirect(lat1, lon1, azi1,
true, a12,
463 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
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 {
475 GenDirect(lat1, lon1, azi1,
true, a12,
476 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
477 REDUCEDLENGTH | GEODESICSCALE,
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,
582 REDUCEDLENGTH | GEODESICSCALE | AREA,
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,
628 DISTANCE | AZIMUTH | REDUCEDLENGTH,
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,
640 DISTANCE | AZIMUTH | GEODESICSCALE,
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,
653 REDUCEDLENGTH | GEODESICSCALE,
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;
867 {
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.