GeographicLib  2.6
Ellipsoid.cpp
Go to the documentation of this file.
1 /**
2  * \file Ellipsoid.cpp
3  * \brief Implementation for GeographicLib::Ellipsoid class
4  *
5  * Copyright (c) Charles Karney (2012-2023) <karney@alum.mit.edu> and licensed
6  * under the MIT/X11 License. For more information, see
7  * https://geographiclib.sourceforge.io/
8  **********************************************************************/
9 
11 
12 namespace GeographicLib {
13 
14  using namespace std;
15 
16  /// \cond SKIP
18  : stol_(real(0.01) * sqrt(numeric_limits<real>::epsilon()))
19  , _a(a)
20  , _f(f)
21  , _b(_a * (1 - _f))
22  , _e2(_f * (2 - _f))
23  , _e12(_e2 / (1 - _e2))
24  , _n(_f / (2 - _f))
25  , _aux(_a, _f)
26  , _rm(_aux.RectifyingRadius(true))
27  , _c2(_aux.AuthalicRadiusSquared(true))
28  {}
29  /// \endcond
30 
32  static const Ellipsoid wgs84(Constants::WGS84_a(), Constants::WGS84_f());
33  return wgs84;
34  }
35 
37  { return Math::pi()/2 * _rm; }
38 
40  { return 4 * Math::pi() * _c2; }
41 
44  Math::LatFix(phi), true);
45  }
46 
49  Math::LatFix(beta), true);
50  }
51 
54  Math::LatFix(phi), true);
55  }
56 
59  Math::LatFix(theta), true);
60  }
61 
64  Math::LatFix(phi), true);
65  }
66 
69  Math::LatFix(mu), true);
70  }
71 
74  Math::LatFix(phi), true);
75  }
76 
79  Math::LatFix(xi), true);
80  }
81 
84  Math::LatFix(phi), true);
85  }
86 
89  Math::LatFix(chi), true);
90  }
91 
94  AuxAngle::degrees(Math::LatFix(phi)), true).lamd();
95  }
96 
99  AuxAngle::lamd(psi), true).degrees();
100  }
101 
103  // a * cos(beta)
106  true).normalized());
107  return _a * beta.x();
108  }
109 
111  // b * sin(beta)
114  true).normalized());
115  return _b * beta.y();
116  }
117 
119  return _rm * _aux.Convert(AuxLatitude::PHI, AuxLatitude::MU,
121  true).radians();
122  }
123 
125  real v = 1 - _e2 * Math::sq(Math::sind(Math::LatFix(phi)));
126  return _a * (1 - _e2) / (v * sqrt(v));
127  }
128 
130  real v = 1 - _e2 * Math::sq(Math::sind(Math::LatFix(phi)));
131  return _a / sqrt(v);
132  }
133 
134  Math::real Ellipsoid::NormalCurvatureRadius(real phi, real azi) const {
135  real calp, salp,
136  v = 1 - _e2 * Math::sq(Math::sind(Math::LatFix(phi)));
137  Math::sincosd(azi, salp, calp);
138  return _a / (sqrt(v) * (Math::sq(calp) * v / (1 - _e2) + Math::sq(salp)));
139  }
140 
141 } // namespace GeographicLib
Ellipsoid(real a, real f)
Math::real InverseAuthalicLatitude(real xi) const
Definition: Ellipsoid.cpp:77
static T pi()
Definition: Math.hpp:187
Math::real MeridianDistance(real phi) const
Definition: Ellipsoid.cpp:118
Math::real IsometricLatitude(real phi) const
Definition: Ellipsoid.cpp:92
An accurate representation of angles.
Definition: AuxAngle.hpp:51
Math::real ConformalLatitude(real phi) const
Definition: Ellipsoid.cpp:82
Math::real InverseRectifyingLatitude(real mu) const
Definition: Ellipsoid.cpp:67
Math::real InverseParametricLatitude(real beta) const
Definition: Ellipsoid.cpp:47
Math::real lamd() const
Definition: AuxAngle.hpp:240
static T LatFix(T x)
Definition: Math.hpp:303
AuxAngle Convert(int auxin, int auxout, const AuxAngle &zeta, bool exact=false) const
Math::real CircleRadius(real phi) const
Definition: Ellipsoid.cpp:102
Math::real Area() const
Definition: Ellipsoid.cpp:39
Math::real NormalCurvatureRadius(real phi, real azi) const
Definition: Ellipsoid.cpp:134
Math::real QuarterMeridian() const
Definition: Ellipsoid.cpp:36
Math::real GeocentricLatitude(real phi) const
Definition: Ellipsoid.cpp:52
static T sq(T x)
Definition: Math.hpp:209
Math::real InverseGeocentricLatitude(real theta) const
Definition: Ellipsoid.cpp:57
Namespace for GeographicLib.
Definition: Accumulator.cpp:12
Math::real ParametricLatitude(real phi) const
Definition: Ellipsoid.cpp:42
Math::real InverseIsometricLatitude(real psi) const
Definition: Ellipsoid.cpp:97
Math::real TransverseCurvatureRadius(real phi) const
Definition: Ellipsoid.cpp:129
GeographicLib::Math::real real
Definition: Geod3Solve.cpp:25
Header for GeographicLib::Ellipsoid class.
Math::real RectifyingLatitude(real phi) const
Definition: Ellipsoid.cpp:62
Properties of an ellipsoid.
Definition: Ellipsoid.hpp:31
AuxAngle normalized() const
Definition: AuxAngle.cpp:28
static T sind(T x)
Definition: Math.cpp:172
Math::real InverseConformalLatitude(real chi) const
Definition: Ellipsoid.cpp:87
Math::real AuthalicLatitude(real phi) const
Definition: Ellipsoid.cpp:72
Math::real radians() const
Definition: AuxAngle.hpp:232
static const Ellipsoid & WGS84()
Definition: Ellipsoid.cpp:31
static void sincosd(T x, T &sinx, T &cosx)
Definition: Math.cpp:104
Math::real MeridionalCurvatureRadius(real phi) const
Definition: Ellipsoid.cpp:124
Math::real degrees() const
Definition: AuxAngle.hpp:228
Math::real CircleHeight(real phi) const
Definition: Ellipsoid.cpp:110