10 #if !defined(GEOGRAPHICLIB_GEODESIC_HPP)
11 #define GEOGRAPHICLIB_GEODESIC_HPP 1
15 #if !defined(GEOGRAPHICLIB_GEODESIC_ORDER)
20 # define GEOGRAPHICLIB_GEODESIC_ORDER \
21 (GEOGRAPHICLIB_PRECISION == 2 ? 6 : \
22 (GEOGRAPHICLIB_PRECISION == 1 ? 3 : \
23 (GEOGRAPHICLIB_PRECISION == 3 ? 7 : 8)))
182 static const int nA3x_ = nA3_;
184 static const int nC3x_ = (nC3_ * (nC3_ - 1)) / 2;
186 static const int nC4x_ = (nC4_ * (nC4_ + 1)) / 2;
190 static const unsigned maxit1_ = 20;
192 real tiny_, tol0_, tol1_, tol2_, tolb_, xthresh_;
207 static real SinCosSeries(
bool sinp,
211 real _a, _f, _f1, _e2, _ep2, _n, _b, _c2, _etol2;
212 real _A3x[nA3x_], _C3x[nC3x_], _C4x[nC4x_];
217 real cbet1,
real cbet2,
unsigned outmask,
232 bool diffp,
real& dlam12,
real Ca[])
const;
234 unsigned outmask,
real& s12,
241 static void C1f(
real eps,
real c[]);
242 static void C1pf(
real eps,
real c[]);
244 static void C2f(
real eps,
real c[]);
274 LATITUDE = 1U<<7 | CAP_NONE,
279 LONGITUDE = 1U<<8 | CAP_C3,
286 AZIMUTH = 1U<<9 | CAP_NONE,
291 DISTANCE = 1U<<10 | CAP_C1,
297 DISTANCE_IN = 1U<<11 | CAP_C1 | CAP_C1p,
302 REDUCEDLENGTH = 1U<<12 | CAP_C1 | CAP_C2,
307 GEODESICSCALE = 1U<<13 | CAP_C1 | CAP_C2,
312 AREA = 1U<<14 | CAP_C4,
317 LONG_UNROLL = 1U<<15,
323 ALL = OUT_ALL| CAP_ALL,
380 real& lat2, real& lon2, real& azi2,
381 real& m12, real& M12, real& M21, real& S12)
384 return GenDirect(lat1, lon1, azi1,
false, s12,
385 LATITUDE | LONGITUDE | AZIMUTH |
386 REDUCEDLENGTH | GEODESICSCALE | AREA,
387 lat2, lon2, azi2, t, m12, M12, M21, S12);
394 real& lat2, real& lon2)
397 return GenDirect(lat1, lon1, azi1,
false, s12,
398 LATITUDE | LONGITUDE,
399 lat2, lon2, t, t, t, t, t, t);
406 real& lat2, real& lon2, real& azi2)
409 return GenDirect(lat1, lon1, azi1,
false, s12,
410 LATITUDE | LONGITUDE | AZIMUTH,
411 lat2, lon2, azi2, t, t, t, t, t);
418 real& lat2, real& lon2, real& azi2, real& m12)
421 return GenDirect(lat1, lon1, azi1,
false, s12,
422 LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH,
423 lat2, lon2, azi2, t, m12, t, t, t);
430 real& lat2, real& lon2, real& azi2,
431 real& M12, real& M21)
434 return GenDirect(lat1, lon1, azi1,
false, s12,
435 LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE,
436 lat2, lon2, azi2, t, t, M12, M21, t);
443 real& lat2, real& lon2, real& azi2,
444 real& m12, real& M12, real& M21)
447 return GenDirect(lat1, lon1, azi1,
false, s12,
448 LATITUDE | LONGITUDE | AZIMUTH |
449 REDUCEDLENGTH | GEODESICSCALE,
450 lat2, lon2, azi2, t, m12, M12, M21, t);
491 void ArcDirect(real lat1, real lon1, real azi1, real a12,
492 real& lat2, real& lon2, real& azi2, real& s12,
493 real& m12, real& M12, real& M21, real& S12)
495 GenDirect(lat1, lon1, azi1,
true, a12,
496 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
497 REDUCEDLENGTH | GEODESICSCALE | AREA,
498 lat2, lon2, azi2, s12, m12, M12, M21, S12);
504 void ArcDirect(real lat1, real lon1, real azi1, real a12,
505 real& lat2, real& lon2)
const {
507 GenDirect(lat1, lon1, azi1,
true, a12,
508 LATITUDE | LONGITUDE,
509 lat2, lon2, t, t, t, t, t, t);
515 void ArcDirect(real lat1, real lon1, real azi1, real a12,
516 real& lat2, real& lon2, real& azi2)
const {
518 GenDirect(lat1, lon1, azi1,
true, a12,
519 LATITUDE | LONGITUDE | AZIMUTH,
520 lat2, lon2, azi2, t, t, t, t, t);
526 void ArcDirect(real lat1, real lon1, real azi1, real a12,
527 real& lat2, real& lon2, real& azi2, real& s12)
530 GenDirect(lat1, lon1, azi1,
true, a12,
531 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
532 lat2, lon2, azi2, s12, t, t, t, t);
538 void ArcDirect(real lat1, real lon1, real azi1, real a12,
539 real& lat2, real& lon2, real& azi2,
540 real& s12, real& m12)
const {
542 GenDirect(lat1, lon1, azi1,
true, a12,
543 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
545 lat2, lon2, azi2, s12, m12, t, t, t);
551 void ArcDirect(real lat1, real lon1, real azi1, real a12,
552 real& lat2, real& lon2, real& azi2, real& s12,
553 real& M12, real& M21)
const {
555 GenDirect(lat1, lon1, azi1,
true, a12,
556 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
558 lat2, lon2, azi2, s12, t, M12, M21, t);
564 void ArcDirect(real lat1, real lon1, real azi1, real a12,
565 real& lat2, real& lon2, real& azi2, real& s12,
566 real& m12, real& M12, real& M21)
const {
568 GenDirect(lat1, lon1, azi1,
true, a12,
569 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
570 REDUCEDLENGTH | GEODESICSCALE,
571 lat2, lon2, azi2, s12, m12, M12, M21, t);
630 bool arcmode,
real s12_a12,
unsigned outmask,
675 real& s12, real& azi1, real& azi2, real& m12,
676 real& M12, real& M21, real& S12)
const {
677 return GenInverse(lat1, lon1, lat2, lon2,
679 REDUCEDLENGTH | GEODESICSCALE | AREA,
680 s12, azi1, azi2, m12, M12, M21, S12);
689 return GenInverse(lat1, lon1, lat2, lon2,
691 s12, t, t, t, t, t, t);
698 real& azi1, real& azi2)
const {
700 return GenInverse(lat1, lon1, lat2, lon2,
702 t, azi1, azi2, t, t, t, t);
709 real& s12, real& azi1, real& azi2)
712 return GenInverse(lat1, lon1, lat2, lon2,
714 s12, azi1, azi2, t, t, t, t);
721 real& s12, real& azi1, real& azi2, real& m12)
724 return GenInverse(lat1, lon1, lat2, lon2,
725 DISTANCE | AZIMUTH | REDUCEDLENGTH,
726 s12, azi1, azi2, m12, t, t, t);
733 real& s12, real& azi1, real& azi2,
734 real& M12, real& M21)
const {
736 return GenInverse(lat1, lon1, lat2, lon2,
737 DISTANCE | AZIMUTH | GEODESICSCALE,
738 s12, azi1, azi2, t, M12, M21, t);
745 real& s12, real& azi1, real& azi2, real& m12,
746 real& M12, real& M21)
const {
748 return GenInverse(lat1, lon1, lat2, lon2,
750 REDUCEDLENGTH | GEODESICSCALE,
751 s12, azi1, azi2, m12, M12, M21, t);
859 unsigned caps = ALL)
const;
882 unsigned caps = ALL)
const;
905 unsigned caps = ALL)
const;
931 bool arcmode,
real s12_a12,
932 unsigned caps = ALL)
const;
964 Math::real MajorRadius()
const {
return EquatorialRadius(); }
Header for GeographicLib::Constants class.
#define GEOGRAPHICLIB_EXPORT
#define GEOGRAPHICLIB_DEPRECATED(msg)
GeographicLib::Math::real real
#define GEOGRAPHICLIB_GEODESIC_ORDER
Math::real Direct(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12) const
Math::real Direct(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2) 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 Inverse(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12, real &M12, real &M21) const
Math::real Flattening() const
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2) const
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, 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) 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 Inverse(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12) const
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12) 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 Inverse(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2) 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, real &M12, real &M21, real &S12) const
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &azi1, real &azi2) const
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12) const
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12) const
Math::real EllipsoidArea() const
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) 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
Mathematical functions needed by GeographicLib.
Namespace for GeographicLib.