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))) 181 static const int nA3x_ = nA3_;
183 static const int nC3x_ = (nC3_ * (nC3_ - 1)) / 2;
185 static const int nC4x_ = (nC4_ * (nC4_ + 1)) / 2;
189 static const unsigned maxit1_ = 20;
191 real tiny_, tol0_, tol1_, tol2_, tolb_, xthresh_;
206 static real SinCosSeries(
bool sinp,
207 real sinx, real cosx,
const real c[],
int n);
208 static real Astroid(real x, real y);
210 real _a, _f, _f1, _e2, _ep2, _n, _b, _c2, _etol2;
211 real _A3x[nA3x_], _C3x[nC3x_], _C4x[nC4x_];
213 void Lengths(real eps, real sig12,
214 real ssig1, real csig1, real dn1,
215 real ssig2, real csig2, real dn2,
216 real cbet1, real cbet2,
unsigned outmask,
217 real& s12s, real& m12a, real& m0,
218 real& M12, real& M21, real Ca[])
const;
219 real InverseStart(real sbet1, real cbet1, real dn1,
220 real sbet2, real cbet2, real dn2,
221 real lam12, real slam12, real clam12,
222 real& salp1, real& calp1,
223 real& salp2, real& calp2, real& dnm,
225 real Lambda12(real sbet1, real cbet1, real dn1,
226 real sbet2, real cbet2, real dn2,
227 real salp1, real calp1, real slam120, real clam120,
228 real& salp2, real& calp2, real& sig12,
229 real& ssig1, real& csig1, real& ssig2, real& csig2,
230 real& eps, real& domg12,
231 bool diffp, real& dlam12, real Ca[])
const;
232 real GenInverse(real lat1, real lon1, real lat2, real lon2,
233 unsigned outmask, real& s12,
234 real& salp1, real& calp1, real& salp2, real& calp2,
235 real& m12, real& M12, real& M21, real& S12)
const;
239 static real A1m1f(real eps);
240 static void C1f(real eps, real c[]);
241 static void C1pf(real eps, real c[]);
242 static real A2m1f(real eps);
243 static void C2f(real eps, real c[]);
246 real A3f(real eps)
const;
248 void C3f(real eps, real c[])
const;
250 void C4f(real k2, real c[])
const;
273 LATITUDE = 1U<<7 | CAP_NONE,
278 LONGITUDE = 1U<<8 | CAP_C3,
285 AZIMUTH = 1U<<9 | CAP_NONE,
290 DISTANCE = 1U<<10 | CAP_C1,
296 DISTANCE_IN = 1U<<11 | CAP_C1 | CAP_C1p,
301 REDUCEDLENGTH = 1U<<12 | CAP_C1 | CAP_C2,
306 GEODESICSCALE = 1U<<13 | CAP_C1 | CAP_C2,
311 AREA = 1U<<14 | CAP_C4,
316 LONG_UNROLL = 1U<<15,
322 ALL = OUT_ALL| CAP_ALL,
379 real& lat2, real& lon2, real& azi2,
380 real& m12, real& M12, real& M21, real& S12)
383 return GenDirect(lat1, lon1, azi1,
false, s12,
384 LATITUDE | LONGITUDE | AZIMUTH |
385 REDUCEDLENGTH | GEODESICSCALE | AREA,
386 lat2, lon2, azi2, t, m12, M12, M21, S12);
393 real& lat2, real& lon2)
396 return GenDirect(lat1, lon1, azi1,
false, s12,
397 LATITUDE | LONGITUDE,
398 lat2, lon2, t, t, t, t, t, t);
405 real& lat2, real& lon2, real& azi2)
408 return GenDirect(lat1, lon1, azi1,
false, s12,
409 LATITUDE | LONGITUDE | AZIMUTH,
410 lat2, lon2, azi2, t, t, t, t, t);
417 real& lat2, real& lon2, real& azi2, real& m12)
420 return GenDirect(lat1, lon1, azi1,
false, s12,
421 LATITUDE | LONGITUDE | AZIMUTH | REDUCEDLENGTH,
422 lat2, lon2, azi2, t, m12, t, t, t);
429 real& lat2, real& lon2, real& azi2,
430 real& M12, real& M21)
433 return GenDirect(lat1, lon1, azi1,
false, s12,
434 LATITUDE | LONGITUDE | AZIMUTH | GEODESICSCALE,
435 lat2, lon2, azi2, t, t, M12, M21, t);
442 real& lat2, real& lon2, real& azi2,
443 real& m12, real& M12, real& M21)
446 return GenDirect(lat1, lon1, azi1,
false, s12,
447 LATITUDE | LONGITUDE | AZIMUTH |
448 REDUCEDLENGTH | GEODESICSCALE,
449 lat2, lon2, azi2, t, m12, M12, M21, t);
490 void ArcDirect(real lat1, real lon1, real azi1, real a12,
491 real& lat2, real& lon2, real& azi2, real& s12,
492 real& m12, real& M12, real& M21, real& S12)
494 GenDirect(lat1, lon1, azi1,
true, a12,
495 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
496 REDUCEDLENGTH | GEODESICSCALE | AREA,
497 lat2, lon2, azi2, s12, m12, M12, M21, S12);
503 void ArcDirect(real lat1, real lon1, real azi1, real a12,
504 real& lat2, real& lon2)
const {
506 GenDirect(lat1, lon1, azi1,
true, a12,
507 LATITUDE | LONGITUDE,
508 lat2, lon2, t, t, t, t, t, t);
514 void ArcDirect(real lat1, real lon1, real azi1, real a12,
515 real& lat2, real& lon2, real& azi2)
const {
517 GenDirect(lat1, lon1, azi1,
true, a12,
518 LATITUDE | LONGITUDE | AZIMUTH,
519 lat2, lon2, azi2, t, t, t, t, t);
525 void ArcDirect(real lat1, real lon1, real azi1, real a12,
526 real& lat2, real& lon2, real& azi2, real& s12)
529 GenDirect(lat1, lon1, azi1,
true, a12,
530 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
531 lat2, lon2, azi2, s12, t, t, t, t);
537 void ArcDirect(real lat1, real lon1, real azi1, real a12,
538 real& lat2, real& lon2, real& azi2,
539 real& s12, real& m12)
const {
541 GenDirect(lat1, lon1, azi1,
true, a12,
542 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
544 lat2, lon2, azi2, s12, m12, t, t, t);
550 void ArcDirect(real lat1, real lon1, real azi1, real a12,
551 real& lat2, real& lon2, real& azi2, real& s12,
552 real& M12, real& M21)
const {
554 GenDirect(lat1, lon1, azi1,
true, a12,
555 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
557 lat2, lon2, azi2, s12, t, M12, M21, t);
563 void ArcDirect(real lat1, real lon1, real azi1, real a12,
564 real& lat2, real& lon2, real& azi2, real& s12,
565 real& m12, real& M12, real& M21)
const {
567 GenDirect(lat1, lon1, azi1,
true, a12,
568 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
569 REDUCEDLENGTH | GEODESICSCALE,
570 lat2, lon2, azi2, s12, m12, M12, M21, t);
628 Math::real GenDirect(real lat1, real lon1, real azi1,
629 bool arcmode, real s12_a12,
unsigned outmask,
630 real& lat2, real& lon2, real& azi2,
631 real& s12, real& m12, real& M12, real& M21,
674 real& s12, real& azi1, real& azi2, real& m12,
675 real& M12, real& M21, real& S12)
const {
676 return GenInverse(lat1, lon1, lat2, lon2,
678 REDUCEDLENGTH | GEODESICSCALE | AREA,
679 s12, azi1, azi2, m12, M12, M21, S12);
688 return GenInverse(lat1, lon1, lat2, lon2,
690 s12, t, t, t, t, t, t);
697 real& azi1, real& azi2)
const {
699 return GenInverse(lat1, lon1, lat2, lon2,
701 t, azi1, azi2, t, t, t, t);
708 real& s12, real& azi1, real& azi2)
711 return GenInverse(lat1, lon1, lat2, lon2,
713 s12, azi1, azi2, t, t, t, t);
720 real& s12, real& azi1, real& azi2, real& m12)
723 return GenInverse(lat1, lon1, lat2, lon2,
724 DISTANCE | AZIMUTH | REDUCEDLENGTH,
725 s12, azi1, azi2, m12, t, t, t);
732 real& s12, real& azi1, real& azi2,
733 real& M12, real& M21)
const {
735 return GenInverse(lat1, lon1, lat2, lon2,
736 DISTANCE | AZIMUTH | GEODESICSCALE,
737 s12, azi1, azi2, t, M12, M21, t);
744 real& s12, real& azi1, real& azi2, real& m12,
745 real& M12, real& M21)
const {
747 return GenInverse(lat1, lon1, lat2, lon2,
749 REDUCEDLENGTH | GEODESICSCALE,
750 s12, azi1, azi2, m12, M12, M21, t);
790 Math::real GenInverse(real lat1, real lon1, real lat2, real lon2,
792 real& s12, real& azi1, real& azi2,
793 real& m12, real& M12, real& M21, real& S12)
const;
836 GeodesicLine Line(real lat1, real lon1, real azi1,
unsigned caps = ALL)
857 GeodesicLine InverseLine(real lat1, real lon1, real lat2, real lon2,
858 unsigned caps = ALL)
const;
880 GeodesicLine DirectLine(real lat1, real lon1, real azi1, real s12,
881 unsigned caps = ALL)
const;
903 GeodesicLine ArcDirectLine(real lat1, real lon1, real azi1, real a12,
904 unsigned caps = ALL)
const;
929 GeodesicLine GenDirectLine(real lat1, real lon1, real azi1,
930 bool arcmode, real s12_a12,
931 unsigned caps = ALL)
const;
970 #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 &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) const
#define GEOGRAPHICLIB_EXPORT
Math::real MajorRadius() const
GeographicLib::Math::real real
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) 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
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) 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 Inverse(real lat1, real lon1, real lat2, real lon2, real &s12, real &azi1, real &azi2, real &M12, real &M21) const
Namespace for GeographicLib.
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) const
Math::real Flattening() 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 Inverse(real lat1, real lon1, real lat2, real lon2, real &s12) const
Math::real Direct(real lat1, real lon1, real azi1, real s12, real &lat2, real &lon2, real &azi2, real &m12) const
Header for GeographicLib::Constants class.
Math::real EllipsoidArea() 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 &M21) const
#define GEOGRAPHICLIB_GEODESIC_ORDER
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) 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