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_;
96 static constexpr unsigned CAP_NONE = 0U;
97 static constexpr unsigned CAP_E = 1U<<0;
99 static constexpr unsigned CAP_D = 1U<<2;
100 static constexpr unsigned CAP_H = 1U<<3;
101 static constexpr unsigned CAP_C4 = 1U<<4;
102 static constexpr unsigned CAP_ALL = 0x1FU;
103 static constexpr unsigned CAP_MASK = CAP_ALL;
104 static constexpr unsigned OUT_ALL = 0x7F80U;
105 static constexpr unsigned OUT_MASK = 0xFF80U;
109 real _a, _f, _f1, _e2, _ep2, _n, _b, _c2, _etol2;
117 real cbet1,
real cbet2,
unsigned outmask,
132 real& domg12,
bool diffp,
real& dlam12)
const;
134 unsigned outmask,
real& s12,
140 real X, tX, tdX, sX, sX1, sXX1, asinhsX, _k2;
173 LATITUDE = 1U<<7 | CAP_NONE,
178 LONGITUDE = 1U<<8 | CAP_H,
185 AZIMUTH = 1U<<9 | CAP_NONE,
190 DISTANCE = 1U<<10 | CAP_E,
197 STANDARD = LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
203 DISTANCE_IN = 1U<<11 | CAP_E,
208 REDUCEDLENGTH = 1U<<12 | CAP_D,
213 GEODESICSCALE = 1U<<13 | CAP_D,
218 AREA = 1U<<14 | CAP_C4,
223 LONG_UNROLL = 1U<<15,
229 ALL = OUT_ALL| CAP_ALL,
286 real& lat2, real& lon2, real& azi2,
287 real& m12, real& M12, real& M21, real& S12)
290 return GenDirect(lat1, lon1, azi1,
false, s12,
291 LATITUDE | LONGITUDE | AZIMUTH |
292 REDUCEDLENGTH | GEODESICSCALE | AREA,
293 lat2, lon2, azi2, t, m12, M12, M21, S12);
300 real& lat2, real& lon2)
303 return GenDirect(lat1, lon1, azi1,
false, s12,
304 LATITUDE | LONGITUDE,
305 lat2, lon2, t, t, t, t, t, t);
312 real& lat2, real& lon2, real& azi2)
315 return GenDirect(lat1, lon1, azi1,
false, s12,
316 LATITUDE | LONGITUDE | AZIMUTH,
317 lat2, lon2, azi2, t, t, t, t, t);
324 real& lat2, real& lon2, real& azi2, real& m12)
327 return GenDirect(lat1, lon1, azi1,
false, s12,
328 LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH,
329 lat2, lon2, azi2, t, m12, t, t, t);
336 real& lat2, real& lon2, real& azi2,
337 real& M12, real& M21)
340 return GenDirect(lat1, lon1, azi1,
false, s12,
341 LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE,
342 lat2, lon2, azi2, t, t, M12, M21, t);
349 real& lat2, real& lon2, real& azi2,
350 real& m12, real& M12, real& M21)
353 return GenDirect(lat1, lon1, azi1,
false, s12,
354 LATITUDE | LONGITUDE | AZIMUTH |
355 REDUCEDLENGTH | GEODESICSCALE,
356 lat2, lon2, azi2, t, m12, M12, M21, t);
397 void ArcDirect(real lat1, real lon1, real azi1, real a12,
398 real& lat2, real& lon2, real& azi2, real& s12,
399 real& m12, real& M12, real& M21, real& S12)
401 GenDirect(lat1, lon1, azi1,
true, a12,
402 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
403 REDUCEDLENGTH | GEODESICSCALE | AREA,
404 lat2, lon2, azi2, s12, m12, M12, M21, S12);
410 void ArcDirect(real lat1, real lon1, real azi1, real a12,
411 real& lat2, real& lon2)
const {
413 GenDirect(lat1, lon1, azi1,
true, a12,
414 LATITUDE | LONGITUDE,
415 lat2, lon2, t, t, t, t, t, t);
421 void ArcDirect(real lat1, real lon1, real azi1, real a12,
422 real& lat2, real& lon2, real& azi2)
const {
424 GenDirect(lat1, lon1, azi1,
true, a12,
425 LATITUDE | LONGITUDE | AZIMUTH,
426 lat2, lon2, azi2, t, t, t, t, t);
432 void ArcDirect(real lat1, real lon1, real azi1, real a12,
433 real& lat2, real& lon2, real& azi2, real& s12)
436 GenDirect(lat1, lon1, azi1,
true, a12,
437 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
438 lat2, lon2, azi2, s12, t, t, t, t);
444 void ArcDirect(real lat1, real lon1, real azi1, real a12,
445 real& lat2, real& lon2, real& azi2,
446 real& s12, real& m12)
const {
448 GenDirect(lat1, lon1, azi1,
true, a12,
449 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
451 lat2, lon2, azi2, s12, m12, t, t, t);
457 void ArcDirect(real lat1, real lon1, real azi1, real a12,
458 real& lat2, real& lon2, real& azi2, real& s12,
459 real& M12, real& M21)
const {
461 GenDirect(lat1, lon1, azi1,
true, a12,
462 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
464 lat2, lon2, azi2, s12, t, M12, M21, t);
470 void ArcDirect(real lat1, real lon1, real azi1, real a12,
471 real& lat2, real& lon2, real& azi2, real& s12,
472 real& m12, real& M12, real& M21)
const {
474 GenDirect(lat1, lon1, azi1,
true, a12,
475 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
476 REDUCEDLENGTH | GEODESICSCALE,
477 lat2, lon2, azi2, s12, m12, M12, M21, t);
536 bool arcmode,
real s12_a12,
unsigned outmask,
577 real& s12, real& azi1, real& azi2, real& m12,
578 real& M12, real& M21, real& S12)
const {
579 return GenInverse(lat1, lon1, lat2, lon2,
581 REDUCEDLENGTH | GEODESICSCALE | AREA,
582 s12, azi1, azi2, m12, M12, M21, S12);
591 return GenInverse(lat1, lon1, lat2, lon2,
593 s12, t, t, t, t, t, t);
600 real& azi1, real& azi2)
const {
602 return GenInverse(lat1, lon1, lat2, lon2,
604 t, azi1, azi2, t, t, t, t);
611 real& s12, real& azi1, real& azi2)
614 return GenInverse(lat1, lon1, lat2, lon2,
616 s12, azi1, azi2, t, t, t, t);
623 real& s12, real& azi1, real& azi2, real& m12)
626 return GenInverse(lat1, lon1, lat2, lon2,
627 DISTANCE | AZIMUTH | REDUCEDLENGTH,
628 s12, azi1, azi2, m12, t, t, t);
635 real& s12, real& azi1, real& azi2,
636 real& M12, real& M21)
const {
638 return GenInverse(lat1, lon1, lat2, lon2,
639 DISTANCE | AZIMUTH | GEODESICSCALE,
640 s12, azi1, azi2, t, M12, M21, t);
647 real& s12, real& azi1, real& azi2, real& m12,
648 real& M12, real& M21)
const {
650 return GenInverse(lat1, lon1, lat2, lon2,
652 REDUCEDLENGTH | GEODESICSCALE,
653 s12, azi1, azi2, m12, M12, M21, t);
746 unsigned caps = ALL)
const;
767 unsigned caps = ALL)
const;
790 unsigned caps = ALL)
const;
813 unsigned caps = ALL)
const;
839 bool arcmode, real s12_a12,
840 unsigned caps = ALL)
const;
866 {
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.