10#if !defined(GEOGRAPHICLIB_GEODESICLINEEXACT_HPP)
11#define GEOGRAPHICLIB_GEODESICLINEEXACT_HPP 1
20# pragma warning (push)
21# pragma warning (disable: 4251)
50 real _lat1, _lon1, _azi1;
51 real _a, _f, _b, _c2, _f1, _e2, _salp0, _calp0, _k2,
52 _salp1, _calp1, _ssig1, _csig1, _dn1, _stau1, _ctau1,
53 _somg1, _comg1, _cchi1,
54 _aA4, _eE0, _dD0, _hH0, _eE1, _dD1, _hH1;
57 std::vector<real> _cC4a;
63 real azi1, real salp1, real calp1,
67 real azi1, real salp1, real calp1,
68 unsigned caps,
bool arcmode, real s13_a13);
70 static constexpr unsigned CAP_NONE = GeodesicExact::CAP_NONE;
71 static constexpr unsigned CAP_E = GeodesicExact::CAP_E;
72 static constexpr unsigned CAP_D = GeodesicExact::CAP_D;
73 static constexpr unsigned CAP_H = GeodesicExact::CAP_H;
74 static constexpr unsigned CAP_C4 = GeodesicExact::CAP_C4;
75 static constexpr unsigned CAP_ALL = GeodesicExact::CAP_ALL;
76 static constexpr unsigned CAP_MASK = GeodesicExact::CAP_MASK;
77 static constexpr unsigned OUT_ALL = GeodesicExact::OUT_ALL;
78 static constexpr unsigned OUT_MASK = GeodesicExact::OUT_MASK;
94 NONE = GeodesicExact::NONE,
100 LATITUDE = GeodesicExact::LATITUDE,
105 LONGITUDE = GeodesicExact::LONGITUDE,
112 AZIMUTH = GeodesicExact::AZIMUTH,
117 DISTANCE = GeodesicExact::DISTANCE,
124 STANDARD = GeodesicExact::STANDARD,
130 DISTANCE_IN = GeodesicExact::DISTANCE_IN,
135 REDUCEDLENGTH = GeodesicExact::REDUCEDLENGTH,
140 GEODESICSCALE = GeodesicExact::GEODESICSCALE,
145 AREA = GeodesicExact::AREA,
150 LONG_UNROLL = GeodesicExact::LONG_UNROLL,
156 ALL = GeodesicExact::ALL,
208 unsigned caps = ALL);
264 real& m12, real& M12, real& M21, real& S12)
const {
266 return GenPosition(
false, s12,
267 LATITUDE | LONGITUDE | AZIMUTH |
268 REDUCEDLENGTH | GEODESICSCALE | AREA,
269 lat2, lon2, azi2, t, m12, M12, M21, S12);
278 return GenPosition(
false, s12,
279 LATITUDE | LONGITUDE,
280 lat2, lon2, t, t, t, t, t, t);
288 return GenPosition(
false, s12,
289 LATITUDE | LONGITUDE | AZIMUTH,
290 lat2, lon2, azi2, t, t, t, t, t);
299 return GenPosition(
false, s12,
300 LATITUDE | LONGITUDE |
301 AZIMUTH | REDUCEDLENGTH,
302 lat2, lon2, azi2, t, m12, t, t, t);
309 real& M12, real& M21)
const {
311 return GenPosition(
false, s12,
312 LATITUDE | LONGITUDE |
313 AZIMUTH | GEODESICSCALE,
314 lat2, lon2, azi2, t, t, M12, M21, t);
321 real& m12, real& M12, real& M21)
const {
323 return GenPosition(
false, s12,
324 LATITUDE | LONGITUDE | AZIMUTH |
325 REDUCEDLENGTH | GEODESICSCALE,
326 lat2, lon2, azi2, t, m12, M12, M21, t);
372 real& s12, real& m12, real& M12, real& M21, real& S12)
374 GenPosition(
true, a12,
375 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
376 REDUCEDLENGTH | GEODESICSCALE | AREA,
377 lat2, lon2, azi2, s12, m12, M12, M21, S12);
385 GenPosition(
true, a12,
386 LATITUDE | LONGITUDE,
387 lat2, lon2, t, t, t, t, t, t);
393 void ArcPosition(real a12, real& lat2, real& lon2, real& azi2)
const {
395 GenPosition(
true, a12,
396 LATITUDE | LONGITUDE | AZIMUTH,
397 lat2, lon2, azi2, t, t, t, t, t);
403 void ArcPosition(real a12, real& lat2, real& lon2, real& azi2, real& s12)
406 GenPosition(
true, a12,
407 LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
408 lat2, lon2, azi2, s12, t, t, t, t);
415 real& s12, real& m12)
const {
417 GenPosition(
true, a12,
418 LATITUDE | LONGITUDE | AZIMUTH |
419 DISTANCE | REDUCEDLENGTH,
420 lat2, lon2, azi2, s12, m12, t, t, t);
427 real& s12, real& M12, real& M21)
const {
429 GenPosition(
true, a12,
430 LATITUDE | LONGITUDE | AZIMUTH |
431 DISTANCE | GEODESICSCALE,
432 lat2, lon2, azi2, s12, t, M12, M21, t);
439 real& s12, real& m12, real& M12, real& M21)
const {
441 GenPosition(
true, a12,
442 LATITUDE | LONGITUDE | AZIMUTH |
443 DISTANCE | REDUCEDLENGTH | GEODESICSCALE,
444 lat2, lon2, azi2, s12, m12, M12, M21, t);
510 Math::real GenPosition(
bool arcmode,
real s12_a12,
unsigned outmask,
529 void SetDistance(
real s13);
540 void SetArc(
real a13);
553 void GenSetDistance(
bool arcmode,
real s13_a13);
562 bool Init()
const {
return _caps != 0U; }
568 {
return Init() ? _lat1 : Math::NaN(); }
574 {
return Init() ? _lon1 : Math::NaN(); }
580 {
return Init() ? _azi1 : Math::NaN(); }
589 {
if (Init()) { sazi1 = _salp1; cazi1 = _calp1; } }
598 {
return Init() ? Math::atan2d(_salp0, _calp0) : Math::NaN(); }
607 {
if (Init()) { sazi0 = _salp0; cazi0 = _calp0; } }
617 return Init() ? atan2(_ssig1, _csig1) / Math::degree() : Math::NaN();
626 {
return Init() ? _a : Math::NaN(); }
633 {
return Init() ? _f : Math::NaN(); }
649 return (_caps & testcaps) == testcaps;
660 {
return Init() ? (arcmode ? _a13 : _s13) : Math::NaN(); }
666 {
return GenDistance(
false); }
679# pragma warning (pop)
Header for GeographicLib::Constants class.
#define GEOGRAPHICLIB_EXPORT
Header for GeographicLib::EllipticFunction class.
GeographicLib::Math::real real
Header for GeographicLib::GeodesicExact class.
Elliptic integrals and functions.
Exact geodesic calculations.
Math::real Flattening() const
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2) const
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2, real &s12) const
void EquatorialAzimuth(real &sazi0, real &cazi0) const
Math::real Longitude() const
Math::real EquatorialArc() const
Math::real Position(real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21, real &S12) const
unsigned Capabilities() const
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &M12, real &M21) const
Math::real Latitude() const
Math::real EquatorialAzimuth() const
void ArcPosition(real a12, real &lat2, real &lon2) const
Math::real Position(real s12, real &lat2, real &lon2, real &azi2, real &M12, real &M21) const
Math::real Azimuth() const
Math::real GenDistance(bool arcmode) const
Math::real Distance() const
Math::real Position(real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21) const
Math::real Position(real s12, real &lat2, real &lon2) const
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12) const
bool Capabilities(unsigned testcaps) const
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21) const
void Azimuth(real &sazi1, real &cazi1) const
Math::real EquatorialRadius() const
Math::real Position(real s12, real &lat2, real &lon2, real &azi2) const
Math::real Position(real s12, real &lat2, real &lon2, real &azi2, real &m12) const
Namespace for GeographicLib.