NETGeographicLib 1.52
Loading...
Searching...
No Matches
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 * https://geographiclib.sourceforge.io/
11 **********************************************************************/
12#include "NETGeographicLib.h"
13
14namespace 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 * EquatorialRadius, Distance, Arc, 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 * The overloaded Azimuth and EquatorialAzimuth functions that return
47 * the sin and cosine terms have been renamed AzimuthSinCos and
48 * EquatorialAzimuthSinCos, repectively.
49 **********************************************************************/
50 public ref class GeodesicLineExact
51 {
52 private:
53 enum class captype {
54 CAP_NONE = 0U,
55 CAP_E = 1U<<0,
56 // Skip 1U<<1 for compatibility with Geodesic (not required)
57 CAP_D = 1U<<2,
58 CAP_H = 1U<<3,
59 CAP_C4 = 1U<<4,
60 CAP_ALL = 0x1FU,
62 OUT_ALL = 0x7F80U,
63 OUT_MASK = 0xFF80U, // Includes LONG_UNROLL
64 };
65 // a pointer to the GeographicLib::GeodesicLineExact.
66 GeographicLib::GeodesicLineExact* m_pGeodesicLineExact;
67
68 // the finalizer frees the unmanaged memory when the object is destroyed.
69 !GeodesicLineExact(void);
70 public:
71 /**
72 * Bit masks for what calculations to do. These masks do double duty.
73 * They signify to the GeodesicLineExact::GeodesicLineExact constructor and
74 * to GeodesicExact::Line what capabilities should be included in the
75 * GeodesicLineExact object. They also specify which results to return in
76 * the general routines GeodesicExact::GenDirect and
77 * GeodesicExact::GenInverse routines. GeodesicLineExact::mask is a
78 * duplication of this enum.
79 **********************************************************************/
80 enum class mask {
81 /**
82 * No capabilities, no output.
83 * @hideinitializer
84 **********************************************************************/
85 NONE = 0U,
86 /**
87 * Calculate latitude \e lat2. (It's not necessary to include this as a
88 * capability to GeodesicLineExact because this is included by default.)
89 * @hideinitializer
90 **********************************************************************/
91 LATITUDE = 1U<<7 | unsigned(captype::CAP_NONE),
92 /**
93 * Calculate longitude \e lon2.
94 * @hideinitializer
95 **********************************************************************/
96 LONGITUDE = 1U<<8 | unsigned(captype::CAP_H),
97 /**
98 * Calculate azimuths \e azi1 and \e azi2. (It's not necessary to
99 * include this as a capability to GeodesicLineExact because this is
100 * included by default.)
101 * @hideinitializer
102 **********************************************************************/
103 AZIMUTH = 1U<<9 | unsigned(captype::CAP_NONE),
104 /**
105 * Calculate distance \e s12.
106 * @hideinitializer
107 **********************************************************************/
108 DISTANCE = 1U<<10 | unsigned(captype::CAP_E),
109 /**
110 * Allow distance \e s12 to be used as input in the direct geodesic
111 * problem.
112 * @hideinitializer
113 **********************************************************************/
114 DISTANCE_IN = 1U<<11 | unsigned(captype::CAP_E),
115 /**
116 * Calculate reduced length \e m12.
117 * @hideinitializer
118 **********************************************************************/
119 REDUCEDLENGTH = 1U<<12 | unsigned(captype::CAP_D),
120 /**
121 * Calculate geodesic scales \e M12 and \e M21.
122 * @hideinitializer
123 **********************************************************************/
124 GEODESICSCALE = 1U<<13 | unsigned(captype::CAP_D),
125 /**
126 * Calculate area \e S12.
127 * @hideinitializer
128 **********************************************************************/
129 AREA = 1U<<14 | unsigned(captype::CAP_C4),
130 /**
131 * Unroll \e lon2 in the direct calculation.
132 * @hideinitializer
133 **********************************************************************/
134 LONG_UNROLL = 1U<<15,
135 /**
136 * All capabilities, calculate everything. (LONG_UNROLL is not
137 * included in this mask.)
138 * @hideinitializer
139 **********************************************************************/
140 ALL = unsigned(captype::OUT_ALL)| unsigned(captype::CAP_ALL),
141 };
142
143 /** \name Constructors
144 **********************************************************************/
145 ///@{
146
147 /**
148 * Constructor for a geodesic line staring at latitude \e lat1, longitude
149 * \e lon1, and azimuth \e azi1 (all in degrees).
150 *
151 * @param[in] g A GeodesicExact object used to compute the necessary
152 * information about the GeodesicLineExact.
153 * @param[in] lat1 latitude of point 1 (degrees).
154 * @param[in] lon1 longitude of point 1 (degrees).
155 * @param[in] azi1 azimuth at point 1 (degrees).
156 * @param[in] caps bitor'ed combination of NETGeographicLib::Mask values
157 * specifying the capabilities the GeodesicLineExact object should
158 * possess, i.e., which quantities can be returned in calls to
159 * GeodesicLine::Position.
160 *
161 * \e lat1 should be in the range [&minus;90&deg;, 90&deg;].
162 *
163 * The NETGeographicLib::Mask values are
164 * - \e caps |= GeodesicLineExact::LATITUDE for the latitude \e lat2; this
165 * is added automatically;
166 * - \e caps |= NETGeographicLib::Mask::LONGITUDE for the latitude \e lon2;
167 * - \e caps |= NETGeographicLib::Mask::AZIMUTH for the latitude \e azi2; this is
168 * added automatically;
169 * - \e caps |= NETGeographicLib::Mask::DISTANCE for the distance \e s12;
170 * - \e caps |= NETGeographicLib::Mask::REDUCEDLENGTH for the reduced length \e
171 m12;
172 * - \e caps |= NETGeographicLib::Mask::GEODESICSCALE for the geodesic scales \e
173 * M12 and \e M21;
174 * - \e caps |= NETGeographicLib::Mask::AREA for the area \e S12;
175 * - \e caps |= NETGeographicLib::Mask::DISTANCE_IN permits the length of the
176 * geodesic to be given in terms of \e s12; without this capability the
177 * length can only be specified in terms of arc length;
178 * - \e caps |= NETGeographicLib::Mask::ALL for all of the above.
179 * .
180 *
181 * If the point is at a pole, the azimuth is defined by keeping \e lon1
182 * fixed, writing \e lat1 = &plusmn;(90&deg; &minus; &epsilon;), and taking
183 * the limit &epsilon; &rarr; 0+.
184 **********************************************************************/
185 GeodesicLineExact(GeodesicExact^ g, double lat1, double lon1, double azi1,
187
188 /**
189 * A default constructor which assumes the WGS84 ellipsoid. See
190 * constructor comments for details.
191 **********************************************************************/
192 GeodesicLineExact(double lat1, double lon1, double azi1,
194
195 /**
196 * This constructor accepts a reference to an unmanaged
197 * GeodesicLineExact.
198 * FOR INTERNAL USE ONLY.
199 **********************************************************************/
201 ///@}
202
203 /**
204 * The destructor calls the finalizer
205 **********************************************************************/
207 { this->!GeodesicLineExact(); }
208
209 /** \name Position in terms of distance
210 **********************************************************************/
211 ///@{
212
213 /**
214 * Compute the position of point 2 which is a distance \e s12 (meters)
215 * from point 1.
216 *
217 * @param[in] s12 distance between point 1 and point 2 (meters); it can be
218 * signed.
219 * @param[out] lat2 latitude of point 2 (degrees).
220 * @param[out] lon2 longitude of point 2 (degrees); requires that the
221 * GeodesicLineExact object was constructed with \e caps |=
222 * GeodesicLineExact::LONGITUDE.
223 * @param[out] azi2 (forward) azimuth at point 2 (degrees).
224 * @param[out] m12 reduced length of geodesic (meters); requires that the
225 * GeodesicLineExact object was constructed with \e caps |=
226 * GeodesicLineExact::REDUCEDLENGTH.
227 * @param[out] M12 geodesic scale of point 2 relative to point 1
228 * (dimensionless); requires that the GeodesicLineExact object was
229 * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
230 * @param[out] M21 geodesic scale of point 1 relative to point 2
231 * (dimensionless); requires that the GeodesicLineExact object was
232 * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
233 * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
234 * that the GeodesicLineExact object was constructed with \e caps |=
235 * GeodesicLineExact::AREA.
236 * @return \e a12 arc length of between point 1 and point 2 (degrees).
237 *
238 * The values of \e lon2 and \e azi2 returned are in the range
239 * [&minus;180&deg;, 180&deg;).
240 *
241 * The GeodesicLineExact object \e must have been constructed with \e caps
242 * |= GeodesicLineExact::DISTANCE_IN; otherwise Math::NaN() is returned and
243 * no parameters are set. Requesting a value which the GeodesicLineExact
244 * object is not capable of computing is not an error; the corresponding
245 * argument will not be altered.
246 *
247 * The following functions are overloaded versions of
248 * GeodesicLineExact::Position which omit some of the output parameters.
249 * Note, however, that the arc length is always computed and returned as
250 * the function value.
251 **********************************************************************/
252 double Position(double s12,
253 [System::Runtime::InteropServices::Out] double% lat2,
254 [System::Runtime::InteropServices::Out] double% lon2,
255 [System::Runtime::InteropServices::Out] double% azi2,
256 [System::Runtime::InteropServices::Out] double% m12,
257 [System::Runtime::InteropServices::Out] double% M12,
258 [System::Runtime::InteropServices::Out] double% M21,
259 [System::Runtime::InteropServices::Out] double% S12);
260
261 /**
262 * See the documentation for GeodesicLineExact::Position.
263 **********************************************************************/
264 double Position(double s12,
265 [System::Runtime::InteropServices::Out] double% lat2,
266 [System::Runtime::InteropServices::Out] double% lon2);
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
276 /**
277 * See the documentation for GeodesicLineExact::Position.
278 **********************************************************************/
279 double Position(double s12,
280 [System::Runtime::InteropServices::Out] double% lat2,
281 [System::Runtime::InteropServices::Out] double% lon2,
282 [System::Runtime::InteropServices::Out] double% azi2,
283 [System::Runtime::InteropServices::Out] double% m12);
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% M21);
294
295 /**
296 * See the documentation for GeodesicLineExact::Position.
297 **********************************************************************/
298 double Position(double s12,
299 [System::Runtime::InteropServices::Out] double% lat2,
300 [System::Runtime::InteropServices::Out] double% lon2,
301 [System::Runtime::InteropServices::Out] double% azi2,
302 [System::Runtime::InteropServices::Out] double% m12,
303 [System::Runtime::InteropServices::Out] double% M12,
304 [System::Runtime::InteropServices::Out] double% M21);
305
306 ///@}
307
308 /** \name Position in terms of arc length
309 **********************************************************************/
310 ///@{
311
312 /**
313 * Compute the position of point 2 which is an arc length \e a12 (degrees)
314 * from point 1.
315 *
316 * @param[in] a12 arc length between point 1 and point 2 (degrees); it can
317 * be signed.
318 * @param[out] lat2 latitude of point 2 (degrees).
319 * @param[out] lon2 longitude of point 2 (degrees); requires that the
320 * GeodesicLineExact object was constructed with \e caps |=
321 * GeodesicLineExact::LONGITUDE.
322 * @param[out] azi2 (forward) azimuth at point 2 (degrees).
323 * @param[out] s12 distance between point 1 and point 2 (meters); requires
324 * that the GeodesicLineExact object was constructed with \e caps |=
325 * GeodesicLineExact::DISTANCE.
326 * @param[out] m12 reduced length of geodesic (meters); requires that the
327 * GeodesicLineExact object was constructed with \e caps |=
328 * GeodesicLineExact::REDUCEDLENGTH.
329 * @param[out] M12 geodesic scale of point 2 relative to point 1
330 * (dimensionless); requires that the GeodesicLineExact object was
331 * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
332 * @param[out] M21 geodesic scale of point 1 relative to point 2
333 * (dimensionless); requires that the GeodesicLineExact object was
334 * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
335 * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
336 * that the GeodesicLineExact object was constructed with \e caps |=
337 * GeodesicLineExact::AREA.
338 *
339 * The values of \e lon2 and \e azi2 returned are in the range
340 * [&minus;180&deg;, 180&deg;).
341 *
342 * Requesting a value which the GeodesicLineExact object is not capable of
343 * computing is not an error; the corresponding argument will not be
344 * altered.
345 *
346 * The following functions are overloaded versions of
347 * GeodesicLineExact::ArcPosition which omit some of the output parameters.
348 **********************************************************************/
349 void ArcPosition(double a12,
350 [System::Runtime::InteropServices::Out] double% lat2,
351 [System::Runtime::InteropServices::Out] double% lon2,
352 [System::Runtime::InteropServices::Out] double% azi2,
353 [System::Runtime::InteropServices::Out] double% s12,
354 [System::Runtime::InteropServices::Out] double% m12,
355 [System::Runtime::InteropServices::Out] double% M12,
356 [System::Runtime::InteropServices::Out] double% M21,
357 [System::Runtime::InteropServices::Out] double% S12);
358
359 /**
360 * See the documentation for GeodesicLineExact::ArcPosition.
361 **********************************************************************/
362 void ArcPosition(double a12,
363 [System::Runtime::InteropServices::Out] double% lat2,
364 [System::Runtime::InteropServices::Out] double% lon2);
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
374 /**
375 * See the documentation for GeodesicLineExact::ArcPosition.
376 **********************************************************************/
377 void ArcPosition(double a12,
378 [System::Runtime::InteropServices::Out] double% lat2,
379 [System::Runtime::InteropServices::Out] double% lon2,
380 [System::Runtime::InteropServices::Out] double% azi2,
381 [System::Runtime::InteropServices::Out] double% s12);
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
393 /**
394 * See the documentation for GeodesicLineExact::ArcPosition.
395 **********************************************************************/
396 void ArcPosition(double a12,
397 [System::Runtime::InteropServices::Out] double% lat2,
398 [System::Runtime::InteropServices::Out] double% lon2,
399 [System::Runtime::InteropServices::Out] double% azi2,
400 [System::Runtime::InteropServices::Out] double% s12,
401 [System::Runtime::InteropServices::Out] double% M12,
402 [System::Runtime::InteropServices::Out] double% M21);
403
404 /**
405 * See the documentation for GeodesicLineExact::ArcPosition.
406 **********************************************************************/
407 void ArcPosition(double a12,
408 [System::Runtime::InteropServices::Out] double% lat2,
409 [System::Runtime::InteropServices::Out] double% lon2,
410 [System::Runtime::InteropServices::Out] double% azi2,
411 [System::Runtime::InteropServices::Out] double% s12,
412 [System::Runtime::InteropServices::Out] double% m12,
413 [System::Runtime::InteropServices::Out] double% M12,
414 [System::Runtime::InteropServices::Out] double% M21);
415 ///@}
416
417 /** \name The general position function.
418 **********************************************************************/
419 ///@{
420
421 /**
422 * The general position function. GeodesicLineExact::Position and
423 * GeodesicLineExact::ArcPosition are defined in terms of this function.
424 *
425 * @param[in] arcmode boolean flag determining the meaning of the second
426 * parameter; if arcmode is false, then the GeodesicLineExact object must
427 * have been constructed with \e caps |= GeodesicLineExact::DISTANCE_IN.
428 * @param[in] s12_a12 if \e arcmode is false, this is the distance between
429 * point 1 and point 2 (meters); otherwise it is the arc length between
430 * point 1 and point 2 (degrees); it can be signed.
431 * @param[in] outmask a bitor'ed combination of GeodesicLineExact::mask
432 * values specifying which of the following parameters should be set.
433 * @param[out] lat2 latitude of point 2 (degrees).
434 * @param[out] lon2 longitude of point 2 (degrees); requires that the
435 * GeodesicLineExact object was constructed with \e caps |=
436 * GeodesicLineExact::LONGITUDE.
437 * @param[out] azi2 (forward) azimuth at point 2 (degrees).
438 * @param[out] s12 distance between point 1 and point 2 (meters); requires
439 * that the GeodesicLineExact object was constructed with \e caps |=
440 * GeodesicLineExact::DISTANCE.
441 * @param[out] m12 reduced length of geodesic (meters); requires that the
442 * GeodesicLineExact object was constructed with \e caps |=
443 * GeodesicLineExact::REDUCEDLENGTH.
444 * @param[out] M12 geodesic scale of point 2 relative to point 1
445 * (dimensionless); requires that the GeodesicLineExact object was
446 * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
447 * @param[out] M21 geodesic scale of point 1 relative to point 2
448 * (dimensionless); requires that the GeodesicLineExact object was
449 * constructed with \e caps |= GeodesicLineExact::GEODESICSCALE.
450 * @param[out] S12 area under the geodesic (meters<sup>2</sup>); requires
451 * that the GeodesicLineExact object was constructed with \e caps |=
452 * GeodesicLineExact::AREA.
453 * @return \e a12 arc length of between point 1 and point 2 (degrees).
454 *
455 * The GeodesicLineExact::mask values possible for \e outmask are
456 * - \e outmask |= GeodesicLineExact::LATITUDE for the latitude \e lat2;
457 * - \e outmask |= GeodesicLineExact::LONGITUDE for the latitude \e lon2;
458 * - \e outmask |= GeodesicLineExact::AZIMUTH for the latitude \e azi2;
459 * - \e outmask |= GeodesicLineExact::DISTANCE for the distance \e s12;
460 * - \e outmask |= GeodesicLineExact::REDUCEDLENGTH for the reduced length
461 * \e m12;
462 * - \e outmask |= GeodesicLineExact::GEODESICSCALE for the geodesic scales
463 * \e M12 and \e M21;
464 * - \e outmask |= GeodesicLineExact::AREA for the area \e S12;
465 * - \e outmask |= GeodesicLineExact::ALL for all of the above;
466 * - \e outmask |= GeodesicLineExact::LONG_UNROLL to unroll \e lon2 instead
467 * of wrapping it into the range [&minus;180&deg;, 180&deg;).
468 * .
469 * Requesting a value which the GeodesicLineExact object is not capable of
470 * computing is not an error; the corresponding argument will not be
471 * altered. Note, however, that the arc length is always computed and
472 * returned as the function value.
473 *
474 * With the LONG_UNROLL bit set, the quantity \e lon2 &minus; \e lon1
475 * indicates how many times and in what sense the geodesic encircles
476 * the ellipsoid.
477 **********************************************************************/
478 double GenPosition(bool arcmode, double s12_a12,
480 [System::Runtime::InteropServices::Out] double% lat2,
481 [System::Runtime::InteropServices::Out] double% lon2,
482 [System::Runtime::InteropServices::Out] double% azi2,
483 [System::Runtime::InteropServices::Out] double% s12,
484 [System::Runtime::InteropServices::Out] double% m12,
485 [System::Runtime::InteropServices::Out] double% M12,
486 [System::Runtime::InteropServices::Out] double% M21,
487 [System::Runtime::InteropServices::Out] double% S12);
488
489 ///@}
490
491 /** \name Setting point 3
492 **********************************************************************/
493 ///@{
494
495 /**
496 * Specify position of point 3 in terms of distance.
497 *
498 * @param[in] s13 the distance from point 1 to point 3 (meters); it
499 * can be negative.
500 *
501 * This is only useful if the GeodesicLineExact object has been constructed
502 * with \e caps |= GeodesicLineExact::DISTANCE_IN.
503 **********************************************************************/
504 void SetDistance(double s13);
505
506 /**
507 * Specify position of point 3 in terms of arc length.
508 *
509 * @param[in] a13 the arc length from point 1 to point 3 (degrees); it
510 * can be negative.
511 *
512 * The distance \e s13 is only set if the GeodesicLineExact object has been
513 * constructed with \e caps |= GeodesicLineExact::DISTANCE.
514 **********************************************************************/
515 void SetArc(double a13);
516
517 /**
518 * Specify position of point 3 in terms of either distance or arc length.
519 *
520 * @param[in] arcmode boolean flag determining the meaning of the second
521 * parameter; if \e arcmode is false, then the GeodesicLineExact object
522 * must have been constructed with \e caps |=
523 * GeodesicLineExact::DISTANCE_IN.
524 * @param[in] s13_a13 if \e arcmode is false, this is the distance from
525 * point 1 to point 3 (meters); otherwise it is the arc length from
526 * point 1 to point 3 (degrees); it can be negative.
527 **********************************************************************/
528 void GenSetDistance(bool arcmode, double s13_a13);
529
530 /**
531 * The distance or arc length to point 3.
532 *
533 * @param[in] arcmode boolean flag determining the meaning of returned
534 * value.
535 * @return \e s13 if \e arcmode is false; \e a13 if \e arcmode is true.
536 **********************************************************************/
537 double GenDistance(bool arcmode);
538 ///@}
539
540 /** \name Trigonometric accessor functions
541 **********************************************************************/
542 ///@{
543 /**
544 * The sine and cosine of \e azi1.
545 *
546 * @param[out] sazi1 the sine of \e azi1.
547 * @param[out] cazi1 the cosine of \e azi1.
548 **********************************************************************/
550 [System::Runtime::InteropServices::Out] double% sazi1,
551 [System::Runtime::InteropServices::Out] double% cazi1);
552
553 /**
554 * The sine and cosine of \e azi0.
555 *
556 * @param[out] sazi0 the sine of \e azi0.
557 * @param[out] cazi0 the cosine of \e azi0.
558 **********************************************************************/
560 [System::Runtime::InteropServices::Out] double% sazi0,
561 [System::Runtime::InteropServices::Out] double% cazi0);
562 ///@}
563
564 /** \name Inspector functions
565 **********************************************************************/
566 ///@{
567 /**
568 * @return \e lat1 the latitude of point 1 (degrees).
569 **********************************************************************/
570 property double Latitude { double get(); }
571
572 /**
573 * @return \e lon1 the longitude of point 1 (degrees).
574 **********************************************************************/
575 property double Longitude { double get(); }
576
577 /**
578 * @return \e azi1 the azimuth (degrees) of the geodesic line at point 1.
579 **********************************************************************/
580 property double Azimuth { double get(); }
581
582 /**
583 * @return \e azi0 the azimuth (degrees) of the geodesic line as it crosses
584 * the equator in a northward direction.
585 **********************************************************************/
586 property double EquatorialAzimuth { double get(); }
587
588 /**
589 * @return \e a1 the arc length (degrees) between the northward equatorial
590 * crossing and point 1.
591 **********************************************************************/
592 property double EquatorialArc { double get(); }
593
594 /**
595 * @return \e a the equatorial radius of the ellipsoid (meters). This is
596 * the value inherited from the GeodesicExact object used in the
597 * constructor.
598 **********************************************************************/
599 property double EquatorialRadius { double get(); }
600
601 /**
602 * @return \e f the flattening of the ellipsoid. This is the value
603 * inherited from the GeodesicExact object used in the constructor.
604 **********************************************************************/
605 property double Flattening { double get(); }
606
607 /**
608 * @return \e s13, the distance to point 3 (meters).
609 **********************************************************************/
610 property double Distance { double get(); }
611
612 /**
613 * @return \e a13, the arc length to point 3 (degrees).
614 **********************************************************************/
615 property double Arc { double get(); }
616
617 /**
618 * @return \e caps the computational capabilities that this object was
619 * constructed with. LATITUDE and AZIMUTH are always included.
620 **********************************************************************/
622
623 /**
624 * @param[in] testcaps a set of bitor'ed GeodesicLineExact::mask values.
625 * @return true if the GeodesicLineExact object has all these capabilities.
626 **********************************************************************/
628 ///@}
629 };
630} // namespace NETGeographicLib
Header for NETGeographicLib::NETGeographicLib objects.
.NET wrapper for GeographicLib::GeodesicExact.
Definition: GeodesicExact.h:87
.NET wrapper for GeographicLib::GeodesicLineExact.
void GenSetDistance(bool arcmode, double s13_a13)
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)
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)
bool Capabilities(NETGeographicLib::Mask testcaps)
double Position(double s12, [System::Runtime::InteropServices::Out] double% lat2, [System::Runtime::InteropServices::Out] double% lon2)
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)
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% M21)
GeodesicLineExact(const GeographicLib::GeodesicLineExact &gle)
GeodesicLineExact(double lat1, double lon1, double azi1, NETGeographicLib::Mask caps)
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)
void EquatorialAzimuthSinCos([System::Runtime::InteropServices::Out] double% sazi0, [System::Runtime::InteropServices::Out] double% cazi0)
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% M21)
void ArcPosition(double a12, [System::Runtime::InteropServices::Out] double% lat2, [System::Runtime::InteropServices::Out] double% lon2)
void ArcPosition(double a12, [System::Runtime::InteropServices::Out] double% lat2, [System::Runtime::InteropServices::Out] double% lon2, [System::Runtime::InteropServices::Out] double% azi2)
double GenDistance(bool arcmode)
GeodesicLineExact(GeodesicExact^ g, double lat1, double lon1, double azi1, NETGeographicLib::Mask caps)
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)
void AzimuthSinCos([System::Runtime::InteropServices::Out] double% sazi1, [System::Runtime::InteropServices::Out] double% cazi1)
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)
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)
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)
NETGeographicLib::Mask Capabilities()
double Position(double s12, [System::Runtime::InteropServices::Out] double% lat2, [System::Runtime::InteropServices::Out] double% lon2, [System::Runtime::InteropServices::Out] double% azi2)