GeographicLib  1.40
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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  * Do not wrap \e lon2 in the direct calculation.
123  * @hideinitializer
124  **********************************************************************/
126  /**
127  * All capabilities, calculate everything. (LONG_NOWRAP is not
128  * included in this mask.)
129  * @hideinitializer
130  **********************************************************************/
132  };
133 
134  /** \name Constructors
135  **********************************************************************/
136  ///@{
137 
138  /**
139  * Constructor for a geodesic line staring at latitude \e lat1, longitude
140  * \e lon1, and azimuth \e azi1 (all in degrees).
141  *
142  * @param[in] g A GeodesicExact object used to compute the necessary
143  * information about the GeodesicLineExact.
144  * @param[in] lat1 latitude of point 1 (degrees).
145  * @param[in] lon1 longitude of point 1 (degrees).
146  * @param[in] azi1 azimuth at point 1 (degrees).
147  * @param[in] caps bitor'ed combination of GeodesicLineExact::mask values
148  * specifying the capabilities the GeodesicLineExact object should
149  * possess, i.e., which quantities can be returned in calls to
150  * GeodesicLine::Position.
151  *
152  * \e lat1 should be in the range [&minus;90&deg;, 90&deg;]; \e lon1 and \e
153  * azi1 should be in the range [&minus;540&deg;, 540&deg;).
154  *
155  * The GeodesicLineExact::mask values are
156  * - \e caps |= GeodesicLineExact::LATITUDE for the latitude \e lat2; this
157  * is added automatically;
158  * - \e caps |= GeodesicLineExact::LONGITUDE for the latitude \e lon2;
159  * - \e caps |= GeodesicLineExact::AZIMUTH for the latitude \e azi2; this is
160  * added automatically;
161  * - \e caps |= GeodesicLineExact::DISTANCE for the distance \e s12;
162  * - \e caps |= GeodesicLineExact::REDUCEDLENGTH for the reduced length \e
163  m12;
164  * - \e caps |= GeodesicLineExact::GEODESICSCALE for the geodesic scales \e
165  * M12 and \e M21;
166  * - \e caps |= GeodesicLineExact::AREA for the area \e S12;
167  * - \e caps |= GeodesicLineExact::DISTANCE_IN permits the length of the
168  * geodesic to be given in terms of \e s12; without this capability the
169  * length can only be specified in terms of arc length;
170  * - \e caps |= GeodesicLineExact::ALL for all of the above.
171  * .
172  * The default value of \e caps is GeodesicLineExact::ALL.
173  *
174  * If the point is at a pole, the azimuth is defined by keeping \e lon1
175  * fixed, writing \e lat1 = &plusmn;(90&deg; &minus; &epsilon;), and taking
176  * the limit &epsilon; &rarr; 0+.
177  **********************************************************************/
178  GeodesicLineExact(const GeodesicExact& g, real lat1, real lon1, real azi1,
179  unsigned caps = ALL);
180 
181  /**
182  * A default constructor. If GeodesicLineExact::Position is called on the
183  * resulting object, it returns immediately (without doing any
184  * calculations). The object can be set with a call to
185  * GeodesicExact::Line. Use Init() to test whether object is still in this
186  * uninitialized state.
187  **********************************************************************/
188  GeodesicLineExact() : _caps(0U) {}
189  ///@}
190 
191  /** \name Position in terms of distance
192  **********************************************************************/
193  ///@{
194 
195  /**
196  * Compute the position of point 2 which is a distance \e s12 (meters)
197  * from point 1.
198  *
199  * @param[in] s12 distance between point 1 and point 2 (meters); it can be
200  * signed.
201  * @param[out] lat2 latitude of point 2 (degrees).
202  * @param[out] lon2 longitude of point 2 (degrees); requires that the
203  * GeodesicLineExact object was constructed with \e caps |=
204  * GeodesicLineExact::LONGITUDE.
205  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
206  * @param[out] m12 reduced length of geodesic (meters); requires that the
207  * GeodesicLineExact object was constructed with \e caps |=
208  * GeodesicLineExact::REDUCEDLENGTH.
209  * @param[out] M12 geodesic scale of point 2 relative to point 1
210  * (dimensionless); requires that the GeodesicLineExact object was
211  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
212  * @param[out] M21 geodesic scale of point 1 relative to point 2
213  * (dimensionless); requires that the GeodesicLineExact object was
214  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
215  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
216  * that the GeodesicLineExact object was constructed with \e caps |=
217  * GeodesicLineExact::AREA.
218  * @return \e a12 arc length of between point 1 and point 2 (degrees).
219  *
220  * The values of \e lon2 and \e azi2 returned are in the range
221  * [&minus;180&deg;, 180&deg;).
222  *
223  * The GeodesicLineExact object \e must have been constructed with \e caps
224  * |= GeodesicLineExact::DISTANCE_IN; otherwise Math::NaN() is returned and
225  * no parameters are set. Requesting a value which the GeodesicLineExact
226  * object is not capable of computing is not an error; the corresponding
227  * argument will not be altered.
228  *
229  * The following functions are overloaded versions of
230  * GeodesicLineExact::Position which omit some of the output parameters.
231  * Note, however, that the arc length is always computed and returned as
232  * the function value.
233  **********************************************************************/
235  real& lat2, real& lon2, real& azi2,
236  real& m12, real& M12, real& M21,
237  real& S12) const {
238  real t;
239  return GenPosition(false, s12,
240  LATITUDE | LONGITUDE | AZIMUTH |
241  REDUCEDLENGTH | GEODESICSCALE | AREA,
242  lat2, lon2, azi2, t, m12, M12, M21, S12);
243  }
244 
245  /**
246  * See the documentation for GeodesicLineExact::Position.
247  **********************************************************************/
248  Math::real Position(real s12, real& lat2, real& lon2) const {
249  real t;
250  return GenPosition(false, s12,
251  LATITUDE | LONGITUDE,
252  lat2, lon2, t, t, t, t, t, t);
253  }
254 
255  /**
256  * See the documentation for GeodesicLineExact::Position.
257  **********************************************************************/
258  Math::real Position(real s12, real& lat2, real& lon2,
259  real& azi2) const {
260  real t;
261  return GenPosition(false, s12,
262  LATITUDE | LONGITUDE | AZIMUTH,
263  lat2, lon2, azi2, t, t, t, t, t);
264  }
265 
266  /**
267  * See the documentation for GeodesicLineExact::Position.
268  **********************************************************************/
269  Math::real Position(real s12, real& lat2, real& lon2,
270  real& azi2, real& m12) const {
271  real t;
272  return GenPosition(false, s12,
273  LATITUDE | LONGITUDE |
274  AZIMUTH | REDUCEDLENGTH,
275  lat2, lon2, azi2, t, m12, t, t, t);
276  }
277 
278  /**
279  * See the documentation for GeodesicLineExact::Position.
280  **********************************************************************/
281  Math::real Position(real s12, real& lat2, real& lon2,
282  real& azi2, real& M12, real& M21)
283  const {
284  real t;
285  return GenPosition(false, s12,
286  LATITUDE | LONGITUDE |
287  AZIMUTH | GEODESICSCALE,
288  lat2, lon2, azi2, t, t, M12, M21, t);
289  }
290 
291  /**
292  * See the documentation for GeodesicLineExact::Position.
293  **********************************************************************/
295  real& lat2, real& lon2, real& azi2,
296  real& m12, real& M12, real& M21)
297  const {
298  real t;
299  return GenPosition(false, s12,
300  LATITUDE | LONGITUDE | AZIMUTH |
301  REDUCEDLENGTH | GEODESICSCALE,
302  lat2, lon2, azi2, t, m12, M12, M21, t);
303  }
304 
305  ///@}
306 
307  /** \name Position in terms of arc length
308  **********************************************************************/
309  ///@{
310 
311  /**
312  * Compute the position of point 2 which is an arc length \e a12 (degrees)
313  * from point 1.
314  *
315  * @param[in] a12 arc length between point 1 and point 2 (degrees); it can
316  * be signed.
317  * @param[out] lat2 latitude of point 2 (degrees).
318  * @param[out] lon2 longitude of point 2 (degrees); requires that the
319  * GeodesicLineExact object was constructed with \e caps |=
320  * GeodesicLineExact::LONGITUDE.
321  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
322  * @param[out] s12 distance between point 1 and point 2 (meters); requires
323  * that the GeodesicLineExact object was constructed with \e caps |=
324  * GeodesicLineExact::DISTANCE.
325  * @param[out] m12 reduced length of geodesic (meters); requires that the
326  * GeodesicLineExact object was constructed with \e caps |=
327  * GeodesicLineExact::REDUCEDLENGTH.
328  * @param[out] M12 geodesic scale of point 2 relative to point 1
329  * (dimensionless); requires that the GeodesicLineExact object was
330  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
331  * @param[out] M21 geodesic scale of point 1 relative to point 2
332  * (dimensionless); requires that the GeodesicLineExact object was
333  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
334  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
335  * that the GeodesicLineExact object was constructed with \e caps |=
336  * GeodesicLineExact::AREA.
337  *
338  * The values of \e lon2 and \e azi2 returned are in the range
339  * [&minus;180&deg;, 180&deg;).
340  *
341  * Requesting a value which the GeodesicLineExact object is not capable of
342  * computing is not an error; the corresponding argument will not be
343  * altered.
344  *
345  * The following functions are overloaded versions of
346  * GeodesicLineExact::ArcPosition which omit some of the output parameters.
347  **********************************************************************/
348  void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
349  real& s12, real& m12, real& M12, real& M21,
350  real& S12) const {
351  GenPosition(true, a12,
352  LATITUDE | LONGITUDE | AZIMUTH | DISTANCE |
353  REDUCEDLENGTH | GEODESICSCALE | AREA,
354  lat2, lon2, azi2, s12, m12, M12, M21, S12);
355  }
356 
357  /**
358  * See the documentation for GeodesicLineExact::ArcPosition.
359  **********************************************************************/
360  void ArcPosition(real a12, real& lat2, real& lon2)
361  const {
362  real t;
363  GenPosition(true, a12,
364  LATITUDE | LONGITUDE,
365  lat2, lon2, t, t, t, t, t, t);
366  }
367 
368  /**
369  * See the documentation for GeodesicLineExact::ArcPosition.
370  **********************************************************************/
371  void ArcPosition(real a12,
372  real& lat2, real& lon2, real& azi2)
373  const {
374  real t;
375  GenPosition(true, a12,
376  LATITUDE | LONGITUDE | AZIMUTH,
377  lat2, lon2, azi2, t, t, t, t, t);
378  }
379 
380  /**
381  * See the documentation for GeodesicLineExact::ArcPosition.
382  **********************************************************************/
383  void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
384  real& s12) const {
385  real t;
386  GenPosition(true, a12,
387  LATITUDE | LONGITUDE | AZIMUTH | DISTANCE,
388  lat2, lon2, azi2, s12, t, t, t, t);
389  }
390 
391  /**
392  * See the documentation for GeodesicLineExact::ArcPosition.
393  **********************************************************************/
394  void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
395  real& s12, real& m12) const {
396  real t;
397  GenPosition(true, a12,
398  LATITUDE | LONGITUDE | AZIMUTH |
399  DISTANCE | REDUCEDLENGTH,
400  lat2, lon2, azi2, s12, m12, t, t, t);
401  }
402 
403  /**
404  * See the documentation for GeodesicLineExact::ArcPosition.
405  **********************************************************************/
406  void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
407  real& s12, real& M12, real& M21)
408  const {
409  real t;
410  GenPosition(true, a12,
411  LATITUDE | LONGITUDE | AZIMUTH |
412  DISTANCE | GEODESICSCALE,
413  lat2, lon2, azi2, s12, t, M12, M21, t);
414  }
415 
416  /**
417  * See the documentation for GeodesicLineExact::ArcPosition.
418  **********************************************************************/
419  void ArcPosition(real a12, real& lat2, real& lon2, real& azi2,
420  real& s12, real& m12, real& M12, real& M21)
421  const {
422  real t;
423  GenPosition(true, a12,
424  LATITUDE | LONGITUDE | AZIMUTH |
425  DISTANCE | REDUCEDLENGTH | GEODESICSCALE,
426  lat2, lon2, azi2, s12, m12, M12, M21, t);
427  }
428  ///@}
429 
430  /** \name The general position function.
431  **********************************************************************/
432  ///@{
433 
434  /**
435  * The general position function. GeodesicLineExact::Position and
436  * GeodesicLineExact::ArcPosition are defined in terms of this function.
437  *
438  * @param[in] arcmode boolean flag determining the meaning of the second
439  * parameter; if arcmode is false, then the GeodesicLineExact object must
440  * have been constructed with \e caps |= GeodesicLineExact::DISTANCE_IN.
441  * @param[in] s12_a12 if \e arcmode is false, this is the distance between
442  * point 1 and point 2 (meters); otherwise it is the arc length between
443  * point 1 and point 2 (degrees); it can be signed.
444  * @param[in] outmask a bitor'ed combination of GeodesicLineExact::mask
445  * values specifying which of the following parameters should be set.
446  * @param[out] lat2 latitude of point 2 (degrees).
447  * @param[out] lon2 longitude of point 2 (degrees); requires that the
448  * GeodesicLineExact object was constructed with \e caps |=
449  * GeodesicLineExact::LONGITUDE.
450  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
451  * @param[out] s12 distance between point 1 and point 2 (meters); requires
452  * that the GeodesicLineExact object was constructed with \e caps |=
453  * GeodesicLineExact::DISTANCE.
454  * @param[out] m12 reduced length of geodesic (meters); requires that the
455  * GeodesicLineExact object was constructed with \e caps |=
456  * GeodesicLineExact::REDUCEDLENGTH.
457  * @param[out] M12 geodesic scale of point 2 relative to point 1
458  * (dimensionless); requires that the GeodesicLineExact object was
459  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
460  * @param[out] M21 geodesic scale of point 1 relative to point 2
461  * (dimensionless); requires that the GeodesicLineExact object was
462  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
463  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
464  * that the GeodesicLineExact object was constructed with \e caps |=
465  * GeodesicLineExact::AREA.
466  * @return \e a12 arc length of between point 1 and point 2 (degrees).
467  *
468  * The GeodesicLineExact::mask values possible for \e outmask are
469  * - \e outmask |= GeodesicLineExact::LATITUDE for the latitude \e lat2;
470  * - \e outmask |= GeodesicLineExact::LONGITUDE for the latitude \e lon2;
471  * - \e outmask |= GeodesicLineExact::AZIMUTH for the latitude \e azi2;
472  * - \e outmask |= GeodesicLineExact::DISTANCE for the distance \e s12;
473  * - \e outmask |= GeodesicLineExact::REDUCEDLENGTH for the reduced length
474  * \e m12;
475  * - \e outmask |= GeodesicLineExact::GEODESICSCALE for the geodesic scales
476  * \e M12 and \e M21;
477  * - \e outmask |= GeodesicLineExact::AREA for the area \e S12;
478  * - \e outmask |= GeodesicLineExact::ALL for all of the above;
479  * - \e outmask |= GeodesicLineExact::LONG_NOWRAP stops the returned value
480  * of \e lon2 being wrapped into the range [&minus;180&deg;, 180&deg;).
481  * .
482  * Requesting a value which the GeodesicLineExact object is not capable of
483  * computing is not an error; the corresponding argument will not be
484  * altered. Note, however, that the arc length is always computed and
485  * returned as the function value.
486  *
487  * With the LONG_NOWRAP bit set, the quantity \e lon2 &minus; \e lon1
488  * indicates how many times the geodesic wrapped around the ellipsoid.
489  * Because \e lon2 might be outside the normal allowed range for
490  * longitudes, [&minus;540&deg;, 540&deg;), be sure to normalize it with
491  * Math::AngNormalize2 before using it in other GeographicLib calls.
492  **********************************************************************/
493  Math::real GenPosition(bool arcmode, real s12_a12, unsigned outmask,
494  real& lat2, real& lon2, real& azi2,
495  real& s12, real& m12, real& M12, real& M21,
496  real& S12) const;
497 
498  ///@}
499 
500  /** \name Inspector functions
501  **********************************************************************/
502  ///@{
503 
504  /**
505  * @return true if the object has been initialized.
506  **********************************************************************/
507  bool Init() const { return _caps != 0U; }
508 
509  /**
510  * @return \e lat1 the latitude of point 1 (degrees).
511  **********************************************************************/
513  { return Init() ? _lat1 : Math::NaN(); }
514 
515  /**
516  * @return \e lon1 the longitude of point 1 (degrees).
517  **********************************************************************/
519  { return Init() ? _lon1 : Math::NaN(); }
520 
521  /**
522  * @return \e azi1 the azimuth (degrees) of the geodesic line at point 1.
523  **********************************************************************/
525  { return Init() ? _azi1 : Math::NaN(); }
526 
527  /**
528  * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses
529  * the equator in a northward direction.
530  **********************************************************************/
532  using std::atan2;
533  return Init() ?
534  atan2(_salp0, _calp0) / Math::degree() : Math::NaN();
535  }
536 
537  /**
538  * @return \e a1 the arc length (degrees) between the northward equatorial
539  * crossing and point 1.
540  **********************************************************************/
542  using std::atan2;
543  return Init() ?
544  atan2(_ssig1, _csig1) / Math::degree() : Math::NaN();
545  }
546 
547  /**
548  * @return \e a the equatorial radius of the ellipsoid (meters). This is
549  * the value inherited from the GeodesicExact object used in the
550  * constructor.
551  **********************************************************************/
553  { return Init() ? _a : Math::NaN(); }
554 
555  /**
556  * @return \e f the flattening of the ellipsoid. This is the value
557  * inherited from the GeodesicExact object used in the constructor.
558  **********************************************************************/
560  { return Init() ? _f : Math::NaN(); }
561 
562  /// \cond SKIP
563  /**
564  * <b>DEPRECATED</b>
565  * @return \e r the inverse flattening of the ellipsoid.
566  **********************************************************************/
567  Math::real InverseFlattening() const
568  { return Init() ? 1/_f : Math::NaN(); }
569  /// \endcond
570 
571  /**
572  * @return \e caps the computational capabilities that this object was
573  * constructed with. LATITUDE and AZIMUTH are always included.
574  **********************************************************************/
575  unsigned Capabilities() const { return _caps; }
576 
577  /**
578  * @param[in] testcaps a set of bitor'ed GeodesicLineExact::mask values.
579  * @return true if the GeodesicLineExact object has all these capabilities.
580  **********************************************************************/
581  bool Capabilities(unsigned testcaps) const {
582  testcaps &= OUT_ALL;
583  return (_caps & testcaps) == testcaps;
584  }
585  ///@}
586 
587  };
588 
589 } // namespace GeographicLib
590 
591 #endif // GEOGRAPHICLIB_GEODESICLINEEXACT_HPP
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2) const
static T NaN()
Definition: Math.hpp:461
Math::real Position(real s12, real &lat2, real &lon2, real &azi2, real &m12) const
#define GEOGRAPHICLIB_EXPORT
Definition: Constants.hpp:69
Math::real Position(real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21, real &S12) const
GeographicLib::Math::real real
Definition: GeodSolve.cpp:32
Math::real Position(real s12, real &lat2, real &lon2, real &azi2, real &M12, real &M21) const
Elliptic integrals and functions.
void ArcPosition(real a12, real &lat2, real &lon2) const
Math::real Position(real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21) const
Math::real Position(real s12, real &lat2, real &lon2) const
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 &M12, real &M21) const
Namespace for GeographicLib.
Definition: Accumulator.cpp:12
Header for GeographicLib::EllipticFunction class.
Math::real Position(real s12, real &lat2, real &lon2, real &azi2) const
static T degree()
Definition: Math.hpp:228
Exact geodesic calculations.
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &M12, real &M21) const
Header for GeographicLib::GeodesicExact class.
Header for GeographicLib::Constants class.
bool Capabilities(unsigned testcaps) const
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const
void ArcPosition(real a12, real &lat2, real &lon2, real &azi2, real &s12) const