GeographicLib  1.43
GeodesicLineExact.hpp
Go to the documentation of this file.
1 /**
2  * \file GeodesicLineExact.hpp
3  * \brief Header for GeographicLib::GeodesicLineExact class
4  *
5  * Copyright (c) Charles Karney (2012-2014) <charles@karney.com> and licensed
6  * under the MIT/X11 License. For more information, see
7  * http://geographiclib.sourceforge.net/
8  **********************************************************************/
9 
10 #if !defined(GEOGRAPHICLIB_GEODESICLINEEXACT_HPP)
11 #define GEOGRAPHICLIB_GEODESICLINEEXACT_HPP 1
12 
16 
17 namespace GeographicLib {
18 
19  /**
20  * \brief An exact geodesic line
21  *
22  * GeodesicLineExact facilitates the determination of a series of points on a
23  * single geodesic. This is a companion to the GeodesicExact class. For
24  * additional information on this class see the documentation on the
25  * GeodesicLine class.
26  *
27  * Example of use:
28  * \include example-GeodesicLineExact.cpp
29  *
30  * <a href="GeodSolve.1.html">GeodSolve</a> is a command-line utility
31  * providing access to the functionality of GeodesicExact and
32  * GeodesicLineExact (via the -E option).
33  **********************************************************************/
34 
36  private:
37  typedef Math::real real;
38  friend class GeodesicExact;
39  static const int nC4_ = GeodesicExact::nC4_;
40 
41  real tiny_;
42  real _lat1, _lon1, _azi1;
43  real _a, _f, _b, _c2, _f1, _e2, _salp0, _calp0, _k2,
44  _salp1, _calp1, _ssig1, _csig1, _dn1, _stau1, _ctau1,
45  _somg1, _comg1, _cchi1,
46  _A4, _B41, _E0, _D0, _H0, _E1, _D1, _H1;
47  real _C4a[nC4_]; // all the elements of _C4a are used
49  unsigned _caps;
50 
51  enum captype {
52  CAP_NONE = GeodesicExact::CAP_NONE,
53  CAP_E = GeodesicExact::CAP_E,
54  CAP_D = GeodesicExact::CAP_D,
55  CAP_H = GeodesicExact::CAP_H,
56  CAP_C4 = GeodesicExact::CAP_C4,
57  CAP_ALL = GeodesicExact::CAP_ALL,
58  CAP_MASK = GeodesicExact::CAP_MASK,
59  OUT_ALL = GeodesicExact::OUT_ALL,
60  OUT_MASK = GeodesicExact::OUT_MASK,
61  };
62  public:
63 
64  /**
65  * Bit masks for what calculations to do. They signify to the
66  * GeodesicLineExact::GeodesicLineExact constructor and to
67  * GeodesicExact::Line what capabilities should be included in the
68  * GeodesicLineExact object. This is merely a duplication of
69  * GeodesicExact::mask.
70  **********************************************************************/
71  enum mask {
72  /**
73  * No capabilities, no output.
74  * @hideinitializer
75  **********************************************************************/
77  /**
78  * Calculate latitude \e lat2. (It's not necessary to include this as a
79  * capability to GeodesicLineExact because this is included by default.)
80  * @hideinitializer
81  **********************************************************************/
83  /**
84  * Calculate longitude \e lon2.
85  * @hideinitializer
86  **********************************************************************/
88  /**
89  * Calculate azimuths \e azi1 and \e azi2. (It's not necessary to
90  * include this as a capability to GeodesicLineExact because this is
91  * included by default.)
92  * @hideinitializer
93  **********************************************************************/
95  /**
96  * Calculate distance \e s12.
97  * @hideinitializer
98  **********************************************************************/
100  /**
101  * Allow distance \e s12 to be used as input in the direct geodesic
102  * problem.
103  * @hideinitializer
104  **********************************************************************/
106  /**
107  * Calculate reduced length \e m12.
108  * @hideinitializer
109  **********************************************************************/
111  /**
112  * Calculate geodesic scales \e M12 and \e M21.
113  * @hideinitializer
114  **********************************************************************/
116  /**
117  * Calculate area \e S12.
118  * @hideinitializer
119  **********************************************************************/
121  /**
122  * Unroll \e lon2 in the direct calculation. (This flag used to be
123  * called LONG_NOWRAP.)
124  * @hideinitializer
125  **********************************************************************/
127  /// \cond SKIP
128  LONG_NOWRAP = LONG_UNROLL,
129  /// \endcond
130  /**
131  * All capabilities, calculate everything. (LONG_UNROLL is not
132  * included in this mask.)
133  * @hideinitializer
134  **********************************************************************/
136  };
137 
138  /** \name Constructors
139  **********************************************************************/
140  ///@{
141 
142  /**
143  * Constructor for a geodesic line staring at latitude \e lat1, longitude
144  * \e lon1, and azimuth \e azi1 (all in degrees).
145  *
146  * @param[in] g A GeodesicExact object used to compute the necessary
147  * information about the GeodesicLineExact.
148  * @param[in] lat1 latitude of point 1 (degrees).
149  * @param[in] lon1 longitude of point 1 (degrees).
150  * @param[in] azi1 azimuth at point 1 (degrees).
151  * @param[in] caps bitor'ed combination of GeodesicLineExact::mask values
152  * specifying the capabilities the GeodesicLineExact object should
153  * possess, i.e., which quantities can be returned in calls to
154  * GeodesicLine::Position.
155  *
156  * \e lat1 should be in the range [&minus;90&deg;, 90&deg;]; \e lon1 and \e
157  * azi1 should be in the range [&minus;540&deg;, 540&deg;).
158  *
159  * The GeodesicLineExact::mask values are
160  * - \e caps |= GeodesicLineExact::LATITUDE for the latitude \e lat2; this
161  * is added automatically;
162  * - \e caps |= GeodesicLineExact::LONGITUDE for the latitude \e lon2;
163  * - \e caps |= GeodesicLineExact::AZIMUTH for the latitude \e azi2; this is
164  * added automatically;
165  * - \e caps |= GeodesicLineExact::DISTANCE for the distance \e s12;
166  * - \e caps |= GeodesicLineExact::REDUCEDLENGTH for the reduced length \e
167  m12;
168  * - \e caps |= GeodesicLineExact::GEODESICSCALE for the geodesic scales \e
169  * M12 and \e M21;
170  * - \e caps |= GeodesicLineExact::AREA for the area \e S12;
171  * - \e caps |= GeodesicLineExact::DISTANCE_IN permits the length of the
172  * geodesic to be given in terms of \e s12; without this capability the
173  * length can only be specified in terms of arc length;
174  * - \e caps |= GeodesicLineExact::ALL for all of the above.
175  * .
176  * The default value of \e caps is GeodesicLineExact::ALL.
177  *
178  * If the point is at a pole, the azimuth is defined by keeping \e lon1
179  * fixed, writing \e lat1 = &plusmn;(90&deg; &minus; &epsilon;), and taking
180  * the limit &epsilon; &rarr; 0+.
181  **********************************************************************/
182  GeodesicLineExact(const GeodesicExact& g, real lat1, real lon1, real azi1,
183  unsigned caps = ALL);
184 
185  /**
186  * A default constructor. If GeodesicLineExact::Position is called on the
187  * resulting object, it returns immediately (without doing any
188  * calculations). The object can be set with a call to
189  * GeodesicExact::Line. Use Init() to test whether object is still in this
190  * uninitialized state.
191  **********************************************************************/
192  GeodesicLineExact() : _caps(0U) {}
193  ///@}
194 
195  /** \name Position in terms of distance
196  **********************************************************************/
197  ///@{
198 
199  /**
200  * Compute the position of point 2 which is a distance \e s12 (meters)
201  * from point 1.
202  *
203  * @param[in] s12 distance between point 1 and point 2 (meters); it can be
204  * signed.
205  * @param[out] lat2 latitude of point 2 (degrees).
206  * @param[out] lon2 longitude of point 2 (degrees); requires that the
207  * GeodesicLineExact object was constructed with \e caps |=
208  * GeodesicLineExact::LONGITUDE.
209  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
210  * @param[out] m12 reduced length of geodesic (meters); requires that the
211  * GeodesicLineExact object was constructed with \e caps |=
212  * GeodesicLineExact::REDUCEDLENGTH.
213  * @param[out] M12 geodesic scale of point 2 relative to point 1
214  * (dimensionless); requires that the GeodesicLineExact object was
215  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
216  * @param[out] M21 geodesic scale of point 1 relative to point 2
217  * (dimensionless); requires that the GeodesicLineExact object was
218  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
219  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
220  * that the GeodesicLineExact object was constructed with \e caps |=
221  * GeodesicLineExact::AREA.
222  * @return \e a12 arc length of between point 1 and point 2 (degrees).
223  *
224  * The values of \e lon2 and \e azi2 returned are in the range
225  * [&minus;180&deg;, 180&deg;).
226  *
227  * The GeodesicLineExact object \e must have been constructed with \e caps
228  * |= GeodesicLineExact::DISTANCE_IN; otherwise Math::NaN() is returned and
229  * no parameters are set. Requesting a value which the GeodesicLineExact
230  * object is not capable of computing is not an error; the corresponding
231  * argument will not be altered.
232  *
233  * The following functions are overloaded versions of
234  * GeodesicLineExact::Position which omit some of the output parameters.
235  * Note, however, that the arc length is always computed and returned as
236  * the function value.
237  **********************************************************************/
239  real& lat2, real& lon2, real& azi2,
240  real& m12, real& M12, real& M21,
241  real& S12) const {
242  real t;
243  return GenPosition(false, s12,
244  LATITUDE | LONGITUDE | AZIMUTH |
245  REDUCEDLENGTH | GEODESICSCALE | AREA,
246  lat2, lon2, azi2, t, m12, M12, M21, S12);
247  }
248 
249  /**
250  * See the documentation for GeodesicLineExact::Position.
251  **********************************************************************/
252  Math::real Position(real s12, real& lat2, real& lon2) const {
253  real t;
254  return GenPosition(false, s12,
255  LATITUDE | LONGITUDE,
256  lat2, lon2, t, t, t, t, t, t);
257  }
258 
259  /**
260  * See the documentation for GeodesicLineExact::Position.
261  **********************************************************************/
262  Math::real Position(real s12, real& lat2, real& lon2,
263  real& azi2) const {
264  real t;
265  return GenPosition(false, s12,
266  LATITUDE | LONGITUDE | AZIMUTH,
267  lat2, lon2, azi2, t, t, t, t, t);
268  }
269 
270  /**
271  * See the documentation for GeodesicLineExact::Position.
272  **********************************************************************/
273  Math::real Position(real s12, real& lat2, real& lon2,
274  real& azi2, real& m12) const {
275  real t;
276  return GenPosition(false, s12,
277  LATITUDE | LONGITUDE |
278  AZIMUTH | REDUCEDLENGTH,
279  lat2, lon2, azi2, t, m12, t, t, t);
280  }
281 
282  /**
283  * See the documentation for GeodesicLineExact::Position.
284  **********************************************************************/
285  Math::real Position(real s12, real& lat2, real& lon2,
286  real& azi2, real& M12, real& M21)
287  const {
288  real t;
289  return GenPosition(false, s12,
290  LATITUDE | LONGITUDE |
291  AZIMUTH | GEODESICSCALE,
292  lat2, lon2, azi2, t, t, M12, M21, t);
293  }
294 
295  /**
296  * See the documentation for GeodesicLineExact::Position.
297  **********************************************************************/
299  real& lat2, real& lon2, real& azi2,
300  real& m12, real& M12, real& M21)
301  const {
302  real t;
303  return GenPosition(false, s12,
304  LATITUDE | LONGITUDE | AZIMUTH |
305  REDUCEDLENGTH | GEODESICSCALE,
306  lat2, lon2, azi2, t, m12, M12, M21, t);
307  }
308 
309  ///@}
310 
311  /** \name Position in terms of arc length
312  **********************************************************************/
313  ///@{
314 
315  /**
316  * Compute the position of point 2 which is an arc length \e a12 (degrees)
317  * from point 1.
318  *
319  * @param[in] a12 arc length between point 1 and point 2 (degrees); it can
320  * be signed.
321  * @param[out] lat2 latitude of point 2 (degrees).
322  * @param[out] lon2 longitude of point 2 (degrees); requires that the
323  * GeodesicLineExact object was constructed with \e caps |=
324  * GeodesicLineExact::LONGITUDE.
325  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
326  * @param[out] s12 distance between point 1 and point 2 (meters); requires
327  * that the GeodesicLineExact object was constructed with \e caps |=
328  * GeodesicLineExact::DISTANCE.
329  * @param[out] m12 reduced length of geodesic (meters); requires that the
330  * GeodesicLineExact object was constructed with \e caps |=
331  * GeodesicLineExact::REDUCEDLENGTH.
332  * @param[out] M12 geodesic scale of point 2 relative to point 1
333  * (dimensionless); requires that the GeodesicLineExact object was
334  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
335  * @param[out] M21 geodesic scale of point 1 relative to point 2
336  * (dimensionless); requires that the GeodesicLineExact object was
337  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
338  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
339  * that the GeodesicLineExact object was constructed with \e caps |=
340  * GeodesicLineExact::AREA.
341  *
342  * The values of \e lon2 and \e azi2 returned are in the range
343  * [&minus;180&deg;, 180&deg;).
344  *
345  * Requesting a value which the GeodesicLineExact object is not capable of
346  * computing is not an error; the corresponding argument will not be
347  * altered.
348  *
349  * The following functions are overloaded versions of
350  * GeodesicLineExact::ArcPosition which omit some of the output parameters.
351  **********************************************************************/
352  void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
353  real& s12, real& m12, real& M12, real& M21,
354  real& S12) const {
355  GenPosition(true, a12,
356  LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
357  REDUCEDLENGTH | GEODESICSCALE | AREA,
358  lat2, lon2, azi2, s12, m12, M12, M21, S12);
359  }
360 
361  /**
362  * See the documentation for GeodesicLineExact::ArcPosition.
363  **********************************************************************/
364  void ArcPosition(real a12, real& lat2, real& lon2)
365  const {
366  real t;
367  GenPosition(true, a12,
368  LATITUDE | LONGITUDE,
369  lat2, lon2, t, t, t, t, t, t);
370  }
371 
372  /**
373  * See the documentation for GeodesicLineExact::ArcPosition.
374  **********************************************************************/
375  void ArcPosition(real a12,
376  real& lat2, real& lon2, real& azi2)
377  const {
378  real t;
379  GenPosition(true, a12,
380  LATITUDE | LONGITUDE | AZIMUTH,
381  lat2, lon2, azi2, t, t, t, t, t);
382  }
383 
384  /**
385  * See the documentation for GeodesicLineExact::ArcPosition.
386  **********************************************************************/
387  void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
388  real& s12) const {
389  real t;
390  GenPosition(true, a12,
391  LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
392  lat2, lon2, azi2, s12, t, t, t, t);
393  }
394 
395  /**
396  * See the documentation for GeodesicLineExact::ArcPosition.
397  **********************************************************************/
398  void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
399  real& s12, real& m12) const {
400  real t;
401  GenPosition(true, a12,
402  LATITUDE | LONGITUDE | AZIMUTH |
403  DISTANCE | REDUCEDLENGTH,
404  lat2, lon2, azi2, s12, m12, t, t, t);
405  }
406 
407  /**
408  * See the documentation for GeodesicLineExact::ArcPosition.
409  **********************************************************************/
410  void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
411  real& s12, real& M12, real& M21)
412  const {
413  real t;
414  GenPosition(true, a12,
415  LATITUDE | LONGITUDE | AZIMUTH |
416  DISTANCE | GEODESICSCALE,
417  lat2, lon2, azi2, s12, t, M12, M21, t);
418  }
419 
420  /**
421  * See the documentation for GeodesicLineExact::ArcPosition.
422  **********************************************************************/
423  void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
424  real& s12, real& m12, real& M12, real& M21)
425  const {
426  real t;
427  GenPosition(true, a12,
428  LATITUDE | LONGITUDE | AZIMUTH |
429  DISTANCE | REDUCEDLENGTH | GEODESICSCALE,
430  lat2, lon2, azi2, s12, m12, M12, M21, t);
431  }
432  ///@}
433 
434  /** \name The general position function.
435  **********************************************************************/
436  ///@{
437 
438  /**
439  * The general position function. GeodesicLineExact::Position and
440  * GeodesicLineExact::ArcPosition are defined in terms of this function.
441  *
442  * @param[in] arcmode boolean flag determining the meaning of the second
443  * parameter; if arcmode is false, then the GeodesicLineExact object must
444  * have been constructed with \e caps |= GeodesicLineExact::DISTANCE_IN.
445  * @param[in] s12_a12 if \e arcmode is false, this is the distance between
446  * point 1 and point 2 (meters); otherwise it is the arc length between
447  * point 1 and point 2 (degrees); it can be signed.
448  * @param[in] outmask a bitor'ed combination of GeodesicLineExact::mask
449  * values specifying which of the following parameters should be set.
450  * @param[out] lat2 latitude of point 2 (degrees).
451  * @param[out] lon2 longitude of point 2 (degrees); requires that the
452  * GeodesicLineExact object was constructed with \e caps |=
453  * GeodesicLineExact::LONGITUDE.
454  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
455  * @param[out] s12 distance between point 1 and point 2 (meters); requires
456  * that the GeodesicLineExact object was constructed with \e caps |=
457  * GeodesicLineExact::DISTANCE.
458  * @param[out] m12 reduced length of geodesic (meters); requires that the
459  * GeodesicLineExact object was constructed with \e caps |=
460  * GeodesicLineExact::REDUCEDLENGTH.
461  * @param[out] M12 geodesic scale of point 2 relative to point 1
462  * (dimensionless); requires that the GeodesicLineExact object was
463  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
464  * @param[out] M21 geodesic scale of point 1 relative to point 2
465  * (dimensionless); requires that the GeodesicLineExact object was
466  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
467  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
468  * that the GeodesicLineExact object was constructed with \e caps |=
469  * GeodesicLineExact::AREA.
470  * @return \e a12 arc length of between point 1 and point 2 (degrees).
471  *
472  * The GeodesicLineExact::mask values possible for \e outmask are
473  * - \e outmask |= GeodesicLineExact::LATITUDE for the latitude \e lat2;
474  * - \e outmask |= GeodesicLineExact::LONGITUDE for the latitude \e lon2;
475  * - \e outmask |= GeodesicLineExact::AZIMUTH for the latitude \e azi2;
476  * - \e outmask |= GeodesicLineExact::DISTANCE for the distance \e s12;
477  * - \e outmask |= GeodesicLineExact::REDUCEDLENGTH for the reduced length
478  * \e m12;
479  * - \e outmask |= GeodesicLineExact::GEODESICSCALE for the geodesic scales
480  * \e M12 and \e M21;
481  * - \e outmask |= GeodesicLineExact::AREA for the area \e S12;
482  * - \e outmask |= GeodesicLineExact::ALL for all of the above;
483  * - \e outmask |= GeodesicLineExact::LONG_UNROLL to unroll \e lon2 instead
484  * of wrapping it into the range [&minus;180&deg;, 180&deg;).
485  * .
486  * Requesting a value which the GeodesicLineExact object is not capable of
487  * computing is not an error; the corresponding argument will not be
488  * altered. Note, however, that the arc length is always computed and
489  * returned as the function value.
490  *
491  * With the GeodesicLineExact::LONG_UNROLL bit set, the quantity \e lon2
492  * &minus; \e lon1 indicates how many times and in what sense the geodesic
493  * encircles the ellipsoid. Because \e lon2 might be outside the normal
494  * allowed range for longitudes, [&minus;540&deg;, 540&deg;), be sure to
495  * normalize it with Math::AngNormalize2 before using it in other
496  * GeographicLib calls.
497  **********************************************************************/
498  Math::real GenPosition(bool arcmode, real s12_a12, unsigned outmask,
499  real& lat2, real& lon2, real& azi2,
500  real& s12, real& m12, real& M12, real& M21,
501  real& S12) const;
502 
503  ///@}
504 
505  /** \name Inspector functions
506  **********************************************************************/
507  ///@{
508 
509  /**
510  * @return true if the object has been initialized.
511  **********************************************************************/
512  bool Init() const { return _caps != 0U; }
513 
514  /**
515  * @return \e lat1 the latitude of point 1 (degrees).
516  **********************************************************************/
518  { return Init() ? _lat1 : Math::NaN(); }
519 
520  /**
521  * @return \e lon1 the longitude of point 1 (degrees).
522  **********************************************************************/
524  { return Init() ? _lon1 : Math::NaN(); }
525 
526  /**
527  * @return \e azi1 the azimuth (degrees) of the geodesic line at point 1.
528  **********************************************************************/
530  { return Init() ? _azi1 : Math::NaN(); }
531 
532  /**
533  * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses
534  * the equator in a northward direction.
535  **********************************************************************/
537  using std::atan2;
538  return Init() ?
539  atan2(_salp0, _calp0) / Math::degree() : Math::NaN();
540  }
541 
542  /**
543  * @return \e a1 the arc length (degrees) between the northward equatorial
544  * crossing and point 1.
545  **********************************************************************/
547  using std::atan2;
548  return Init() ?
549  atan2(_ssig1, _csig1) / Math::degree() : Math::NaN();
550  }
551 
552  /**
553  * @return \e a the equatorial radius of the ellipsoid (meters). This is
554  * the value inherited from the GeodesicExact object used in the
555  * constructor.
556  **********************************************************************/
558  { return Init() ? _a : Math::NaN(); }
559 
560  /**
561  * @return \e f the flattening of the ellipsoid. This is the value
562  * inherited from the GeodesicExact object used in the constructor.
563  **********************************************************************/
565  { return Init() ? _f : Math::NaN(); }
566 
567  /// \cond SKIP
568  /**
569  * <b>DEPRECATED</b>
570  * @return \e r the inverse flattening of the ellipsoid.
571  **********************************************************************/
572  Math::real InverseFlattening() const
573  { return Init() ? 1/_f : Math::NaN(); }
574  /// \endcond
575 
576  /**
577  * @return \e caps the computational capabilities that this object was
578  * constructed with. LATITUDE and AZIMUTH are always included.
579  **********************************************************************/
580  unsigned Capabilities() const { return _caps; }
581 
582  /**
583  * @param[in] testcaps a set of bitor'ed GeodesicLineExact::mask values.
584  * @return true if the GeodesicLineExact object has all these capabilities.
585  **********************************************************************/
586  bool Capabilities(unsigned testcaps) const {
587  testcaps &= OUT_ALL;
588  return (_caps & testcaps) == testcaps;
589  }
590  ///@}
591 
592  };
593 
594 } // namespace GeographicLib
595 
596 #endif // GEOGRAPHICLIB_GEODESICLINEEXACT_HPP
static T NaN()
Definition: Math.hpp:629
#define GEOGRAPHICLIB_EXPORT
Definition: Constants.hpp:90
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const
Math::real Position(real s12, real &lat2, real &lon2, real &azi2, real &m12) const
Math::real Position(real s12, real &lat2, real &lon2, real &azi2, real &M12, real &M21) const
Math::real Position(real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21) const
GeographicLib::Math::real real
Definition: GeodSolve.cpp:32
Math::real Position(real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21, real &S12) const
Elliptic integrals and functions.
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12) const
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &M12, real &M21) const
bool Capabilities(unsigned testcaps) const
Math::real Position(real s12, real &lat2, real &lon2) const
Namespace for GeographicLib.
Definition: Accumulator.cpp:12
Header for GeographicLib::EllipticFunction class.
static T degree()
Definition: Math.hpp:228
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2) const
Exact geodesic calculations.
Header for GeographicLib::GeodesicExact class.
Math::real Position(real s12, real &lat2, real &lon2, real &azi2) const
Header for GeographicLib::Constants class.
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21) const
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2, real &s12) const
void ArcPosition(real a12, real &lat2, real &lon2) const