NETGeographicLib  1.40
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Pages
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_NOWRAP
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  * Do not wrap the \e lon2 in the direct calculation.
128  * @hideinitializer
129  **********************************************************************/
130  LONG_NOWRAP = 1U<<15,
131  /**
132  * All capabilities, calculate everything. (LONG_NOWRAP is not
133  * included in this mask.)
134  * @hideinitializer
135  **********************************************************************/
136  ALL = unsigned(captype::OUT_ALL)| unsigned(captype::CAP_ALL),
137  };
138 
139  /** \name Constructors
140  **********************************************************************/
141  ///@{
142 
143  /**
144  * Constructor for a geodesic line staring at latitude \e lat1, longitude
145  * \e lon1, and azimuth \e azi1 (all in degrees).
146  *
147  * @param[in] g A GeodesicExact object used to compute the necessary
148  * information about the GeodesicLineExact.
149  * @param[in] lat1 latitude of point 1 (degrees).
150  * @param[in] lon1 longitude of point 1 (degrees).
151  * @param[in] azi1 azimuth at point 1 (degrees).
152  * @param[in] caps bitor'ed combination of NETGeographicLib::Mask values
153  * specifying the capabilities the GeodesicLineExact object should
154  * possess, i.e., which quantities can be returned in calls to
155  * GeodesicLine::Position.
156  *
157  * \e lat1 should be in the range [&minus;90&deg;, 90&deg;]; \e lon1 and \e
158  * azi1 should be in the range [&minus;540&deg;, 540&deg;).
159  *
160  * The NETGeographicLib::Mask values are
161  * - \e caps |= GeodesicLineExact::LATITUDE for the latitude \e lat2; this
162  * is added automatically;
163  * - \e caps |= NETGeographicLib::Mask::LONGITUDE for the latitude \e lon2;
164  * - \e caps |= NETGeographicLib::Mask::AZIMUTH for the latitude \e azi2; this is
165  * added automatically;
166  * - \e caps |= NETGeographicLib::Mask::DISTANCE for the distance \e s12;
167  * - \e caps |= NETGeographicLib::Mask::REDUCEDLENGTH for the reduced length \e
168  m12;
169  * - \e caps |= NETGeographicLib::Mask::GEODESICSCALE for the geodesic scales \e
170  * M12 and \e M21;
171  * - \e caps |= NETGeographicLib::Mask::AREA for the area \e S12;
172  * - \e caps |= NETGeographicLib::Mask::DISTANCE_IN permits the length of the
173  * geodesic to be given in terms of \e s12; without this capability the
174  * length can only be specified in terms of arc length;
175  * - \e caps |= NETGeographicLib::Mask::ALL for all of the above.
176  * .
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(GeodesicExact^ g, double lat1, double lon1, double azi1,
183  NETGeographicLib::Mask caps );
184 
185  /**
186  * A default constructor which assumes the WGS84 ellipsoid. See
187  * constructor comments for details.
188  **********************************************************************/
189  GeodesicLineExact(double lat1, double lon1, double azi1,
191  ///@}
192 
193  /**
194  * The destructor calls the finalizer
195  **********************************************************************/
197  { this->!GeodesicLineExact(); }
198 
199  /** \name Position in terms of distance
200  **********************************************************************/
201  ///@{
202 
203  /**
204  * Compute the position of point 2 which is a distance \e s12 (meters)
205  * from point 1.
206  *
207  * @param[in] s12 distance between point 1 and point 2 (meters); it can be
208  * signed.
209  * @param[out] lat2 latitude of point 2 (degrees).
210  * @param[out] lon2 longitude of point 2 (degrees); requires that the
211  * GeodesicLineExact object was constructed with \e caps |=
212  * GeodesicLineExact::LONGITUDE.
213  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
214  * @param[out] m12 reduced length of geodesic (meters); requires that the
215  * GeodesicLineExact object was constructed with \e caps |=
216  * GeodesicLineExact::REDUCEDLENGTH.
217  * @param[out] M12 geodesic scale of point 2 relative to point 1
218  * (dimensionless); requires that the GeodesicLineExact object was
219  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
220  * @param[out] M21 geodesic scale of point 1 relative to point 2
221  * (dimensionless); requires that the GeodesicLineExact object was
222  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
223  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
224  * that the GeodesicLineExact object was constructed with \e caps |=
225  * GeodesicLineExact::AREA.
226  * @return \e a12 arc length of between point 1 and point 2 (degrees).
227  *
228  * The values of \e lon2 and \e azi2 returned are in the range
229  * [&minus;180&deg;, 180&deg;).
230  *
231  * The GeodesicLineExact object \e must have been constructed with \e caps
232  * |= GeodesicLineExact::DISTANCE_IN; otherwise Math::NaN() is returned and
233  * no parameters are set. Requesting a value which the GeodesicLineExact
234  * object is not capable of computing is not an error; the corresponding
235  * argument will not be altered.
236  *
237  * The following functions are overloaded versions of
238  * GeodesicLineExact::Position which omit some of the output parameters.
239  * Note, however, that the arc length is always computed and returned as
240  * the function value.
241  **********************************************************************/
242  double Position(double s12,
243  [System::Runtime::InteropServices::Out] double% lat2,
244  [System::Runtime::InteropServices::Out] double% lon2,
245  [System::Runtime::InteropServices::Out] double% azi2,
246  [System::Runtime::InteropServices::Out] double% m12,
247  [System::Runtime::InteropServices::Out] double% M12,
248  [System::Runtime::InteropServices::Out] double% M21,
249  [System::Runtime::InteropServices::Out] double% S12);
250 
251  /**
252  * See the documentation for GeodesicLineExact::Position.
253  **********************************************************************/
254  double Position(double s12,
255  [System::Runtime::InteropServices::Out] double% lat2,
256  [System::Runtime::InteropServices::Out] double% lon2);
257 
258  /**
259  * See the documentation for GeodesicLineExact::Position.
260  **********************************************************************/
261  double Position(double s12,
262  [System::Runtime::InteropServices::Out] double% lat2,
263  [System::Runtime::InteropServices::Out] double% lon2,
264  [System::Runtime::InteropServices::Out] double% azi2);
265 
266  /**
267  * See the documentation for GeodesicLineExact::Position.
268  **********************************************************************/
269  double Position(double s12,
270  [System::Runtime::InteropServices::Out] double% lat2,
271  [System::Runtime::InteropServices::Out] double% lon2,
272  [System::Runtime::InteropServices::Out] double% azi2,
273  [System::Runtime::InteropServices::Out] double% m12);
274 
275  /**
276  * See the documentation for GeodesicLineExact::Position.
277  **********************************************************************/
278  double Position(double s12,
279  [System::Runtime::InteropServices::Out] double% lat2,
280  [System::Runtime::InteropServices::Out] double% lon2,
281  [System::Runtime::InteropServices::Out] double% azi2,
282  [System::Runtime::InteropServices::Out] double% M12,
283  [System::Runtime::InteropServices::Out] double% M21);
284 
285  /**
286  * See the documentation for GeodesicLineExact::Position.
287  **********************************************************************/
288  double Position(double s12,
289  [System::Runtime::InteropServices::Out] double% lat2,
290  [System::Runtime::InteropServices::Out] double% lon2,
291  [System::Runtime::InteropServices::Out] double% azi2,
292  [System::Runtime::InteropServices::Out] double% m12,
293  [System::Runtime::InteropServices::Out] double% M12,
294  [System::Runtime::InteropServices::Out] double% M21);
295 
296  ///@}
297 
298  /** \name Position in terms of arc length
299  **********************************************************************/
300  ///@{
301 
302  /**
303  * Compute the position of point 2 which is an arc length \e a12 (degrees)
304  * from point 1.
305  *
306  * @param[in] a12 arc length between point 1 and point 2 (degrees); it can
307  * be signed.
308  * @param[out] lat2 latitude of point 2 (degrees).
309  * @param[out] lon2 longitude of point 2 (degrees); requires that the
310  * GeodesicLineExact object was constructed with \e caps |=
311  * GeodesicLineExact::LONGITUDE.
312  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
313  * @param[out] s12 distance between point 1 and point 2 (meters); requires
314  * that the GeodesicLineExact object was constructed with \e caps |=
315  * GeodesicLineExact::DISTANCE.
316  * @param[out] m12 reduced length of geodesic (meters); requires that the
317  * GeodesicLineExact object was constructed with \e caps |=
318  * GeodesicLineExact::REDUCEDLENGTH.
319  * @param[out] M12 geodesic scale of point 2 relative to point 1
320  * (dimensionless); requires that the GeodesicLineExact object was
321  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
322  * @param[out] M21 geodesic scale of point 1 relative to point 2
323  * (dimensionless); requires that the GeodesicLineExact object was
324  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
325  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
326  * that the GeodesicLineExact object was constructed with \e caps |=
327  * GeodesicLineExact::AREA.
328  *
329  * The values of \e lon2 and \e azi2 returned are in the range
330  * [&minus;180&deg;, 180&deg;).
331  *
332  * Requesting a value which the GeodesicLineExact object is not capable of
333  * computing is not an error; the corresponding argument will not be
334  * altered.
335  *
336  * The following functions are overloaded versions of
337  * GeodesicLineExact::ArcPosition which omit some of the output parameters.
338  **********************************************************************/
339  void ArcPosition(double a12,
340  [System::Runtime::InteropServices::Out] double% lat2,
341  [System::Runtime::InteropServices::Out] double% lon2,
342  [System::Runtime::InteropServices::Out] double% azi2,
343  [System::Runtime::InteropServices::Out] double% s12,
344  [System::Runtime::InteropServices::Out] double% m12,
345  [System::Runtime::InteropServices::Out] double% M12,
346  [System::Runtime::InteropServices::Out] double% M21,
347  [System::Runtime::InteropServices::Out] double% S12);
348 
349  /**
350  * See the documentation for GeodesicLineExact::ArcPosition.
351  **********************************************************************/
352  void ArcPosition(double a12,
353  [System::Runtime::InteropServices::Out] double% lat2,
354  [System::Runtime::InteropServices::Out] double% lon2);
355 
356  /**
357  * See the documentation for GeodesicLineExact::ArcPosition.
358  **********************************************************************/
359  void ArcPosition(double a12,
360  [System::Runtime::InteropServices::Out] double% lat2,
361  [System::Runtime::InteropServices::Out] double% lon2,
362  [System::Runtime::InteropServices::Out] double% azi2);
363 
364  /**
365  * See the documentation for GeodesicLineExact::ArcPosition.
366  **********************************************************************/
367  void ArcPosition(double a12,
368  [System::Runtime::InteropServices::Out] double% lat2,
369  [System::Runtime::InteropServices::Out] double% lon2,
370  [System::Runtime::InteropServices::Out] double% azi2,
371  [System::Runtime::InteropServices::Out] double% s12);
372 
373  /**
374  * See the documentation for GeodesicLineExact::ArcPosition.
375  **********************************************************************/
376  void ArcPosition(double a12,
377  [System::Runtime::InteropServices::Out] double% lat2,
378  [System::Runtime::InteropServices::Out] double% lon2,
379  [System::Runtime::InteropServices::Out] double% azi2,
380  [System::Runtime::InteropServices::Out] double% s12,
381  [System::Runtime::InteropServices::Out] double% m12);
382 
383  /**
384  * See the documentation for GeodesicLineExact::ArcPosition.
385  **********************************************************************/
386  void ArcPosition(double a12,
387  [System::Runtime::InteropServices::Out] double% lat2,
388  [System::Runtime::InteropServices::Out] double% lon2,
389  [System::Runtime::InteropServices::Out] double% azi2,
390  [System::Runtime::InteropServices::Out] double% s12,
391  [System::Runtime::InteropServices::Out] double% M12,
392  [System::Runtime::InteropServices::Out] double% M21);
393 
394  /**
395  * See the documentation for GeodesicLineExact::ArcPosition.
396  **********************************************************************/
397  void ArcPosition(double a12,
398  [System::Runtime::InteropServices::Out] double% lat2,
399  [System::Runtime::InteropServices::Out] double% lon2,
400  [System::Runtime::InteropServices::Out] double% azi2,
401  [System::Runtime::InteropServices::Out] double% s12,
402  [System::Runtime::InteropServices::Out] double% m12,
403  [System::Runtime::InteropServices::Out] double% M12,
404  [System::Runtime::InteropServices::Out] double% M21);
405  ///@}
406 
407  /** \name The general position function.
408  **********************************************************************/
409  ///@{
410 
411  /**
412  * The general position function. GeodesicLineExact::Position and
413  * GeodesicLineExact::ArcPosition are defined in terms of this function.
414  *
415  * @param[in] arcmode boolean flag determining the meaning of the second
416  * parameter; if arcmode is false, then the GeodesicLineExact object must
417  * have been constructed with \e caps |= GeodesicLineExact::DISTANCE_IN.
418  * @param[in] s12_a12 if \e arcmode is false, this is the distance between
419  * point 1 and point 2 (meters); otherwise it is the arc length between
420  * point 1 and point 2 (degrees); it can be signed.
421  * @param[in] outmask a bitor'ed combination of GeodesicLineExact::mask
422  * values specifying which of the following parameters should be set.
423  * @param[out] lat2 latitude of point 2 (degrees).
424  * @param[out] lon2 longitude of point 2 (degrees); requires that the
425  * GeodesicLineExact object was constructed with \e caps |=
426  * GeodesicLineExact::LONGITUDE.
427  * @param[out] azi2 (forward) azimuth at point 2 (degrees).
428  * @param[out] s12 distance between point 1 and point 2 (meters); requires
429  * that the GeodesicLineExact object was constructed with \e caps |=
430  * GeodesicLineExact::DISTANCE.
431  * @param[out] m12 reduced length of geodesic (meters); requires that the
432  * GeodesicLineExact object was constructed with \e caps |=
433  * GeodesicLineExact::REDUCEDLENGTH.
434  * @param[out] M12 geodesic scale of point 2 relative to point 1
435  * (dimensionless); requires that the GeodesicLineExact object was
436  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
437  * @param[out] M21 geodesic scale of point 1 relative to point 2
438  * (dimensionless); requires that the GeodesicLineExact object was
439  * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
440  * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
441  * that the GeodesicLineExact object was constructed with \e caps |=
442  * GeodesicLineExact::AREA.
443  * @return \e a12 arc length of between point 1 and point 2 (degrees).
444  *
445  * The GeodesicLineExact::mask values possible for \e outmask are
446  * - \e outmask |= GeodesicLineExact::LATITUDE for the latitude \e lat2;
447  * - \e outmask |= GeodesicLineExact::LONGITUDE for the latitude \e lon2;
448  * - \e outmask |= GeodesicLineExact::AZIMUTH for the latitude \e azi2;
449  * - \e outmask |= GeodesicLineExact::DISTANCE for the distance \e s12;
450  * - \e outmask |= GeodesicLineExact::REDUCEDLENGTH for the reduced length
451  * \e m12;
452  * - \e outmask |= GeodesicLineExact::GEODESICSCALE for the geodesic scales
453  * \e M12 and \e M21;
454  * - \e outmask |= GeodesicLineExact::AREA for the area \e S12;
455  * - \e outmask |= GeodesicLineExact::ALL for all of the above;
456  * - \e outmask |= GeodesicLineExact::LONG_NOWRAP stops the returned value
457  * of \e lon2 being wrapped into the range [&minus;180&deg;, 180&deg;).
458  * .
459  * Requesting a value which the GeodesicLineExact object is not capable of
460  * computing is not an error; the corresponding argument will not be
461  * altered. Note, however, that the arc length is always computed and
462  * returned as the function value.
463  *
464  * With the LONG_NOWRAP bit set, the quantity \e lon2 &minus; \e lon1
465  * indicates how many times the geodesic wrapped around the ellipsoid.
466  * Because \e lon2 might be outside the normal allowed range for
467  * longitudes, [&minus;540&deg;, 540&deg;), be sure to normalize it with
468  * Math::AngNormalize2 before using it in other GeographicLib calls.
469  **********************************************************************/
470  double GenPosition(bool arcmode, double s12_a12,
471  GeodesicLineExact::mask outmask,
472  [System::Runtime::InteropServices::Out] double% lat2,
473  [System::Runtime::InteropServices::Out] double% lon2,
474  [System::Runtime::InteropServices::Out] double% azi2,
475  [System::Runtime::InteropServices::Out] double% s12,
476  [System::Runtime::InteropServices::Out] double% m12,
477  [System::Runtime::InteropServices::Out] double% M12,
478  [System::Runtime::InteropServices::Out] double% M21,
479  [System::Runtime::InteropServices::Out] double% S12);
480 
481  ///@}
482 
483  /** \name Inspector functions
484  **********************************************************************/
485  ///@{
486  /**
487  * @return \e lat1 the latitude of point 1 (degrees).
488  **********************************************************************/
489  property double Latitude { double get(); }
490 
491  /**
492  * @return \e lon1 the longitude of point 1 (degrees).
493  **********************************************************************/
494  property double Longitude { double get(); }
495 
496  /**
497  * @return \e azi1 the azimuth (degrees) of the geodesic line at point 1.
498  **********************************************************************/
499  property double Azimuth { double get(); }
500 
501  /**
502  * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses
503  * the equator in a northward direction.
504  **********************************************************************/
505  property double EquatorialAzimuth { double get(); }
506 
507  /**
508  * @return \e a1 the arc length (degrees) between the northward equatorial
509  * crossing and point 1.
510  **********************************************************************/
511  property double EquatorialArc { double get(); }
512 
513  /**
514  * @return \e a the equatorial radius of the ellipsoid (meters). This is
515  * the value inherited from the GeodesicExact object used in the
516  * constructor.
517  **********************************************************************/
518  property double MajorRadius { double get(); }
519 
520  /**
521  * @return \e f the flattening of the ellipsoid. This is the value
522  * inherited from the GeodesicExact object used in the constructor.
523  **********************************************************************/
524  property double Flattening { double get(); }
525 
526  /**
527  * @return \e caps the computational capabilities that this object was
528  * constructed with. LATITUDE and AZIMUTH are always included.
529  **********************************************************************/
531 
532  /**
533  * @param[in] testcaps a set of bitor'ed GeodesicLineExact::mask values.
534  * @return true if the GeodesicLineExact object has all these capabilities.
535  **********************************************************************/
536  bool Capabilities(NETGeographicLib::Mask testcaps);
537  ///@}
538  };
539 } // 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()