10#if !defined(GEOGRAPHICLIB_GEODESIC_HPP)
11#define GEOGRAPHICLIB_GEODESIC_HPP 1
16#if !defined(GEOGRAPHICLIB_GEODESIC_ORDER)
21# define GEOGRAPHICLIB_GEODESIC_ORDER \
22 (GEOGRAPHICLIB_PRECISION == 2 ? 6 : \
23 (GEOGRAPHICLIB_PRECISION == 1 ? 3 : \
24 (GEOGRAPHICLIB_PRECISION == 3 ? 7 : 8)))
185 static const int nA3x_ = nA3_;
187 static const int nC3x_ = (nC3_ * (nC3_ - 1)) / 2;
189 static const int nC4x_ = (nC4_ * (nC4_ + 1)) / 2;
193 static const unsigned maxit1_ = 20;
195 real tiny_, tol0_, tol1_, tol2_, tolb_, xthresh_;
210 static real SinCosSeries(
bool sinp,
216 real _f1, _e2, _ep2, _n, _b, _c2, _etol2;
217 real _aA3x[nA3x_], _cC3x[nC3x_], _cC4x[nC4x_];
223 real cbet1,
real cbet2,
unsigned outmask,
238 bool diffp,
real& dlam12,
real Ca[])
const;
240 unsigned outmask,
real& s12,
247 static void C1f(
real eps,
real c[]);
248 static void C1pf(
real eps,
real c[]);
250 static void C2f(
real eps,
real c[]);
279 LATITUDE = 1U<<7 | CAP_NONE,
284 LONGITUDE = 1U<<8 | CAP_C3,
291 AZIMUTH = 1U<<9 | CAP_NONE,
296 DISTANCE = 1U<<10 | CAP_C1,
302 STANDARD = LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
308 DISTANCE_IN = 1U<<11 | CAP_C1 | CAP_C1p,
313 REDUCEDLENGTH = 1U<<12 | CAP_C1 | CAP_C2,
318 GEODESICSCALE = 1U<<13 | CAP_C1 | CAP_C2,
323 AREA = 1U<<14 | CAP_C4,
328 LONG_UNROLL = 1U<<15,
334 ALL = OUT_ALL| CAP_ALL,
397 real& lat2, real& lon2, real& azi2,
398 real& m12, real& M12, real& M21, real& S12)
401 return GenDirect(lat1, lon1, azi1,
false, s12,
402 LATITUDE | LONGITUDE | AZIMUTH |
403 REDUCEDLENGTH | GEODESICSCALE | AREA,
404 lat2, lon2, azi2, t, m12, M12, M21, S12);
411 real& lat2, real& lon2)
414 return GenDirect(lat1, lon1, azi1,
false, s12,
415 LATITUDE | LONGITUDE,
416 lat2, lon2, t, t, t, t, t, t);
423 real& lat2, real& lon2, real& azi2)
426 return GenDirect(lat1, lon1, azi1,
false, s12,
427 LATITUDE | LONGITUDE | AZIMUTH,
428 lat2, lon2, azi2, t, t, t, t, t);
435 real& lat2, real& lon2, real& azi2, real& m12)
438 return GenDirect(lat1, lon1, azi1,
false, s12,
439 LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH,
440 lat2, lon2, azi2, t, m12, t, t, t);
447 real& lat2, real& lon2, real& azi2,
448 real& M12, real& M21)
451 return GenDirect(lat1, lon1, azi1,
false, s12,
452 LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE,
453 lat2, lon2, azi2, t, t, M12, M21, t);
460 real& lat2, real& lon2, real& azi2,
461 real& m12, real& M12, real& M21)
464 return GenDirect(lat1, lon1, azi1,
false, s12,
465 LATITUDE | LONGITUDE | AZIMUTH |
466 REDUCEDLENGTH | GEODESICSCALE,
467 lat2, lon2, azi2, t, m12, M12, M21, t);
508 void ArcDirect(real lat1, real lon1, real azi1, real a12,
509 real& lat2, real& lon2, real& azi2, real& s12,
510 real& m12, real& M12, real& M21, real& S12)
512 GenDirect(lat1, lon1, azi1,
true, a12,
513 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
514 REDUCEDLENGTH | GEODESICSCALE | AREA,
515 lat2, lon2, azi2, s12, m12, M12, M21, S12);
521 void ArcDirect(real lat1, real lon1, real azi1, real a12,
522 real& lat2, real& lon2)
const {
524 GenDirect(lat1, lon1, azi1,
true, a12,
525 LATITUDE | LONGITUDE,
526 lat2, lon2, t, t, t, t, t, t);
532 void ArcDirect(real lat1, real lon1, real azi1, real a12,
533 real& lat2, real& lon2, real& azi2)
const {
535 GenDirect(lat1, lon1, azi1,
true, a12,
536 LATITUDE | LONGITUDE | AZIMUTH,
537 lat2, lon2, azi2, t, t, t, t, t);
543 void ArcDirect(real lat1, real lon1, real azi1, real a12,
544 real& lat2, real& lon2, real& azi2, real& s12)
547 GenDirect(lat1, lon1, azi1,
true, a12,
548 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
549 lat2, lon2, azi2, s12, t, t, t, t);
555 void ArcDirect(real lat1, real lon1, real azi1, real a12,
556 real& lat2, real& lon2, real& azi2,
557 real& s12, real& m12)
const {
559 GenDirect(lat1, lon1, azi1,
true, a12,
560 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
562 lat2, lon2, azi2, s12, m12, t, t, t);
568 void ArcDirect(real lat1, real lon1, real azi1, real a12,
569 real& lat2, real& lon2, real& azi2, real& s12,
570 real& M12, real& M21)
const {
572 GenDirect(lat1, lon1, azi1,
true, a12,
573 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
575 lat2, lon2, azi2, s12, t, M12, M21, t);
581 void ArcDirect(real lat1, real lon1, real azi1, real a12,
582 real& lat2, real& lon2, real& azi2, real& s12,
583 real& m12, real& M12, real& M21)
const {
585 GenDirect(lat1, lon1, azi1,
true, a12,
586 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
587 REDUCEDLENGTH | GEODESICSCALE,
588 lat2, lon2, azi2, s12, m12, M12, M21, t);
647 bool arcmode,
real s12_a12,
unsigned outmask,
692 real& s12, real& azi1, real& azi2, real& m12,
693 real& M12, real& M21, real& S12)
const {
694 return GenInverse(lat1, lon1, lat2, lon2,
696 REDUCEDLENGTH | GEODESICSCALE | AREA,
697 s12, azi1, azi2, m12, M12, M21, S12);
706 return GenInverse(lat1, lon1, lat2, lon2,
708 s12, t, t, t, t, t, t);
715 real& azi1, real& azi2)
const {
717 return GenInverse(lat1, lon1, lat2, lon2,
719 t, azi1, azi2, t, t, t, t);
726 real& s12, real& azi1, real& azi2)
729 return GenInverse(lat1, lon1, lat2, lon2,
731 s12, azi1, azi2, t, t, t, t);
738 real& s12, real& azi1, real& azi2, real& m12)
741 return GenInverse(lat1, lon1, lat2, lon2,
742 DISTANCE | AZIMUTH | REDUCEDLENGTH,
743 s12, azi1, azi2, m12, t, t, t);
750 real& s12, real& azi1, real& azi2,
751 real& M12, real& M21)
const {
753 return GenInverse(lat1, lon1, lat2, lon2,
754 DISTANCE | AZIMUTH | GEODESICSCALE,
755 s12, azi1, azi2, t, M12, M21, t);
762 real& s12, real& azi1, real& azi2, real& m12,
763 real& M12, real& M21)
const {
765 return GenInverse(lat1, lon1, lat2, lon2,
767 REDUCEDLENGTH | GEODESICSCALE,
768 s12, azi1, azi2, m12, M12, M21, t);
859 GeodesicLine Line(real lat1, real lon1, real azi1,
unsigned caps = ALL)
880 GeodesicLine InverseLine(real lat1, real lon1, real lat2, real lon2,
881 unsigned caps = ALL)
const;
903 GeodesicLine DirectLine(real lat1, real lon1, real azi1, real s12,
904 unsigned caps = ALL)
const;
926 GeodesicLine ArcDirectLine(real lat1, real lon1, real azi1, real a12,
927 unsigned caps = ALL)
const;
952 GeodesicLine GenDirectLine(real lat1, real lon1, real azi1,
953 bool arcmode, real s12_a12,
954 unsigned caps = ALL)
const;
977 bool Exact()
const {
return _exact; }
Header for GeographicLib::Constants class.
#define GEOGRAPHICLIB_EXPORT
GeographicLib::Math::real real
Header for GeographicLib::GeodesicExact class.
#define GEOGRAPHICLIB_GEODESIC_ORDER
Exact geodesic calculations.
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
Namespace for GeographicLib.