10 #if !defined(GEOGRAPHICLIB_GEODESICEXACT_HPP)
11 #define GEOGRAPHICLIB_GEODESICEXACT_HPP 1
16 #if !defined(GEOGRAPHICLIB_GEODESICEXACT_ORDER)
20 # define GEOGRAPHICLIB_GEODESICEXACT_ORDER 30
25 class GeodesicLineExact;
85 static const int nC4x_ = (nC4_ * (nC4_ + 1)) / 2;
86 static const unsigned maxit1_ = 20;
88 real tiny_, tol0_, tol1_, tol2_, tolb_, xthresh_;
106 real _a, _f, _f1, _e2, _ep2, _n, _b, _c2, _etol2;
113 real cbet1,
real cbet2,
unsigned outmask,
128 real& domg12,
bool diffp,
real& dlam12)
const;
130 unsigned outmask,
real& s12,
142 static Math::real reale(
long long y,
long long z) {
144 return ldexp(
real(y), 52) + z;
146 #if GEOGRAPHICLIB_GEODESICEXACT_ORDER > 30
150 static Math::real reale(
long long x,
long long y,
long long z) {
152 return ldexp(
real(x), 2*52) + (ldexp(
real(y), 52) + z);
154 static Math::real reale(
long long w,
long long x,
155 long long y,
long long z) {
157 return ldexp(
real(w), 3*52) +
158 (ldexp(
real(x), 2*52) + (ldexp(
real(y), 52) + z));
184 LATITUDE = 1U<<7 | CAP_NONE,
189 LONGITUDE = 1U<<8 | CAP_H,
196 AZIMUTH = 1U<<9 | CAP_NONE,
201 DISTANCE = 1U<<10 | CAP_E,
208 STANDARD = LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
214 DISTANCE_IN = 1U<<11 | CAP_E,
219 REDUCEDLENGTH = 1U<<12 | CAP_D,
224 GEODESICSCALE = 1U<<13 | CAP_D,
229 AREA = 1U<<14 | CAP_C4,
234 LONG_UNROLL = 1U<<15,
240 ALL = OUT_ALL| CAP_ALL,
297 real& lat2, real& lon2, real& azi2,
298 real& m12, real& M12, real& M21, real& S12)
301 return GenDirect(lat1, lon1, azi1,
false, s12,
302 LATITUDE | LONGITUDE | AZIMUTH |
303 REDUCEDLENGTH | GEODESICSCALE | AREA,
304 lat2, lon2, azi2, t, m12, M12, M21, S12);
311 real& lat2, real& lon2)
314 return GenDirect(lat1, lon1, azi1,
false, s12,
315 LATITUDE | LONGITUDE,
316 lat2, lon2, t, t, t, t, t, t);
323 real& lat2, real& lon2, real& azi2)
326 return GenDirect(lat1, lon1, azi1,
false, s12,
327 LATITUDE | LONGITUDE | AZIMUTH,
328 lat2, lon2, azi2, t, t, t, t, t);
335 real& lat2, real& lon2, real& azi2, real& m12)
338 return GenDirect(lat1, lon1, azi1,
false, s12,
339 LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH,
340 lat2, lon2, azi2, t, m12, t, t, t);
347 real& lat2, real& lon2, real& azi2,
348 real& M12, real& M21)
351 return GenDirect(lat1, lon1, azi1,
false, s12,
352 LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE,
353 lat2, lon2, azi2, t, t, M12, M21, t);
360 real& lat2, real& lon2, real& azi2,
361 real& m12, real& M12, real& M21)
364 return GenDirect(lat1, lon1, azi1,
false, s12,
365 LATITUDE | LONGITUDE | AZIMUTH |
366 REDUCEDLENGTH | GEODESICSCALE,
367 lat2, lon2, azi2, t, m12, M12, M21, t);
408 void ArcDirect(real lat1, real lon1, real azi1, real a12,
409 real& lat2, real& lon2, real& azi2, real& s12,
410 real& m12, real& M12, real& M21, real& S12)
412 GenDirect(lat1, lon1, azi1,
true, a12,
413 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
414 REDUCEDLENGTH | GEODESICSCALE | AREA,
415 lat2, lon2, azi2, s12, m12, M12, M21, S12);
421 void ArcDirect(real lat1, real lon1, real azi1, real a12,
422 real& lat2, real& lon2)
const {
424 GenDirect(lat1, lon1, azi1,
true, a12,
425 LATITUDE | LONGITUDE,
426 lat2, lon2, t, t, t, t, t, t);
432 void ArcDirect(real lat1, real lon1, real azi1, real a12,
433 real& lat2, real& lon2, real& azi2)
const {
435 GenDirect(lat1, lon1, azi1,
true, a12,
436 LATITUDE | LONGITUDE | AZIMUTH,
437 lat2, lon2, azi2, t, t, t, t, t);
443 void ArcDirect(real lat1, real lon1, real azi1, real a12,
444 real& lat2, real& lon2, real& azi2, real& s12)
447 GenDirect(lat1, lon1, azi1,
true, a12,
448 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
449 lat2, lon2, azi2, s12, t, t, t, t);
455 void ArcDirect(real lat1, real lon1, real azi1, real a12,
456 real& lat2, real& lon2, real& azi2,
457 real& s12, real& m12)
const {
459 GenDirect(lat1, lon1, azi1,
true, a12,
460 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
462 lat2, lon2, azi2, s12, m12, t, t, t);
468 void ArcDirect(real lat1, real lon1, real azi1, real a12,
469 real& lat2, real& lon2, real& azi2, real& s12,
470 real& M12, real& M21)
const {
472 GenDirect(lat1, lon1, azi1,
true, a12,
473 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
475 lat2, lon2, azi2, s12, t, M12, M21, t);
481 void ArcDirect(real lat1, real lon1, real azi1, real a12,
482 real& lat2, real& lon2, real& azi2, real& s12,
483 real& m12, real& M12, real& M21)
const {
485 GenDirect(lat1, lon1, azi1,
true, a12,
486 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
487 REDUCEDLENGTH | GEODESICSCALE,
488 lat2, lon2, azi2, s12, m12, M12, M21, t);
547 bool arcmode,
real s12_a12,
unsigned outmask,
588 real& s12, real& azi1, real& azi2, real& m12,
589 real& M12, real& M21, real& S12)
const {
590 return GenInverse(lat1, lon1, lat2, lon2,
592 REDUCEDLENGTH | GEODESICSCALE | AREA,
593 s12, azi1, azi2, m12, M12, M21, S12);
602 return GenInverse(lat1, lon1, lat2, lon2,
604 s12, t, t, t, t, t, t);
611 real& azi1, real& azi2)
const {
613 return GenInverse(lat1, lon1, lat2, lon2,
615 t, azi1, azi2, t, t, t, t);
622 real& s12, real& azi1, real& azi2)
625 return GenInverse(lat1, lon1, lat2, lon2,
627 s12, azi1, azi2, t, t, t, t);
634 real& s12, real& azi1, real& azi2, real& m12)
637 return GenInverse(lat1, lon1, lat2, lon2,
638 DISTANCE | AZIMUTH | REDUCEDLENGTH,
639 s12, azi1, azi2, m12, t, t, t);
646 real& s12, real& azi1, real& azi2,
647 real& M12, real& M21)
const {
649 return GenInverse(lat1, lon1, lat2, lon2,
650 DISTANCE | AZIMUTH | GEODESICSCALE,
651 s12, azi1, azi2, t, M12, M21, t);
658 real& s12, real& azi1, real& azi2, real& m12,
659 real& M12, real& M21)
const {
661 return GenInverse(lat1, lon1, lat2, lon2,
663 REDUCEDLENGTH | GEODESICSCALE,
664 s12, azi1, azi2, m12, M12, M21, t);
752 unsigned caps = ALL)
const;
773 unsigned caps = ALL)
const;
796 unsigned caps = ALL)
const;
819 unsigned caps = ALL)
const;
845 bool arcmode,
real s12_a12,
846 unsigned caps = ALL)
const;
Header for GeographicLib::Constants class.
#define GEOGRAPHICLIB_EXPORT
Header for GeographicLib::EllipticFunction class.
GeographicLib::Math::real real
#define GEOGRAPHICLIB_GEODESICEXACT_ORDER
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
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.