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_;
103 static real CosSeries(real sinx, real cosx,
const real c[],
int n);
104 static real Astroid(real x, real y);
106 real _a, _f, _f1, _e2, _ep2, _n, _b, _c2, _etol2;
111 real ssig1, real csig1, real dn1,
112 real ssig2, real csig2, real dn2,
113 real cbet1, real cbet2,
114 real& s12s, real& m12a, real& m0,
115 bool scalep, real& M12, real& M21)
const;
117 real sbet1, real cbet1, real dn1,
118 real sbet2, real cbet2, real dn2,
120 real& salp1, real& calp1,
121 real& salp2, real& calp2, real& dnm)
const;
122 real Lambda12(real sbet1, real cbet1, real dn1,
123 real sbet2, real cbet2, real dn2,
124 real salp1, real calp1,
125 real& salp2, real& calp2, real& sig12,
126 real& ssig1, real& csig1, real& ssig2, real& csig2,
128 real& omg12,
bool diffp, real& dlam12)
const;
133 void C4f(real k2, real c[])
const;
138 static Math::real inline reale(
long long hi,
long long lo) {
140 return ldexp(
real(hi), 52) + lo;
165 LATITUDE = 1U<<7 | CAP_NONE,
170 LONGITUDE = 1U<<8 | CAP_H,
177 AZIMUTH = 1U<<9 | CAP_NONE,
182 DISTANCE = 1U<<10 | CAP_E,
188 DISTANCE_IN = 1U<<11 | CAP_E,
193 REDUCEDLENGTH = 1U<<12 | CAP_D,
198 GEODESICSCALE = 1U<<13 | CAP_D,
203 AREA = 1U<<14 | CAP_C4,
209 LONG_UNROLL = 1U<<15,
211 LONG_NOWRAP = LONG_UNROLL,
218 ALL = OUT_ALL| CAP_ALL,
277 real& lat2, real& lon2, real& azi2,
278 real& m12, real& M12, real& M21, real& S12)
281 return GenDirect(lat1, lon1, azi1,
false, s12,
282 LATITUDE | LONGITUDE | AZIMUTH |
283 REDUCEDLENGTH | GEODESICSCALE | AREA,
284 lat2, lon2, azi2, t, m12, M12, M21, S12);
291 real& lat2, real& lon2)
294 return GenDirect(lat1, lon1, azi1,
false, s12,
295 LATITUDE | LONGITUDE,
296 lat2, lon2, t, t, t, t, t, t);
303 real& lat2, real& lon2, real& azi2)
306 return GenDirect(lat1, lon1, azi1,
false, s12,
307 LATITUDE | LONGITUDE | AZIMUTH,
308 lat2, lon2, azi2, t, t, t, t, t);
315 real& lat2, real& lon2, real& azi2, real& m12)
318 return GenDirect(lat1, lon1, azi1,
false, s12,
319 LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH,
320 lat2, lon2, azi2, t, m12, t, t, t);
327 real& lat2, real& lon2, real& azi2,
328 real& M12, real& M21)
331 return GenDirect(lat1, lon1, azi1,
false, s12,
332 LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE,
333 lat2, lon2, azi2, t, t, M12, M21, t);
340 real& lat2, real& lon2, real& azi2,
341 real& m12, real& M12, real& M21)
344 return GenDirect(lat1, lon1, azi1,
false, s12,
345 LATITUDE | LONGITUDE | AZIMUTH |
346 REDUCEDLENGTH | GEODESICSCALE,
347 lat2, lon2, azi2, t, m12, M12, M21, t);
389 void ArcDirect(real lat1, real lon1, real azi1, real a12,
390 real& lat2, real& lon2, real& azi2, real& s12,
391 real& m12, real& M12, real& M21, real& S12)
393 GenDirect(lat1, lon1, azi1,
true, a12,
394 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
395 REDUCEDLENGTH | GEODESICSCALE | AREA,
396 lat2, lon2, azi2, s12, m12, M12, M21, S12);
402 void ArcDirect(real lat1, real lon1, real azi1, real a12,
403 real& lat2, real& lon2)
const {
405 GenDirect(lat1, lon1, azi1,
true, a12,
406 LATITUDE | LONGITUDE,
407 lat2, lon2, t, t, t, t, t, t);
413 void ArcDirect(real lat1, real lon1, real azi1, real a12,
414 real& lat2, real& lon2, real& azi2)
const {
416 GenDirect(lat1, lon1, azi1,
true, a12,
417 LATITUDE | LONGITUDE | AZIMUTH,
418 lat2, lon2, azi2, t, t, t, t, t);
424 void ArcDirect(real lat1, real lon1, real azi1, real a12,
425 real& lat2, real& lon2, real& azi2, real& s12)
428 GenDirect(lat1, lon1, azi1,
true, a12,
429 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
430 lat2, lon2, azi2, s12, t, t, t, t);
436 void ArcDirect(real lat1, real lon1, real azi1, real a12,
437 real& lat2, real& lon2, real& azi2,
438 real& s12, real& m12)
const {
440 GenDirect(lat1, lon1, azi1,
true, a12,
441 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
443 lat2, lon2, azi2, s12, m12, t, t, t);
449 void ArcDirect(real lat1, real lon1, real azi1, real a12,
450 real& lat2, real& lon2, real& azi2, real& s12,
451 real& M12, real& M21)
const {
453 GenDirect(lat1, lon1, azi1,
true, a12,
454 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
456 lat2, lon2, azi2, s12, t, M12, M21, t);
462 void ArcDirect(real lat1, real lon1, real azi1, real a12,
463 real& lat2, real& lon2, real& azi2, real& s12,
464 real& m12, real& M12, real& M21)
const {
466 GenDirect(lat1, lon1, azi1,
true, a12,
467 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
468 REDUCEDLENGTH | GEODESICSCALE,
469 lat2, lon2, azi2, s12, m12, M12, M21, t);
530 Math::real GenDirect(real lat1, real lon1, real azi1,
531 bool arcmode, real s12_a12,
unsigned outmask,
532 real& lat2, real& lon2, real& azi2,
533 real& s12, real& m12, real& M12, real& M21,
572 real& s12, real& azi1, real& azi2, real& m12,
573 real& M12, real& M21, real& S12)
const {
574 return GenInverse(lat1, lon1, lat2, lon2,
576 REDUCEDLENGTH | GEODESICSCALE | AREA,
577 s12, azi1, azi2, m12, M12, M21, S12);
586 return GenInverse(lat1, lon1, lat2, lon2,
588 s12, t, t, t, t, t, t);
595 real& azi1, real& azi2)
const {
597 return GenInverse(lat1, lon1, lat2, lon2,
599 t, azi1, azi2, t, t, t, t);
606 real& s12, real& azi1, real& azi2)
609 return GenInverse(lat1, lon1, lat2, lon2,
611 s12, azi1, azi2, t, t, t, t);
618 real& s12, real& azi1, real& azi2, real& m12)
621 return GenInverse(lat1, lon1, lat2, lon2,
622 DISTANCE | AZIMUTH | REDUCEDLENGTH,
623 s12, azi1, azi2, m12, t, t, t);
630 real& s12, real& azi1, real& azi2,
631 real& M12, real& M21)
const {
633 return GenInverse(lat1, lon1, lat2, lon2,
634 DISTANCE | AZIMUTH | GEODESICSCALE,
635 s12, azi1, azi2, t, M12, M21, t);
642 real& s12, real& azi1, real& azi2, real& m12,
643 real& M12, real& M21)
const {
645 return GenInverse(lat1, lon1, lat2, lon2,
647 REDUCEDLENGTH | GEODESICSCALE,
648 s12, azi1, azi2, m12, M12, M21, t);
688 Math::real GenInverse(real lat1, real lon1, real lat2, real lon2,
690 real& s12, real& azi1, real& azi2,
691 real& m12, real& M12, real& M21, real& S12)
763 Math::real InverseFlattening()
const {
return 1/_f; }
786 #endif // GEOGRAPHICLIB_GEODESICEXACT_HPP 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
#define GEOGRAPHICLIB_EXPORT
Math::real Flattening() const
Math::real EllipsoidArea() 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
GeographicLib::Math::real real
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 &M12, real &M21) const
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2) const
Elliptic integrals and functions.
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, 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
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12) const
#define GEOGRAPHICLIB_GEODESICEXACT_ORDER
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 &M21) const
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &azi1, real &azi2) const
Namespace for GeographicLib.
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 &M21) const
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12) const
Header for GeographicLib::EllipticFunction class.
Exact geodesic calculations.
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2) const
Header for GeographicLib::Constants class.
Math::real Direct(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12) const
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &m12) const
Math::real MajorRadius() const
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, 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) 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