NETGeographicLib  1.43
GeodesicLineExact.h
Go to the documentation of this file.
1 #pragma once
2 /**
3  * \file NETGeographicLib/GeodesicLineExact.h
4  * \brief Header for NETGeographicLib::GeodesicLineExact class
5  *
6  * NETGeographicLib is copyright (c) Scott Heiman (2013)
7  * GeographicLib is Copyright (c) Charles Karney (2010-2012)
8  * <charles@karney.com> and licensed under the MIT/X11 License.
9  * For more information, see
10  * http://geographiclib.sourceforge.net/
11  **********************************************************************/
12 #include "NETGeographicLib.h"
13 
14 namespace NETGeographicLib
15 {
16  ref class GeodesicExact;
17  /**
18  * \brief .NET wrapper for GeographicLib::GeodesicLineExact.
19  *
20  * This class allows .NET applications to access GeographicLib::GeodesicLineExact.
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  * C# Example:
28  * \include example-GeodesicLineExact.cs
29  * Managed C++ Example:
30  * \include example-GeodesicLineExact.cpp
31  * Visual Basic Example:
32  * \include example-GeodesicLineExact.vb
33  *
34  * <B>INTERFACE DIFFERENCES:</B><BR>
35  * A constructor has been provided that assumes WGS84 parameters.
36  *
37  * The following functions are implemented as properties:
38  * Latitude, Longitude, Azimuth, EquatorialAzimuth, EquatorialArc,
39  * MajorRadius, and Flattening.
40  *
41  * The constructors, GenPosition, and Capabilities functions accept the
42  * "capabilities mask" as a NETGeographicLib::Mask rather than an
43  * unsigned. The Capabilities function returns a NETGeographicLib::Mask
44  * rather than an unsigned.
45  **********************************************************************/
46  public ref class GeodesicLineExact
47  {
48  private:
49  enum class captype {
50  CAP_NONE = 0U,
51  CAP_E = 1U<<0,
52  // Skip 1U<<1 for compatibility with Geodesic (not required)
53  CAP_D = 1U<<2,
54  CAP_H = 1U<<3,
55  CAP_C4 = 1U<<4,
56  CAP_ALL = 0x1FU,
57  CAP_MASK = CAP_ALL,
58  OUT_ALL = 0x7F80U,
59  OUT_MASK = 0xFF80U, // Includes LONG_UNROLL
60  };
61  // a pointer to the GeographicLib::GeodesicLineExact.
62  const GeographicLib::GeodesicLineExact* m_pGeodesicLineExact;
63 
64  // the finalizer frees the unmanaged memory when the object is destroyed.
65  !GeodesicLineExact(void);
66  public:
67  /**
68  * Bit masks for what calculations to do. These masks do double duty.
69  * They signify to the GeodesicLineExact::GeodesicLineExact constructor and
70  * to GeodesicExact::Line what capabilities should be included in the
71  * GeodesicLineExact object. They also specify which results to return in
72  * the general routines GeodesicExact::GenDirect and
73  * GeodesicExact::GenInverse routines. GeodesicLineExact::mask is a
74  * duplication of this enum.
75  **********************************************************************/
76  enum class mask {
77  /**
78  * No capabilities, no output.
79  * @hideinitializer
80  **********************************************************************/
81  NONE = 0U,
82  /**
83  * Calculate latitude \e lat2. (It's not necessary to include this as a
84  * capability to GeodesicLineExact because this is included by default.)
85  * @hideinitializer
86  **********************************************************************/
87  LATITUDE = 1U<<7 | unsigned(captype::CAP_NONE),
88  /**
89  * Calculate longitude \e lon2.
90  * @hideinitializer
91  **********************************************************************/
92  LONGITUDE = 1U<<8 | unsigned(captype::CAP_H),
93  /**
94  * Calculate azimuths \e azi1 and \e azi2. (It's not necessary to
95  * include this as a capability to GeodesicLineExact because this is
96  * included by default.)
97  * @hideinitializer
98  **********************************************************************/
99  AZIMUTH = 1U<<9 | unsigned(captype::CAP_NONE),
100  /**
101  * Calculate distance \e s12.
102  * @hideinitializer
103  **********************************************************************/
104  DISTANCE = 1U<<10 | unsigned(captype::CAP_E),
105  /**
106  * Allow distance \e s12 to be used as input in the direct geodesic
107  * problem.
108  * @hideinitializer
109  **********************************************************************/
110  DISTANCE_IN = 1U<<11 | unsigned(captype::CAP_E),
111  /**
112  * Calculate reduced length \e m12.
113  * @hideinitializer
114  **********************************************************************/
115  REDUCEDLENGTH = 1U<<12 | unsigned(captype::CAP_D),
116  /**
117  * Calculate geodesic scales \e M12 and \e M21.
118  * @hideinitializer
119  **********************************************************************/
120  GEODESICSCALE = 1U<<13 | unsigned(captype::CAP_D),
121  /**
122  * Calculate area \e S12.
123  * @hideinitializer
124  **********************************************************************/
125  AREA = 1U<<14 | unsigned(captype::CAP_C4),
126  /**
127  * Unroll \e lon2 in the direct calculation. (This flag used to be
128  * called LONG_NOWRAP.)
129  * @hideinitializer
130  **********************************************************************/
131  LONG_UNROLL = 1U<<15,
133  /**
134  * All capabilities, calculate everything. (LONG_UNROLL is not
135  * included in this mask.)
136  * @hideinitializer
137  **********************************************************************/
138  ALL = unsigned(captype::OUT_ALL)| unsigned(captype::CAP_ALL),
139  };
140 
141  /** \name Constructors
142  **********************************************************************/
143  ///@{
144 
145  /**
146  * Constructor for a geodesic line staring at latitude \e lat1, longitude
147  * \e lon1, and azimuth \e azi1 (all in degrees).
148  *
149  * @param[in] g A GeodesicExact object used to compute the necessary
150  * information about the GeodesicLineExact.
151  * @param[in] lat1 latitude of point 1 (degrees).
152  * @param[in] lon1 longitude of point 1 (degrees).
153  * @param[in] azi1 azimuth at point 1 (degrees).
154  * @param[in] caps bitor'ed combination of NETGeographicLib::Mask values
155  * specifying the capabilities the GeodesicLineExact object should
156  * possess, i.e., which quantities can be returned in calls to
157  * GeodesicLine::Position.
158  *
159  * \e lat1 should be in the range [&minus;90&deg;, 90&deg;]; \e lon1 and \e
160  * azi1 should be in the range [&minus;540&deg;, 540&deg;).
161  *
162  * The NETGeographicLib::Mask values are
163  * - \e caps |= GeodesicLineExact::LATITUDE for the latitude \e lat2; this
164  * is added automatically;
165  * - \e caps |= NETGeographicLib::Mask::LONGITUDE for the latitude \e lon2;
166  * - \e caps |= NETGeographicLib::Mask::AZIMUTH for the latitude \e azi2; this is
167  * added automatically;
168  * - \e caps |= NETGeographicLib::Mask::DISTANCE for the distance \e s12;
169  * - \e caps |= NETGeographicLib::Mask::REDUCEDLENGTH for the reduced length \e
170  m12;
171  * - \e caps |= NETGeographicLib::Mask::GEODESICSCALE for the geodesic scales \e
172  * M12 and \e M21;
173  * - \e caps |= NETGeographicLib::Mask::AREA for the area \e S12;
174  * - \e caps |= NETGeographicLib::Mask::DISTANCE_IN permits the length of the
175  * geodesic to be given in terms of \e s12; without this capability the
176  * length can only be specified in terms of arc length;
177  * - \e caps |= NETGeographicLib::Mask::ALL for all of the above.
178  * .
179  *
180  * If the point is at a pole, the azimuth is defined by keeping \e lon1
181  * fixed, writing \e lat1 = &plusmn;(90&deg; &minus; &epsilon;), and taking
182  * the limit &epsilon; &rarr; 0+.
183  **********************************************************************/
184  GeodesicLineExact(GeodesicExact^ g, double lat1, double lon1, double azi1,
185  NETGeographicLib::Mask caps );
186 
187  /**
188  * A default constructor which assumes the WGS84 ellipsoid. See
189  * constructor comments for details.
190  **********************************************************************/
191  GeodesicLineExact(double lat1, double lon1, double azi1,
193  ///@}
194 
195  /**
196  * The destructor calls the finalizer
197  **********************************************************************/
199  { this->!GeodesicLineExact(); }
200 
201  /** \name Position in terms of distance
202  **********************************************************************/
203  ///@{
204 
205  /**
206  * Compute the position of point 2 which is a distance \e s12 (meters)
207  * from point 1.
208  *
209  * @param[in] s12 distance between point 1 and point 2 (meters); it can be
210  * signed.
211  * @param[out] lat2 latitude of point 2 (degrees).
212  * @param[out] lon2 longitude of point 2 (degrees); requires that the
213  * GeodesicLineExact object was constructed with \e caps |=
214  * GeodesicLineExact::LONGITUDE.
215  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
216  * @param[out] m12 reduced length of geodesic (meters); requires that the
217  * GeodesicLineExact object was constructed with \e caps |=
218  * GeodesicLineExact::REDUCEDLENGTH.
219  * @param[out] M12 geodesic scale of point 2 relative to point 1
220  * (dimensionless); requires that the GeodesicLineExact object was
221  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
222  * @param[out] M21 geodesic scale of point 1 relative to point 2
223  * (dimensionless); requires that the GeodesicLineExact object was
224  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
225  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
226  * that the GeodesicLineExact object was constructed with \e caps |=
227  * GeodesicLineExact::AREA.
228  * @return \e a12 arc length of between point 1 and point 2 (degrees).
229  *
230  * The values of \e lon2 and \e azi2 returned are in the range
231  * [&minus;180&deg;, 180&deg;).
232  *
233  * The GeodesicLineExact object \e must have been constructed with \e caps
234  * |= GeodesicLineExact::DISTANCE_IN; otherwise Math::NaN() is returned and
235  * no parameters are set. Requesting a value which the GeodesicLineExact
236  * object is not capable of computing is not an error; the corresponding
237  * argument will not be altered.
238  *
239  * The following functions are overloaded versions of
240  * GeodesicLineExact::Position which omit some of the output parameters.
241  * Note, however, that the arc length is always computed and returned as
242  * the function value.
243  **********************************************************************/
244  double Position(double s12,
245  [System::Runtime::InteropServices::Out] double% lat2,
246  [System::Runtime::InteropServices::Out] double% lon2,
247  [System::Runtime::InteropServices::Out] double% azi2,
248  [System::Runtime::InteropServices::Out] double% m12,
249  [System::Runtime::InteropServices::Out] double% M12,
250  [System::Runtime::InteropServices::Out] double% M21,
251  [System::Runtime::InteropServices::Out] double% S12);
252 
253  /**
254  * See the documentation for GeodesicLineExact::Position.
255  **********************************************************************/
256  double Position(double s12,
257  [System::Runtime::InteropServices::Out] double% lat2,
258  [System::Runtime::InteropServices::Out] double% lon2);
259 
260  /**
261  * See the documentation for GeodesicLineExact::Position.
262  **********************************************************************/
263  double Position(double s12,
264  [System::Runtime::InteropServices::Out] double% lat2,
265  [System::Runtime::InteropServices::Out] double% lon2,
266  [System::Runtime::InteropServices::Out] double% azi2);
267 
268  /**
269  * See the documentation for GeodesicLineExact::Position.
270  **********************************************************************/
271  double Position(double s12,
272  [System::Runtime::InteropServices::Out] double% lat2,
273  [System::Runtime::InteropServices::Out] double% lon2,
274  [System::Runtime::InteropServices::Out] double% azi2,
275  [System::Runtime::InteropServices::Out] double% m12);
276 
277  /**
278  * See the documentation for GeodesicLineExact::Position.
279  **********************************************************************/
280  double Position(double s12,
281  [System::Runtime::InteropServices::Out] double% lat2,
282  [System::Runtime::InteropServices::Out] double% lon2,
283  [System::Runtime::InteropServices::Out] double% azi2,
284  [System::Runtime::InteropServices::Out] double% M12,
285  [System::Runtime::InteropServices::Out] double% M21);
286 
287  /**
288  * See the documentation for GeodesicLineExact::Position.
289  **********************************************************************/
290  double Position(double s12,
291  [System::Runtime::InteropServices::Out] double% lat2,
292  [System::Runtime::InteropServices::Out] double% lon2,
293  [System::Runtime::InteropServices::Out] double% azi2,
294  [System::Runtime::InteropServices::Out] double% m12,
295  [System::Runtime::InteropServices::Out] double% M12,
296  [System::Runtime::InteropServices::Out] double% M21);
297 
298  ///@}
299 
300  /** \name Position in terms of arc length
301  **********************************************************************/
302  ///@{
303 
304  /**
305  * Compute the position of point 2 which is an arc length \e a12 (degrees)
306  * from point 1.
307  *
308  * @param[in] a12 arc length between point 1 and point 2 (degrees); it can
309  * be signed.
310  * @param[out] lat2 latitude of point 2 (degrees).
311  * @param[out] lon2 longitude of point 2 (degrees); requires that the
312  * GeodesicLineExact object was constructed with \e caps |=
313  * GeodesicLineExact::LONGITUDE.
314  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
315  * @param[out] s12 distance between point 1 and point 2 (meters); requires
316  * that the GeodesicLineExact object was constructed with \e caps |=
317  * GeodesicLineExact::DISTANCE.
318  * @param[out] m12 reduced length of geodesic (meters); requires that the
319  * GeodesicLineExact object was constructed with \e caps |=
320  * GeodesicLineExact::REDUCEDLENGTH.
321  * @param[out] M12 geodesic scale of point 2 relative to point 1
322  * (dimensionless); requires that the GeodesicLineExact object was
323  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
324  * @param[out] M21 geodesic scale of point 1 relative to point 2
325  * (dimensionless); requires that the GeodesicLineExact object was
326  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
327  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
328  * that the GeodesicLineExact object was constructed with \e caps |=
329  * GeodesicLineExact::AREA.
330  *
331  * The values of \e lon2 and \e azi2 returned are in the range
332  * [&minus;180&deg;, 180&deg;).
333  *
334  * Requesting a value which the GeodesicLineExact object is not capable of
335  * computing is not an error; the corresponding argument will not be
336  * altered.
337  *
338  * The following functions are overloaded versions of
339  * GeodesicLineExact::ArcPosition which omit some of the output parameters.
340  **********************************************************************/
341  void ArcPosition(double a12,
342  [System::Runtime::InteropServices::Out] double% lat2,
343  [System::Runtime::InteropServices::Out] double% lon2,
344  [System::Runtime::InteropServices::Out] double% azi2,
345  [System::Runtime::InteropServices::Out] double% s12,
346  [System::Runtime::InteropServices::Out] double% m12,
347  [System::Runtime::InteropServices::Out] double% M12,
348  [System::Runtime::InteropServices::Out] double% M21,
349  [System::Runtime::InteropServices::Out] double% S12);
350 
351  /**
352  * See the documentation for GeodesicLineExact::ArcPosition.
353  **********************************************************************/
354  void ArcPosition(double a12,
355  [System::Runtime::InteropServices::Out] double% lat2,
356  [System::Runtime::InteropServices::Out] double% lon2);
357 
358  /**
359  * See the documentation for GeodesicLineExact::ArcPosition.
360  **********************************************************************/
361  void ArcPosition(double a12,
362  [System::Runtime::InteropServices::Out] double% lat2,
363  [System::Runtime::InteropServices::Out] double% lon2,
364  [System::Runtime::InteropServices::Out] double% azi2);
365 
366  /**
367  * See the documentation for GeodesicLineExact::ArcPosition.
368  **********************************************************************/
369  void ArcPosition(double a12,
370  [System::Runtime::InteropServices::Out] double% lat2,
371  [System::Runtime::InteropServices::Out] double% lon2,
372  [System::Runtime::InteropServices::Out] double% azi2,
373  [System::Runtime::InteropServices::Out] double% s12);
374 
375  /**
376  * See the documentation for GeodesicLineExact::ArcPosition.
377  **********************************************************************/
378  void ArcPosition(double a12,
379  [System::Runtime::InteropServices::Out] double% lat2,
380  [System::Runtime::InteropServices::Out] double% lon2,
381  [System::Runtime::InteropServices::Out] double% azi2,
382  [System::Runtime::InteropServices::Out] double% s12,
383  [System::Runtime::InteropServices::Out] double% m12);
384 
385  /**
386  * See the documentation for GeodesicLineExact::ArcPosition.
387  **********************************************************************/
388  void ArcPosition(double a12,
389  [System::Runtime::InteropServices::Out] double% lat2,
390  [System::Runtime::InteropServices::Out] double% lon2,
391  [System::Runtime::InteropServices::Out] double% azi2,
392  [System::Runtime::InteropServices::Out] double% s12,
393  [System::Runtime::InteropServices::Out] double% M12,
394  [System::Runtime::InteropServices::Out] double% M21);
395 
396  /**
397  * See the documentation for GeodesicLineExact::ArcPosition.
398  **********************************************************************/
399  void ArcPosition(double a12,
400  [System::Runtime::InteropServices::Out] double% lat2,
401  [System::Runtime::InteropServices::Out] double% lon2,
402  [System::Runtime::InteropServices::Out] double% azi2,
403  [System::Runtime::InteropServices::Out] double% s12,
404  [System::Runtime::InteropServices::Out] double% m12,
405  [System::Runtime::InteropServices::Out] double% M12,
406  [System::Runtime::InteropServices::Out] double% M21);
407  ///@}
408 
409  /** \name The general position function.
410  **********************************************************************/
411  ///@{
412 
413  /**
414  * The general position function. GeodesicLineExact::Position and
415  * GeodesicLineExact::ArcPosition are defined in terms of this function.
416  *
417  * @param[in] arcmode boolean flag determining the meaning of the second
418  * parameter; if arcmode is false, then the GeodesicLineExact object must
419  * have been constructed with \e caps |= GeodesicLineExact::DISTANCE_IN.
420  * @param[in] s12_a12 if \e arcmode is false, this is the distance between
421  * point 1 and point 2 (meters); otherwise it is the arc length between
422  * point 1 and point 2 (degrees); it can be signed.
423  * @param[in] outmask a bitor'ed combination of GeodesicLineExact::mask
424  * values specifying which of the following parameters should be set.
425  * @param[out] lat2 latitude of point 2 (degrees).
426  * @param[out] lon2 longitude of point 2 (degrees); requires that the
427  * GeodesicLineExact object was constructed with \e caps |=
428  * GeodesicLineExact::LONGITUDE.
429  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
430  * @param[out] s12 distance between point 1 and point 2 (meters); requires
431  * that the GeodesicLineExact object was constructed with \e caps |=
432  * GeodesicLineExact::DISTANCE.
433  * @param[out] m12 reduced length of geodesic (meters); requires that the
434  * GeodesicLineExact object was constructed with \e caps |=
435  * GeodesicLineExact::REDUCEDLENGTH.
436  * @param[out] M12 geodesic scale of point 2 relative to point 1
437  * (dimensionless); requires that the GeodesicLineExact object was
438  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
439  * @param[out] M21 geodesic scale of point 1 relative to point 2
440  * (dimensionless); requires that the GeodesicLineExact object was
441  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
442  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
443  * that the GeodesicLineExact object was constructed with \e caps |=
444  * GeodesicLineExact::AREA.
445  * @return \e a12 arc length of between point 1 and point 2 (degrees).
446  *
447  * The GeodesicLineExact::mask values possible for \e outmask are
448  * - \e outmask |= GeodesicLineExact::LATITUDE for the latitude \e lat2;
449  * - \e outmask |= GeodesicLineExact::LONGITUDE for the latitude \e lon2;
450  * - \e outmask |= GeodesicLineExact::AZIMUTH for the latitude \e azi2;
451  * - \e outmask |= GeodesicLineExact::DISTANCE for the distance \e s12;
452  * - \e outmask |= GeodesicLineExact::REDUCEDLENGTH for the reduced length
453  * \e m12;
454  * - \e outmask |= GeodesicLineExact::GEODESICSCALE for the geodesic scales
455  * \e M12 and \e M21;
456  * - \e outmask |= GeodesicLineExact::AREA for the area \e S12;
457  * - \e outmask |= GeodesicLineExact::ALL for all of the above;
458  * - \e outmask |= GeodesicLineExact::LONG_UNROLL to unroll \e lon2 instead
459  * of wrapping it into the range [&minus;180&deg;, 180&deg;).
460  * .
461  * Requesting a value which the GeodesicLineExact object is not capable of
462  * computing is not an error; the corresponding argument will not be
463  * altered. Note, however, that the arc length is always computed and
464  * returned as the function value.
465  *
466  * With the LONG_UNROLL bit set, the quantity \e lon2 &minus; \e lon1
467  * indicates how many times and in what sense the geodesic encircles
468  * the ellipsoid. Because \e lon2 might be outside the normal allowed
469  * range for longitudes, [&minus;540&deg;, 540&deg;), be sure to
470  * normalize it with Math::AngNormalize2 before using it in other
471  * GeographicLib calls.
472  **********************************************************************/
473  double GenPosition(bool arcmode, double s12_a12,
474  GeodesicLineExact::mask outmask,
475  [System::Runtime::InteropServices::Out] double% lat2,
476  [System::Runtime::InteropServices::Out] double% lon2,
477  [System::Runtime::InteropServices::Out] double% azi2,
478  [System::Runtime::InteropServices::Out] double% s12,
479  [System::Runtime::InteropServices::Out] double% m12,
480  [System::Runtime::InteropServices::Out] double% M12,
481  [System::Runtime::InteropServices::Out] double% M21,
482  [System::Runtime::InteropServices::Out] double% S12);
483 
484  ///@}
485 
486  /** \name Inspector functions
487  **********************************************************************/
488  ///@{
489  /**
490  * @return \e lat1 the latitude of point 1 (degrees).
491  **********************************************************************/
492  property double Latitude { double get(); }
493 
494  /**
495  * @return \e lon1 the longitude of point 1 (degrees).
496  **********************************************************************/
497  property double Longitude { double get(); }
498 
499  /**
500  * @return \e azi1 the azimuth (degrees) of the geodesic line at point 1.
501  **********************************************************************/
502  property double Azimuth { double get(); }
503 
504  /**
505  * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses
506  * the equator in a northward direction.
507  **********************************************************************/
508  property double EquatorialAzimuth { double get(); }
509 
510  /**
511  * @return \e a1 the arc length (degrees) between the northward equatorial
512  * crossing and point 1.
513  **********************************************************************/
514  property double EquatorialArc { double get(); }
515 
516  /**
517  * @return \e a the equatorial radius of the ellipsoid (meters). This is
518  * the value inherited from the GeodesicExact object used in the
519  * constructor.
520  **********************************************************************/
521  property double MajorRadius { double get(); }
522 
523  /**
524  * @return \e f the flattening of the ellipsoid. This is the value
525  * inherited from the GeodesicExact object used in the constructor.
526  **********************************************************************/
527  property double Flattening { double get(); }
528 
529  /**
530  * @return \e caps the computational capabilities that this object was
531  * constructed with. LATITUDE and AZIMUTH are always included.
532  **********************************************************************/
534 
535  /**
536  * @param[in] testcaps a set of bitor'ed GeodesicLineExact::mask values.
537  * @return true if the GeodesicLineExact object has all these capabilities.
538  **********************************************************************/
539  bool Capabilities(NETGeographicLib::Mask testcaps);
540  ///@}
541  };
542 } // namespace NETGeographicLib
Header for NETGeographicLib::NETGeographicLib objects.
void ArcPosition(double a12, [System::Runtime::InteropServices::Out] double% lat2, [System::Runtime::InteropServices::Out] double% lon2, [System::Runtime::InteropServices::Out] double% azi2, [System::Runtime::InteropServices::Out] double% s12, [System::Runtime::InteropServices::Out] double% m12, [System::Runtime::InteropServices::Out] double% M12, [System::Runtime::InteropServices::Out] double% M21, [System::Runtime::InteropServices::Out] double% S12)
double GenPosition(bool arcmode, double s12_a12, GeodesicLineExact::mask outmask, [System::Runtime::InteropServices::Out] double% lat2, [System::Runtime::InteropServices::Out] double% lon2, [System::Runtime::InteropServices::Out] double% azi2, [System::Runtime::InteropServices::Out] double% s12, [System::Runtime::InteropServices::Out] double% m12, [System::Runtime::InteropServices::Out] double% M12, [System::Runtime::InteropServices::Out] double% M21, [System::Runtime::InteropServices::Out] double% S12)
GeodesicLineExact(GeodesicExact^ g, double lat1, double lon1, double azi1, NETGeographicLib::Mask caps)
.NET wrapper for GeographicLib::GeodesicLineExact.
.NET wrapper for GeographicLib::GeodesicExact.
Definition: GeodesicExact.h:86
double Position(double s12, [System::Runtime::InteropServices::Out] double% lat2, [System::Runtime::InteropServices::Out] double% lon2, [System::Runtime::InteropServices::Out] double% azi2, [System::Runtime::InteropServices::Out] double% m12, [System::Runtime::InteropServices::Out] double% M12, [System::Runtime::InteropServices::Out] double% M21, [System::Runtime::InteropServices::Out] double% S12)
NETGeographicLib::Mask Capabilities()