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