GeographicLib 1.52
Loading...
Searching...
No Matches
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
18namespace 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;
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
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