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)))
26 namespace GeographicLib {
181 static const int nA3x_ = nA3_;
183 static const int nC3x_ = (nC3_ * (nC3_ - 1)) / 2;
185 static const int nC4x_ = (nC4_ * (nC4_ + 1)) / 2;
186 static const unsigned maxit1_ = 20;
188 real tiny_, tol0_, tol1_, tol2_, tolb_, xthresh_;
203 static real SinCosSeries(
bool sinp,
207 real _a, _f, _f1, _e2, _ep2, _n, _b, _c2, _etol2;
208 real _A3x[nA3x_], _C3x[nC3x_], _C4x[nC4x_];
235 static void C1f(
real eps,
real c[]);
236 static void C1pf(
real eps,
real c[]);
238 static void C2f(
real eps,
real c[]);
268 LATITUDE = 1U<<7 | CAP_NONE,
273 LONGITUDE = 1U<<8 | CAP_C3,
280 AZIMUTH = 1U<<9 | CAP_NONE,
285 DISTANCE = 1U<<10 | CAP_C1,
291 DISTANCE_IN = 1U<<11 | CAP_C1 | CAP_C1p,
296 REDUCEDLENGTH = 1U<<12 | CAP_C1 | CAP_C2,
301 GEODESICSCALE = 1U<<13 | CAP_C1 | CAP_C2,
306 AREA = 1U<<14 | CAP_C4,
312 LONG_UNROLL = 1U<<15,
314 LONG_NOWRAP = LONG_UNROLL,
321 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);
492 void ArcDirect(real lat1, real lon1, real azi1, real a12,
493 real& lat2, real& lon2, real& azi2, real& s12,
494 real& m12, real& M12, real& M21, real& S12)
496 GenDirect(lat1, lon1, azi1,
true, a12,
497 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
498 REDUCEDLENGTH | GEODESICSCALE | AREA,
499 lat2, lon2, azi2, s12, m12, M12, M21, S12);
505 void ArcDirect(real lat1, real lon1, real azi1, real a12,
506 real& lat2, real& lon2)
const {
508 GenDirect(lat1, lon1, azi1,
true, a12,
509 LATITUDE | LONGITUDE,
510 lat2, lon2, t, t, t, t, t, t);
516 void ArcDirect(real lat1, real lon1, real azi1, real a12,
517 real& lat2, real& lon2, real& azi2)
const {
519 GenDirect(lat1, lon1, azi1,
true, a12,
520 LATITUDE | LONGITUDE | AZIMUTH,
521 lat2, lon2, azi2, t, t, t, t, t);
527 void ArcDirect(real lat1, real lon1, real azi1, real a12,
528 real& lat2, real& lon2, real& azi2, real& s12)
531 GenDirect(lat1, lon1, azi1,
true, a12,
532 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
533 lat2, lon2, azi2, s12, t, t, t, t);
539 void ArcDirect(real lat1, real lon1, real azi1, real a12,
540 real& lat2, real& lon2, real& azi2,
541 real& s12, real& m12)
const {
543 GenDirect(lat1, lon1, azi1,
true, a12,
544 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
546 lat2, lon2, azi2, s12, m12, t, t, t);
552 void ArcDirect(real lat1, real lon1, real azi1, real a12,
553 real& lat2, real& lon2, real& azi2, real& s12,
554 real& M12, real& M21)
const {
556 GenDirect(lat1, lon1, azi1,
true, a12,
557 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
559 lat2, lon2, azi2, s12, t, M12, M21, t);
565 void ArcDirect(real lat1, real lon1, real azi1, real a12,
566 real& lat2, real& lon2, real& azi2, real& s12,
567 real& m12, real& M12, real& M21)
const {
569 GenDirect(lat1, lon1, azi1,
true, a12,
570 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
571 REDUCEDLENGTH | GEODESICSCALE,
572 lat2, lon2, azi2, s12, m12, M12, M21, t);
634 bool arcmode,
real s12_a12,
unsigned outmask,
680 real& s12, real& azi1, real& azi2, real& m12,
681 real& M12, real& M21, real& S12)
const {
682 return GenInverse(lat1, lon1, lat2, lon2,
684 REDUCEDLENGTH | GEODESICSCALE | AREA,
685 s12, azi1, azi2, m12, M12, M21, S12);
694 return GenInverse(lat1, lon1, lat2, lon2,
696 s12, t, t, t, t, t, t);
703 real& azi1, real& azi2)
const {
705 return GenInverse(lat1, lon1, lat2, lon2,
707 t, azi1, azi2, t, t, t, t);
714 real& s12, real& azi1, real& azi2)
717 return GenInverse(lat1, lon1, lat2, lon2,
719 s12, azi1, azi2, t, t, t, t);
726 real& s12, real& azi1, real& azi2, real& m12)
729 return GenInverse(lat1, lon1, lat2, lon2,
730 DISTANCE | AZIMUTH | REDUCEDLENGTH,
731 s12, azi1, azi2, m12, t, t, t);
738 real& s12, real& azi1, real& azi2,
739 real& M12, real& M21)
const {
741 return GenInverse(lat1, lon1, lat2, lon2,
742 DISTANCE | AZIMUTH | GEODESICSCALE,
743 s12, azi1, azi2, t, M12, M21, t);
750 real& s12, real& azi1, real& azi2, real& m12,
751 real& M12, real& M21)
const {
753 return GenInverse(lat1, lon1, lat2, lon2,
755 REDUCEDLENGTH | GEODESICSCALE,
756 s12, azi1, azi2, m12, M12, M21, t);
870 Math::real InverseFlattening()
const {
return 1/_f; }
893 #endif // GEOGRAPHICLIB_GEODESIC_HPP
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &M12, real &M21) const
#define GEOGRAPHICLIB_EXPORT
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12) 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 Direct(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12) const
GeographicLib::Math::real real
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
Math::real MajorRadius() const
void ArcDirect(real lat1, real lon1, real azi1, real a12, 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) const
Math::real Direct(real lat1, real lon1, real azi1, real s12, 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
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12) 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
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2) const
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12) const
Math::real EllipsoidArea() 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, 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, real &azi1, real &azi2, real &m12, real &M12, real &M21) const
Header for GeographicLib::Constants class.
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, real &s12) const
#define GEOGRAPHICLIB_GEODESIC_ORDER
Math::real Direct(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2) 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 Flattening() const