GeographicLib  1.51
Ellipsoid.hpp
Go to the documentation of this file.
1 /**
2  * \file Ellipsoid.hpp
3  * \brief Header for GeographicLib::Ellipsoid class
4  *
5  * Copyright (c) Charles Karney (2012-2020) <charles@karney.com> and licensed
6  * under the MIT/X11 License. For more information, see
7  * https://geographiclib.sourceforge.io/
8  **********************************************************************/
9 
10 #if !defined(GEOGRAPHICLIB_ELLIPSOID_HPP)
11 #define GEOGRAPHICLIB_ELLIPSOID_HPP 1
12 
17 
18 namespace GeographicLib {
19 
20  /**
21  * \brief Properties of an ellipsoid
22  *
23  * This class returns various properties of the ellipsoid and converts
24  * between various types of latitudes. The latitude conversions are also
25  * possible using the various projections supported by %GeographicLib; but
26  * Ellipsoid provides more direct access (sometimes using private functions
27  * of the projection classes). Ellipsoid::RectifyingLatitude,
28  * Ellipsoid::InverseRectifyingLatitude, and Ellipsoid::MeridianDistance
29  * provide functionality which can be provided by the Geodesic class.
30  * However Geodesic uses a series approximation (valid for abs \e f < 1/150),
31  * whereas Ellipsoid computes these quantities using EllipticFunction which
32  * provides accurate results even when \e f is large. Use of this class
33  * should be limited to &minus;3 < \e f < 3/4 (i.e., 1/4 < b/a < 4).
34  *
35  * Example of use:
36  * \include example-Ellipsoid.cpp
37  **********************************************************************/
38 
40  private:
41  typedef Math::real real;
42  static const int numit_ = 10;
43  real stol_;
44  real _a, _f, _f1, _f12, _e2, _es, _e12, _n, _b;
46  EllipticFunction _ell;
47  AlbersEqualArea _au;
48 
49  // These are the alpha and beta coefficients in the Krueger series from
50  // TransverseMercator. Thy are used by RhumbSolve to compute
51  // (psi2-psi1)/(mu2-mu1).
52  const Math::real* ConformalToRectifyingCoeffs() const { return _tm._alp; }
53  const Math::real* RectifyingToConformalCoeffs() const { return _tm._bet; }
54  friend class Rhumb; friend class RhumbLine;
55  public:
56  /** \name Constructor
57  **********************************************************************/
58  ///@{
59 
60  /**
61  * Constructor for a ellipsoid with
62  *
63  * @param[in] a equatorial radius (meters).
64  * @param[in] f flattening of ellipsoid. Setting \e f = 0 gives a sphere.
65  * Negative \e f gives a prolate ellipsoid.
66  * @exception GeographicErr if \e a or (1 &minus; \e f) \e a is not
67  * positive.
68  **********************************************************************/
69  Ellipsoid(real a, real f);
70  ///@}
71 
72  /** \name %Ellipsoid dimensions.
73  **********************************************************************/
74  ///@{
75 
76  /**
77  * @return \e a the equatorial radius of the ellipsoid (meters). This is
78  * the value used in the constructor.
79  **********************************************************************/
80  Math::real EquatorialRadius() const { return _a; }
81 
82  /**
83  * @return \e b the polar semi-axis (meters).
84  **********************************************************************/
85  Math::real MinorRadius() const { return _b; }
86 
87  /**
88  * @return \e L the distance between the equator and a pole along a
89  * meridian (meters). For a sphere \e L = (&pi;/2) \e a. The radius
90  * of a sphere with the same meridian length is \e L / (&pi;/2).
91  **********************************************************************/
92  Math::real QuarterMeridian() const;
93 
94  /**
95  * @return \e A the total area of the ellipsoid (meters<sup>2</sup>). For
96  * a sphere \e A = 4&pi; <i>a</i><sup>2</sup>. The radius of a sphere
97  * with the same area is sqrt(\e A / (4&pi;)).
98  **********************************************************************/
99  Math::real Area() const;
100 
101  /**
102  * @return \e V the total volume of the ellipsoid (meters<sup>3</sup>).
103  * For a sphere \e V = (4&pi; / 3) <i>a</i><sup>3</sup>. The radius of
104  * a sphere with the same volume is cbrt(\e V / (4&pi;/3)).
105  **********************************************************************/
107  { return (4 * Math::pi()) * Math::sq(_a) * _b / 3; }
108 
109  /**
110  * \deprecated An old name for EquatorialRadius().
111  **********************************************************************/
112  GEOGRAPHICLIB_DEPRECATED("Use EquatorialRadius()")
113  Math::real MajorRadius() const { return EquatorialRadius(); }
114  ///@}
115 
116  /** \name %Ellipsoid shape
117  **********************************************************************/
118  ///@{
119 
120  /**
121  * @return \e f = (\e a &minus; \e b) / \e a, the flattening of the
122  * ellipsoid. This is the value used in the constructor. This is zero,
123  * positive, or negative for a sphere, oblate ellipsoid, or prolate
124  * ellipsoid.
125  **********************************************************************/
126  Math::real Flattening() const { return _f; }
127 
128  /**
129  * @return \e f ' = (\e a &minus; \e b) / \e b, the second flattening of
130  * the ellipsoid. This is zero, positive, or negative for a sphere,
131  * oblate ellipsoid, or prolate ellipsoid.
132  **********************************************************************/
133  Math::real SecondFlattening() const { return _f / (1 - _f); }
134 
135  /**
136  * @return \e n = (\e a &minus; \e b) / (\e a + \e b), the third flattening
137  * of the ellipsoid. This is zero, positive, or negative for a sphere,
138  * oblate ellipsoid, or prolate ellipsoid.
139  **********************************************************************/
140  Math::real ThirdFlattening() const { return _n; }
141 
142  /**
143  * @return <i>e</i><sup>2</sup> = (<i>a</i><sup>2</sup> &minus;
144  * <i>b</i><sup>2</sup>) / <i>a</i><sup>2</sup>, the eccentricity squared
145  * of the ellipsoid. This is zero, positive, or negative for a sphere,
146  * oblate ellipsoid, or prolate ellipsoid.
147  **********************************************************************/
148  Math::real EccentricitySq() const { return _e2; }
149 
150  /**
151  * @return <i>e'</i> <sup>2</sup> = (<i>a</i><sup>2</sup> &minus;
152  * <i>b</i><sup>2</sup>) / <i>b</i><sup>2</sup>, the second eccentricity
153  * squared of the ellipsoid. This is zero, positive, or negative for a
154  * sphere, oblate ellipsoid, or prolate ellipsoid.
155  **********************************************************************/
156  Math::real SecondEccentricitySq() const { return _e12; }
157 
158  /**
159  * @return <i>e''</i> <sup>2</sup> = (<i>a</i><sup>2</sup> &minus;
160  * <i>b</i><sup>2</sup>) / (<i>a</i><sup>2</sup> + <i>b</i><sup>2</sup>),
161  * the third eccentricity squared of the ellipsoid. This is zero,
162  * positive, or negative for a sphere, oblate ellipsoid, or prolate
163  * ellipsoid.
164  **********************************************************************/
165  Math::real ThirdEccentricitySq() const { return _e2 / (2 - _e2); }
166  ///@}
167 
168  /** \name Latitude conversion.
169  **********************************************************************/
170  ///@{
171 
172  /**
173  * @param[in] phi the geographic latitude (degrees).
174  * @return &beta; the parametric latitude (degrees).
175  *
176  * The geographic latitude, &phi;, is the angle between the equatorial
177  * plane and a vector normal to the surface of the ellipsoid.
178  *
179  * The parametric latitude (also called the reduced latitude), &beta;,
180  * allows the cartesian coordinated of a meridian to be expressed
181  * conveniently in parametric form as
182  * - \e R = \e a cos &beta;
183  * - \e Z = \e b sin &beta;
184  * .
185  * where \e a and \e b are the equatorial radius and the polar semi-axis.
186  * For a sphere &beta; = &phi;.
187  *
188  * &phi; must lie in the range [&minus;90&deg;, 90&deg;]; the
189  * result is undefined if this condition does not hold. The returned value
190  * &beta; lies in [&minus;90&deg;, 90&deg;].
191  **********************************************************************/
192  Math::real ParametricLatitude(real phi) const;
193 
194  /**
195  * @param[in] beta the parametric latitude (degrees).
196  * @return &phi; the geographic latitude (degrees).
197  *
198  * &beta; must lie in the range [&minus;90&deg;, 90&deg;]; the
199  * result is undefined if this condition does not hold. The returned value
200  * &phi; lies in [&minus;90&deg;, 90&deg;].
201  **********************************************************************/
202  Math::real InverseParametricLatitude(real beta) const;
203 
204  /**
205  * @param[in] phi the geographic latitude (degrees).
206  * @return &theta; the geocentric latitude (degrees).
207  *
208  * The geocentric latitude, &theta;, is the angle between the equatorial
209  * plane and a line between the center of the ellipsoid and a point on the
210  * ellipsoid. For a sphere &theta; = &phi;.
211  *
212  * &phi; must lie in the range [&minus;90&deg;, 90&deg;]; the
213  * result is undefined if this condition does not hold. The returned value
214  * &theta; lies in [&minus;90&deg;, 90&deg;].
215  **********************************************************************/
216  Math::real GeocentricLatitude(real phi) const;
217 
218  /**
219  * @param[in] theta the geocentric latitude (degrees).
220  * @return &phi; the geographic latitude (degrees).
221  *
222  * &theta; must lie in the range [&minus;90&deg;, 90&deg;]; the
223  * result is undefined if this condition does not hold. The returned value
224  * &phi; lies in [&minus;90&deg;, 90&deg;].
225  **********************************************************************/
226  Math::real InverseGeocentricLatitude(real theta) const;
227 
228  /**
229  * @param[in] phi the geographic latitude (degrees).
230  * @return &mu; the rectifying latitude (degrees).
231  *
232  * The rectifying latitude, &mu;, has the property that the distance along
233  * a meridian of the ellipsoid between two points with rectifying latitudes
234  * &mu;<sub>1</sub> and &mu;<sub>2</sub> is equal to
235  * (&mu;<sub>2</sub> - &mu;<sub>1</sub>) \e L / 90&deg;,
236  * where \e L = QuarterMeridian(). For a sphere &mu; = &phi;.
237  *
238  * &phi; must lie in the range [&minus;90&deg;, 90&deg;]; the
239  * result is undefined if this condition does not hold. The returned value
240  * &mu; lies in [&minus;90&deg;, 90&deg;].
241  **********************************************************************/
242  Math::real RectifyingLatitude(real phi) const;
243 
244  /**
245  * @param[in] mu the rectifying latitude (degrees).
246  * @return &phi; the geographic latitude (degrees).
247  *
248  * &mu; must lie in the range [&minus;90&deg;, 90&deg;]; the
249  * result is undefined if this condition does not hold. The returned value
250  * &phi; lies in [&minus;90&deg;, 90&deg;].
251  **********************************************************************/
252  Math::real InverseRectifyingLatitude(real mu) const;
253 
254  /**
255  * @param[in] phi the geographic latitude (degrees).
256  * @return &xi; the authalic latitude (degrees).
257  *
258  * The authalic latitude, &xi;, has the property that the area of the
259  * ellipsoid between two circles with authalic latitudes
260  * &xi;<sub>1</sub> and &xi;<sub>2</sub> is equal to (sin
261  * &xi;<sub>2</sub> - sin &xi;<sub>1</sub>) \e A / 2, where \e A
262  * = Area(). For a sphere &xi; = &phi;.
263  *
264  * &phi; must lie in the range [&minus;90&deg;, 90&deg;]; the
265  * result is undefined if this condition does not hold. The returned value
266  * &xi; lies in [&minus;90&deg;, 90&deg;].
267  **********************************************************************/
268  Math::real AuthalicLatitude(real phi) const;
269 
270  /**
271  * @param[in] xi the authalic latitude (degrees).
272  * @return &phi; the geographic latitude (degrees).
273  *
274  * &xi; must lie in the range [&minus;90&deg;, 90&deg;]; the
275  * result is undefined if this condition does not hold. The returned value
276  * &phi; lies in [&minus;90&deg;, 90&deg;].
277  **********************************************************************/
278  Math::real InverseAuthalicLatitude(real xi) const;
279 
280  /**
281  * @param[in] phi the geographic latitude (degrees).
282  * @return &chi; the conformal latitude (degrees).
283  *
284  * The conformal latitude, &chi;, gives the mapping of the ellipsoid to a
285  * sphere which which is conformal (angles are preserved) and in which the
286  * equator of the ellipsoid maps to the equator of the sphere. For a
287  * sphere &chi; = &phi;.
288  *
289  * &phi; must lie in the range [&minus;90&deg;, 90&deg;]; the
290  * result is undefined if this condition does not hold. The returned value
291  * &chi; lies in [&minus;90&deg;, 90&deg;].
292  **********************************************************************/
293  Math::real ConformalLatitude(real phi) const;
294 
295  /**
296  * @param[in] chi the conformal latitude (degrees).
297  * @return &phi; the geographic latitude (degrees).
298  *
299  * &chi; must lie in the range [&minus;90&deg;, 90&deg;]; the
300  * result is undefined if this condition does not hold. The returned value
301  * &phi; lies in [&minus;90&deg;, 90&deg;].
302  **********************************************************************/
303  Math::real InverseConformalLatitude(real chi) const;
304 
305  /**
306  * @param[in] phi the geographic latitude (degrees).
307  * @return &psi; the isometric latitude (degrees).
308  *
309  * The isometric latitude gives the mapping of the ellipsoid to a plane
310  * which which is conformal (angles are preserved) and in which the equator
311  * of the ellipsoid maps to a straight line of constant scale; this mapping
312  * defines the Mercator projection. For a sphere &psi; =
313  * sinh<sup>&minus;1</sup> tan &phi;.
314  *
315  * &phi; must lie in the range [&minus;90&deg;, 90&deg;]; the result is
316  * undefined if this condition does not hold. The value returned for &phi;
317  * = &plusmn;90&deg; is some (positive or negative) large but finite value,
318  * such that InverseIsometricLatitude returns the original value of &phi;.
319  **********************************************************************/
320  Math::real IsometricLatitude(real phi) const;
321 
322  /**
323  * @param[in] psi the isometric latitude (degrees).
324  * @return &phi; the geographic latitude (degrees).
325  *
326  * The returned value &phi; lies in [&minus;90&deg;, 90&deg;]. For a
327  * sphere &phi; = tan<sup>&minus;1</sup> sinh &psi;.
328  **********************************************************************/
329  Math::real InverseIsometricLatitude(real psi) const;
330  ///@}
331 
332  /** \name Other quantities.
333  **********************************************************************/
334  ///@{
335 
336  /**
337  * @param[in] phi the geographic latitude (degrees).
338  * @return \e R = \e a cos &beta; the radius of a circle of latitude
339  * &phi; (meters). \e R (&pi;/180&deg;) gives meters per degree
340  * longitude measured along a circle of latitude.
341  *
342  * &phi; must lie in the range [&minus;90&deg;, 90&deg;]; the
343  * result is undefined if this condition does not hold.
344  **********************************************************************/
345  Math::real CircleRadius(real phi) const;
346 
347  /**
348  * @param[in] phi the geographic latitude (degrees).
349  * @return \e Z = \e b sin &beta; the distance of a circle of latitude
350  * &phi; from the equator measured parallel to the ellipsoid axis
351  * (meters).
352  *
353  * &phi; must lie in the range [&minus;90&deg;, 90&deg;]; the
354  * result is undefined if this condition does not hold.
355  **********************************************************************/
356  Math::real CircleHeight(real phi) const;
357 
358  /**
359  * @param[in] phi the geographic latitude (degrees).
360  * @return \e s the distance along a meridian
361  * between the equator and a point of latitude &phi; (meters). \e s is
362  * given by \e s = &mu; \e L / 90&deg;, where \e L =
363  * QuarterMeridian()).
364  *
365  * &phi; must lie in the range [&minus;90&deg;, 90&deg;]; the
366  * result is undefined if this condition does not hold.
367  **********************************************************************/
368  Math::real MeridianDistance(real phi) const;
369 
370  /**
371  * @param[in] phi the geographic latitude (degrees).
372  * @return &rho; the meridional radius of curvature of the ellipsoid at
373  * latitude &phi; (meters); this is the curvature of the meridian. \e
374  * rho is given by &rho; = (180&deg;/&pi;) d\e s / d&phi;,
375  * where \e s = MeridianDistance(); thus &rho; (&pi;/180&deg;)
376  * gives meters per degree latitude measured along a meridian.
377  *
378  * &phi; must lie in the range [&minus;90&deg;, 90&deg;]; the
379  * result is undefined if this condition does not hold.
380  **********************************************************************/
381  Math::real MeridionalCurvatureRadius(real phi) const;
382 
383  /**
384  * @param[in] phi the geographic latitude (degrees).
385  * @return &nu; the transverse radius of curvature of the ellipsoid at
386  * latitude &phi; (meters); this is the curvature of a curve on the
387  * ellipsoid which also lies in a plane perpendicular to the ellipsoid
388  * and to the meridian. &nu; is related to \e R = CircleRadius() by \e
389  * R = &nu; cos &phi;.
390  *
391  * &phi; must lie in the range [&minus;90&deg;, 90&deg;]; the
392  * result is undefined if this condition does not hold.
393  **********************************************************************/
394  Math::real TransverseCurvatureRadius(real phi) const;
395 
396  /**
397  * @param[in] phi the geographic latitude (degrees).
398  * @param[in] azi the angle between the meridian and the normal section
399  * (degrees).
400  * @return the radius of curvature of the ellipsoid in the normal
401  * section at latitude &phi; inclined at an angle \e azi to the
402  * meridian (meters).
403  *
404  * &phi; must lie in the range [&minus;90&deg;, 90&deg;]; the result is
405  * undefined this condition does not hold.
406  **********************************************************************/
407  Math::real NormalCurvatureRadius(real phi, real azi) const;
408  ///@}
409 
410  /** \name Eccentricity conversions.
411  **********************************************************************/
412  ///@{
413 
414  /**
415  * @param[in] fp = \e f ' = (\e a &minus; \e b) / \e b, the second
416  * flattening.
417  * @return \e f = (\e a &minus; \e b) / \e a, the flattening.
418  *
419  * \e f ' should lie in (&minus;1, &infin;).
420  * The returned value \e f lies in (&minus;&infin;, 1).
421  **********************************************************************/
423  { return fp / (1 + fp); }
424 
425  /**
426  * @param[in] f = (\e a &minus; \e b) / \e a, the flattening.
427  * @return \e f ' = (\e a &minus; \e b) / \e b, the second flattening.
428  *
429  * \e f should lie in (&minus;&infin;, 1).
430  * The returned value \e f ' lies in (&minus;1, &infin;).
431  **********************************************************************/
433  { return f / (1 - f); }
434 
435  /**
436  * @param[in] n = (\e a &minus; \e b) / (\e a + \e b), the third
437  * flattening.
438  * @return \e f = (\e a &minus; \e b) / \e a, the flattening.
439  *
440  * \e n should lie in (&minus;1, 1).
441  * The returned value \e f lies in (&minus;&infin;, 1).
442  **********************************************************************/
444  { return 2 * n / (1 + n); }
445 
446  /**
447  * @param[in] f = (\e a &minus; \e b) / \e a, the flattening.
448  * @return \e n = (\e a &minus; \e b) / (\e a + \e b), the third
449  * flattening.
450  *
451  * \e f should lie in (&minus;&infin;, 1).
452  * The returned value \e n lies in (&minus;1, 1).
453  **********************************************************************/
455  { return f / (2 - f); }
456 
457  /**
458  * @param[in] e2 = <i>e</i><sup>2</sup> = (<i>a</i><sup>2</sup> &minus;
459  * <i>b</i><sup>2</sup>) / <i>a</i><sup>2</sup>, the eccentricity
460  * squared.
461  * @return \e f = (\e a &minus; \e b) / \e a, the flattening.
462  *
463  * <i>e</i><sup>2</sup> should lie in (&minus;&infin;, 1).
464  * The returned value \e f lies in (&minus;&infin;, 1).
465  **********************************************************************/
467  { using std::sqrt; return e2 / (sqrt(1 - e2) + 1); }
468 
469  /**
470  * @param[in] f = (\e a &minus; \e b) / \e a, the flattening.
471  * @return <i>e</i><sup>2</sup> = (<i>a</i><sup>2</sup> &minus;
472  * <i>b</i><sup>2</sup>) / <i>a</i><sup>2</sup>, the eccentricity
473  * squared.
474  *
475  * \e f should lie in (&minus;&infin;, 1).
476  * The returned value <i>e</i><sup>2</sup> lies in (&minus;&infin;, 1).
477  **********************************************************************/
479  { return f * (2 - f); }
480 
481  /**
482  * @param[in] ep2 = <i>e'</i> <sup>2</sup> = (<i>a</i><sup>2</sup> &minus;
483  * <i>b</i><sup>2</sup>) / <i>b</i><sup>2</sup>, the second eccentricity
484  * squared.
485  * @return \e f = (\e a &minus; \e b) / \e a, the flattening.
486  *
487  * <i>e'</i> <sup>2</sup> should lie in (&minus;1, &infin;).
488  * The returned value \e f lies in (&minus;&infin;, 1).
489  **********************************************************************/
491  { using std::sqrt; return ep2 / (sqrt(1 + ep2) + 1 + ep2); }
492 
493  /**
494  * @param[in] f = (\e a &minus; \e b) / \e a, the flattening.
495  * @return <i>e'</i> <sup>2</sup> = (<i>a</i><sup>2</sup> &minus;
496  * <i>b</i><sup>2</sup>) / <i>b</i><sup>2</sup>, the second eccentricity
497  * squared.
498  *
499  * \e f should lie in (&minus;&infin;, 1).
500  * The returned value <i>e'</i> <sup>2</sup> lies in (&minus;1, &infin;).
501  **********************************************************************/
503  { return f * (2 - f) / Math::sq(1 - f); }
504 
505  /**
506  * @param[in] epp2 = <i>e''</i> <sup>2</sup> = (<i>a</i><sup>2</sup>
507  * &minus; <i>b</i><sup>2</sup>) / (<i>a</i><sup>2</sup> +
508  * <i>b</i><sup>2</sup>), the third eccentricity squared.
509  * @return \e f = (\e a &minus; \e b) / \e a, the flattening.
510  *
511  * <i>e''</i> <sup>2</sup> should lie in (&minus;1, 1).
512  * The returned value \e f lies in (&minus;&infin;, 1).
513  **********************************************************************/
515  using std::sqrt;
516  return 2 * epp2 / (sqrt((1 - epp2) * (1 + epp2)) + 1 + epp2);
517  }
518 
519  /**
520  * @param[in] f = (\e a &minus; \e b) / \e a, the flattening.
521  * @return <i>e''</i> <sup>2</sup> = (<i>a</i><sup>2</sup> &minus;
522  * <i>b</i><sup>2</sup>) / (<i>a</i><sup>2</sup> + <i>b</i><sup>2</sup>),
523  * the third eccentricity squared.
524  *
525  * \e f should lie in (&minus;&infin;, 1).
526  * The returned value <i>e''</i> <sup>2</sup> lies in (&minus;1, 1).
527  **********************************************************************/
529  { return f * (2 - f) / (1 + Math::sq(1 - f)); }
530 
531  ///@}
532 
533  /**
534  * A global instantiation of Ellipsoid with the parameters for the WGS84
535  * ellipsoid.
536  **********************************************************************/
537  static const Ellipsoid& WGS84();
538  };
539 
540 } // namespace GeographicLib
541 
542 #endif // GEOGRAPHICLIB_ELLIPSOID_HPP
Header for GeographicLib::AlbersEqualArea class.
Header for GeographicLib::Constants class.
#define GEOGRAPHICLIB_EXPORT
Definition: Constants.hpp:66
#define GEOGRAPHICLIB_DEPRECATED(msg)
Definition: Constants.hpp:81
Header for GeographicLib::EllipticFunction class.
GeographicLib::Math::real real
Definition: GeodSolve.cpp:31
Header for GeographicLib::TransverseMercator class.
Albers equal area conic projection.
Properties of an ellipsoid.
Definition: Ellipsoid.hpp:39
static Math::real EccentricitySqToFlattening(real e2)
Definition: Ellipsoid.hpp:466
static Math::real ThirdFlatteningToFlattening(real n)
Definition: Ellipsoid.hpp:443
Math::real EccentricitySq() const
Definition: Ellipsoid.hpp:148
Math::real MinorRadius() const
Definition: Ellipsoid.hpp:85
static Math::real SecondEccentricitySqToFlattening(real ep2)
Definition: Ellipsoid.hpp:490
static Math::real FlatteningToThirdFlattening(real f)
Definition: Ellipsoid.hpp:454
static Math::real FlatteningToSecondFlattening(real f)
Definition: Ellipsoid.hpp:432
static Math::real FlatteningToEccentricitySq(real f)
Definition: Ellipsoid.hpp:478
Math::real ThirdEccentricitySq() const
Definition: Ellipsoid.hpp:165
static Math::real FlatteningToSecondEccentricitySq(real f)
Definition: Ellipsoid.hpp:502
Math::real SecondEccentricitySq() const
Definition: Ellipsoid.hpp:156
Math::real Flattening() const
Definition: Ellipsoid.hpp:126
static Math::real ThirdEccentricitySqToFlattening(real epp2)
Definition: Ellipsoid.hpp:514
Math::real Volume() const
Definition: Ellipsoid.hpp:106
Math::real EquatorialRadius() const
Definition: Ellipsoid.hpp:80
static Math::real FlatteningToThirdEccentricitySq(real f)
Definition: Ellipsoid.hpp:528
static Math::real SecondFlatteningToFlattening(real fp)
Definition: Ellipsoid.hpp:422
Math::real ThirdFlattening() const
Definition: Ellipsoid.hpp:140
Math::real SecondFlattening() const
Definition: Ellipsoid.hpp:133
Elliptic integrals and functions.
Mathematical functions needed by GeographicLib.
Definition: Math.hpp:76
static T sq(T x)
Definition: Math.hpp:171
static T pi()
Definition: Math.hpp:149
Find a sequence of points on a single rhumb line.
Definition: Rhumb.hpp:464
Solve of the direct and inverse rhumb problems.
Definition: Rhumb.hpp:66
Transverse Mercator projection.
Namespace for GeographicLib.
Definition: Accumulator.cpp:12