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,
unsigned outmask,
114 real& s12s, real& m12a, real& m0,
115 real& M12, real& M21)
const;
117 real sbet1, real cbet1, real dn1,
118 real sbet2, real cbet2, real dn2,
119 real lam12, real slam12, real clam12,
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, real slam120, real clam120,
125 real& salp2, real& calp2, real& sig12,
126 real& ssig1, real& csig1, real& ssig2, real& csig2,
128 real& domg12,
bool diffp, real& dlam12)
const;
129 real GenInverse(real lat1, real lon1, real lat2, real lon2,
130 unsigned outmask, real& s12,
131 real& salp1, real& calp1, real& salp2, real& calp2,
132 real& m12, real& M12, real& M21, real& S12)
const;
137 void C4f(real k2, real
c[])
const;
144 return ldexp(
real(hi), 52) + lo;
169 LATITUDE = 1
U<<7 | CAP_NONE,
174 LONGITUDE = 1
U<<8 | CAP_H,
181 AZIMUTH = 1
U<<9 | CAP_NONE,
186 DISTANCE = 1
U<<10 | CAP_E,
192 DISTANCE_IN = 1
U<<11 | CAP_E,
197 REDUCEDLENGTH = 1
U<<12 | CAP_D,
202 GEODESICSCALE = 1
U<<13 | CAP_D,
207 AREA = 1
U<<14 | CAP_C4,
212 LONG_UNROLL = 1
U<<15,
218 ALL = OUT_ALL| CAP_ALL,
275 real& lat2, real& lon2, real& azi2,
276 real& m12, real& M12, real& M21, real& S12)
279 return GenDirect(lat1, lon1, azi1,
false, s12,
280 LATITUDE | LONGITUDE | AZIMUTH |
281 REDUCEDLENGTH | GEODESICSCALE | AREA,
282 lat2, lon2, azi2, t, m12, M12, M21, S12);
289 real& lat2, real& lon2)
292 return GenDirect(lat1, lon1, azi1,
false, s12,
293 LATITUDE | LONGITUDE,
294 lat2, lon2, t, t, t, t, t, t);
301 real& lat2, real& lon2, real& azi2)
304 return GenDirect(lat1, lon1, azi1,
false, s12,
305 LATITUDE | LONGITUDE | AZIMUTH,
306 lat2, lon2, azi2, t, t, t, t, t);
313 real& lat2, real& lon2, real& azi2, real& m12)
316 return GenDirect(lat1, lon1, azi1,
false, s12,
317 LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH,
318 lat2, lon2, azi2, t, m12, t, t, t);
325 real& lat2, real& lon2, real& azi2,
326 real& M12, real& M21)
329 return GenDirect(lat1, lon1, azi1,
false, s12,
330 LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE,
331 lat2, lon2, azi2, t, t, M12, M21, t);
338 real& lat2, real& lon2, real& azi2,
339 real& m12, real& M12, real& M21)
342 return GenDirect(lat1, lon1, azi1,
false, s12,
343 LATITUDE | LONGITUDE | AZIMUTH |
344 REDUCEDLENGTH | GEODESICSCALE,
345 lat2, lon2, azi2, t, m12, M12, M21, t);
386 void ArcDirect(real lat1, real lon1, real azi1, real a12,
387 real& lat2, real& lon2, real& azi2, real& s12,
388 real& m12, real& M12, real& M21, real& S12)
390 GenDirect(lat1, lon1, azi1,
true, a12,
391 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
392 REDUCEDLENGTH | GEODESICSCALE | AREA,
393 lat2, lon2, azi2, s12, m12, M12, M21, S12);
399 void ArcDirect(real lat1, real lon1, real azi1, real a12,
400 real& lat2, real& lon2)
const {
402 GenDirect(lat1, lon1, azi1,
true, a12,
403 LATITUDE | LONGITUDE,
404 lat2, lon2, t, t, t, t, t, t);
410 void ArcDirect(real lat1, real lon1, real azi1, real a12,
411 real& lat2, real& lon2, real& azi2)
const {
413 GenDirect(lat1, lon1, azi1,
true, a12,
414 LATITUDE | LONGITUDE | AZIMUTH,
415 lat2, lon2, azi2, t, t, t, t, t);
421 void ArcDirect(real lat1, real lon1, real azi1, real a12,
422 real& lat2, real& lon2, real& azi2, real& s12)
425 GenDirect(lat1, lon1, azi1,
true, a12,
426 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
427 lat2, lon2, azi2, s12, t, t, t, t);
433 void ArcDirect(real lat1, real lon1, real azi1, real a12,
434 real& lat2, real& lon2, real& azi2,
435 real& s12, real& m12)
const {
437 GenDirect(lat1, lon1, azi1,
true, a12,
438 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
440 lat2, lon2, azi2, s12, m12, t, t, t);
446 void ArcDirect(real lat1, real lon1, real azi1, real a12,
447 real& lat2, real& lon2, real& azi2, real& s12,
448 real& M12, real& M21)
const {
450 GenDirect(lat1, lon1, azi1,
true, a12,
451 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
453 lat2, lon2, azi2, s12, t, M12, M21, t);
459 void ArcDirect(real lat1, real lon1, real azi1, real a12,
460 real& lat2, real& lon2, real& azi2, real& s12,
461 real& m12, real& M12, real& M21)
const {
463 GenDirect(lat1, lon1, azi1,
true, a12,
464 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
465 REDUCEDLENGTH | GEODESICSCALE,
466 lat2, lon2, azi2, s12, m12, M12, M21, t);
524 Math::real GenDirect(real lat1, real lon1, real azi1,
525 bool arcmode, real s12_a12,
unsigned outmask,
526 real& lat2, real& lon2, real& azi2,
527 real& s12, real& m12, real& M12, real& M21,
566 real& s12, real& azi1, real& azi2, real& m12,
567 real& M12, real& M21, real& S12)
const {
568 return GenInverse(lat1, lon1, lat2, lon2,
570 REDUCEDLENGTH | GEODESICSCALE | AREA,
571 s12, azi1, azi2, m12, M12, M21, S12);
580 return GenInverse(lat1, lon1, lat2, lon2,
582 s12, t, t, t, t, t, t);
589 real& azi1, real& azi2)
const {
591 return GenInverse(lat1, lon1, lat2, lon2,
593 t, azi1, azi2, t, t, t, t);
600 real& s12, real& azi1, real& azi2)
603 return GenInverse(lat1, lon1, lat2, lon2,
605 s12, azi1, azi2, t, t, t, t);
612 real& s12, real& azi1, real& azi2, real& m12)
615 return GenInverse(lat1, lon1, lat2, lon2,
616 DISTANCE | AZIMUTH | REDUCEDLENGTH,
617 s12, azi1, azi2, m12, t, t, t);
624 real& s12, real& azi1, real& azi2,
625 real& M12, real& M21)
const {
627 return GenInverse(lat1, lon1, lat2, lon2,
628 DISTANCE | AZIMUTH | GEODESICSCALE,
629 s12, azi1, azi2, t, M12, M21, t);
636 real& s12, real& azi1, real& azi2, real& m12,
637 real& M12, real& M21)
const {
639 return GenInverse(lat1, lon1, lat2, lon2,
641 REDUCEDLENGTH | GEODESICSCALE,
642 s12, azi1, azi2, m12, M12, M21, t);
682 Math::real GenInverse(real lat1, real lon1, real lat2, real lon2,
684 real& s12, real& azi1, real& azi2,
685 real& m12, real& M12, real& M21, real& S12)
const;
730 unsigned caps = ALL)
const;
751 unsigned caps = ALL)
const;
774 unsigned caps = ALL)
const;
797 unsigned caps = ALL)
const;
823 bool arcmode, real s12_a12,
824 unsigned caps = ALL)
const;
863 #endif // GEOGRAPHICLIB_GEODESICEXACT_HPP
void ArcDirect(real lat1, real lon1, real azi1, real a12, real &lat2, real &lon2, real &azi2, real &s12) const
#define GEOGRAPHICLIB_EXPORT
Math::real Inverse(real lat1, real lon1, real lat2, real lon2, real &azi1, 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
Elliptic integrals and functions.
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 &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, real &M12, real &M21) const
#define GEOGRAPHICLIB_GEODESICEXACT_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
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
Point2(* f)(const Point3 &, OptionalJacobian< 2, 3 >)
Namespace for GeographicLib.
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
Header for GeographicLib::EllipticFunction class.
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
Exact geodesic calculations.
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, 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
Header for GeographicLib::Constants class.
Math::real EllipsoidArea() 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) const
static Math::real reale(long long hi, long long lo)
Math::real Direct(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2) const
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
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) const