An exact geodesic line. More...
#include <GeodesicLineExact.hpp>
Public Types | |
enum | mask { NONE, LATITUDE, LONGITUDE, AZIMUTH, DISTANCE, DISTANCE_IN, REDUCEDLENGTH, GEODESICSCALE, AREA, LONG_UNROLL, ALL } |
Public Member Functions | |
Constructors | |
GeodesicLineExact (const GeodesicExact &g, real lat1, real lon1, real azi1, unsigned caps=ALL) | |
GeodesicLineExact () | |
Position in terms of distance | |
Math::real | Position (real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21, real &S12) const |
Math::real | Position (real s12, real &lat2, real &lon2) const |
Math::real | Position (real s12, real &lat2, real &lon2, real &azi2) const |
Math::real | Position (real s12, real &lat2, real &lon2, real &azi2, real &m12) const |
Math::real | Position (real s12, real &lat2, real &lon2, real &azi2, real &M12, real &M21) const |
Math::real | Position (real s12, real &lat2, real &lon2, real &azi2, real &m12, real &M12, real &M21) const |
Position in terms of arc length | |
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) const |
void | ArcPosition (real a12, real &lat2, real &lon2, real &azi2) const |
void | ArcPosition (real a12, real &lat2, real &lon2, real &azi2, real &s12) 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 &M21) const |
void | ArcPosition (real a12, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21) const |
The general position function. | |
Math::real | GenPosition (bool arcmode, real s12_a12, unsigned outmask, real &lat2, real &lon2, real &azi2, real &s12, real &m12, real &M12, real &M21, real &S12) const |
Setting point 3 | |
void | SetDistance (real s13) |
void | SetArc (real a13) |
void | GenSetDistance (bool arcmode, real s13_a13) |
Inspector functions | |
bool | Init () const |
Math::real | Latitude () const |
Math::real | Longitude () const |
Math::real | Azimuth () const |
void | Azimuth (real &sazi1, real &cazi1) const |
Math::real | EquatorialAzimuth () const |
void | EquatorialAzimuth (real &sazi0, real &cazi0) const |
Math::real | EquatorialArc () const |
Math::real | MajorRadius () const |
Math::real | Flattening () const |
unsigned | Capabilities () const |
bool | Capabilities (unsigned testcaps) const |
Math::real | GenDistance (bool arcmode) const |
Math::real | Distance () const |
Math::real | Arc () const |
Private Types | |
enum | captype { CAP_NONE = GeodesicExact::CAP_NONE, CAP_E = GeodesicExact::CAP_E, CAP_D = GeodesicExact::CAP_D, CAP_H = GeodesicExact::CAP_H, CAP_C4 = GeodesicExact::CAP_C4, CAP_ALL = GeodesicExact::CAP_ALL, CAP_MASK = GeodesicExact::CAP_MASK, OUT_ALL = GeodesicExact::OUT_ALL, OUT_MASK = GeodesicExact::OUT_MASK } |
typedef Math::real | real |
Private Member Functions | |
GeodesicLineExact (const GeodesicExact &g, real lat1, real lon1, real azi1, real salp1, real calp1, unsigned caps, bool arcmode, real s13_a13) | |
void | LineInit (const GeodesicExact &g, real lat1, real lon1, real azi1, real salp1, real calp1, unsigned caps) |
Private Attributes | |
real | _a |
real | _a13 |
real | _A4 |
real | _azi1 |
real | _b |
real | _B41 |
real | _c2 |
real | _C4a [nC4_] |
real | _calp0 |
real | _calp1 |
unsigned | _caps |
real | _cchi1 |
real | _comg1 |
real | _csig1 |
real | _ctau1 |
real | _D0 |
real | _D1 |
real | _dn1 |
EllipticFunction | _E |
real | _E0 |
real | _E1 |
real | _e2 |
real | _f |
real | _f1 |
real | _H0 |
real | _H1 |
real | _k2 |
real | _lat1 |
real | _lon1 |
real | _s13 |
real | _salp0 |
real | _salp1 |
real | _somg1 |
real | _ssig1 |
real | _stau1 |
real | tiny_ |
Static Private Attributes | |
static const int | nC4_ = GeodesicExact::nC4_ |
Friends | |
class | GeodesicExact |
An exact geodesic line.
GeodesicLineExact facilitates the determination of a series of points on a single geodesic. This is a companion to the GeodesicExact class. For additional information on this class see the documentation on the GeodesicLine class.
Example of use:
GeodSolve is a command-line utility providing access to the functionality of GeodesicExact and GeodesicLineExact (via the -E option).
Definition at line 35 of file GeodesicLineExact.hpp.
|
private |
Definition at line 37 of file GeodesicLineExact.hpp.
|
private |
Enumerator | |
---|---|
CAP_NONE | |
CAP_E | |
CAP_D | |
CAP_H | |
CAP_C4 | |
CAP_ALL | |
CAP_MASK | |
OUT_ALL | |
OUT_MASK |
Definition at line 61 of file GeodesicLineExact.hpp.
Bit masks for what calculations to do. They signify to the GeodesicLineExact::GeodesicLineExact constructor and to GeodesicExact::Line what capabilities should be included in the GeodesicLineExact object. This is merely a duplication of GeodesicExact::mask.
Enumerator | |
---|---|
NONE |
No capabilities, no output. |
LATITUDE |
Calculate latitude lat2. (It's not necessary to include this as a capability to GeodesicLineExact because this is included by default.) |
LONGITUDE |
Calculate longitude lon2. |
AZIMUTH |
Calculate azimuths azi1 and azi2. (It's not necessary to include this as a capability to GeodesicLineExact because this is included by default.) |
DISTANCE |
Calculate distance s12. |
DISTANCE_IN |
Allow distance s12 to be used as input in the direct geodesic problem. |
REDUCEDLENGTH |
Calculate reduced length m12. |
GEODESICSCALE |
Calculate geodesic scales M12 and M21. |
AREA |
Calculate area S12. |
LONG_UNROLL |
Unroll lon2 in the direct calculation. |
ALL |
All capabilities, calculate everything. (LONG_UNROLL is not included in this mask.) |
Definition at line 81 of file GeodesicLineExact.hpp.
|
private |
Definition at line 128 of file src/GeodesicLineExact.cpp.
GeographicLib::GeodesicLineExact::GeodesicLineExact | ( | const GeodesicExact & | g, |
real | lat1, | ||
real | lon1, | ||
real | azi1, | ||
unsigned | caps = ALL |
||
) |
Constructor for a geodesic line staring at latitude lat1, longitude lon1, and azimuth azi1 (all in degrees).
[in] | g | A GeodesicExact object used to compute the necessary information about the GeodesicLineExact. |
[in] | lat1 | latitude of point 1 (degrees). |
[in] | lon1 | longitude of point 1 (degrees). |
[in] | azi1 | azimuth at point 1 (degrees). |
[in] | caps | bitor'ed combination of GeodesicLineExact::mask values specifying the capabilities the GeodesicLineExact object should possess, i.e., which quantities can be returned in calls to GeodesicLine::Position. |
lat1 should be in the range [−90°, 90°].
The GeodesicLineExact::mask values are
The default value of caps is GeodesicLineExact::ALL.
If the point is at a pole, the azimuth is defined by keeping lon1 fixed, writing lat1 = ±(90° − ε), and taking the limit ε → 0+.
Definition at line 118 of file src/GeodesicLineExact.cpp.
|
inline |
A default constructor. If GeodesicLineExact::Position is called on the resulting object, it returns immediately (without doing any calculations). The object can be set with a call to GeodesicExact::Line. Use Init() to test whether object is still in this uninitialized state.
Definition at line 197 of file GeodesicLineExact.hpp.
|
inline |
Definition at line 660 of file GeodesicLineExact.hpp.
|
inline |
Compute the position of point 2 which is an arc length a12 (degrees) from point 1.
[in] | a12 | arc length from point 1 to point 2 (degrees); it can be signed. |
[out] | lat2 | latitude of point 2 (degrees). |
[out] | lon2 | longitude of point 2 (degrees); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::LONGITUDE. |
[out] | azi2 | (forward) azimuth at point 2 (degrees). |
[out] | s12 | distance from point 1 to point 2 (meters); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::DISTANCE. |
[out] | m12 | reduced length of geodesic (meters); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::REDUCEDLENGTH. |
[out] | M12 | geodesic scale of point 2 relative to point 1 (dimensionless); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::GEODESICSCALE. |
[out] | M21 | geodesic scale of point 1 relative to point 2 (dimensionless); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::GEODESICSCALE. |
[out] | S12 | area under the geodesic (meters2); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::AREA. |
The values of lon2 and azi2 returned are in the range [−180°, 180°].
Requesting a value which the GeodesicLineExact object is not capable of computing is not an error; the corresponding argument will not be altered.
The following functions are overloaded versions of GeodesicLineExact::ArcPosition which omit some of the output parameters.
Definition at line 356 of file GeodesicLineExact.hpp.
|
inline |
See the documentation for GeodesicLineExact::ArcPosition.
Definition at line 368 of file GeodesicLineExact.hpp.
|
inline |
See the documentation for GeodesicLineExact::ArcPosition.
Definition at line 379 of file GeodesicLineExact.hpp.
|
inline |
See the documentation for GeodesicLineExact::ArcPosition.
Definition at line 391 of file GeodesicLineExact.hpp.
|
inline |
See the documentation for GeodesicLineExact::ArcPosition.
Definition at line 402 of file GeodesicLineExact.hpp.
|
inline |
See the documentation for GeodesicLineExact::ArcPosition.
Definition at line 414 of file GeodesicLineExact.hpp.
|
inline |
See the documentation for GeodesicLineExact::ArcPosition.
Definition at line 427 of file GeodesicLineExact.hpp.
|
inline |
Definition at line 569 of file GeodesicLineExact.hpp.
The sine and cosine of azi1.
[out] | sazi1 | the sine of azi1. |
[out] | cazi1 | the cosine of azi1. |
Definition at line 578 of file GeodesicLineExact.hpp.
|
inline |
Definition at line 629 of file GeodesicLineExact.hpp.
|
inline |
Test what capabilities are available.
[in] | testcaps | a set of bitor'ed GeodesicLineExact::mask values. |
Definition at line 637 of file GeodesicLineExact.hpp.
|
inline |
Definition at line 655 of file GeodesicLineExact.hpp.
|
inline |
The result lies in (−180°, 180°].
Definition at line 605 of file GeodesicLineExact.hpp.
|
inline |
The result lies in [−90°, 90°].
Definition at line 587 of file GeodesicLineExact.hpp.
|
inline |
The sine and cosine of azi0.
[out] | sazi0 | the sine of azi0. |
[out] | cazi0 | the cosine of azi0. |
Definition at line 596 of file GeodesicLineExact.hpp.
|
inline |
Definition at line 622 of file GeodesicLineExact.hpp.
|
inline |
The distance or arc length to point 3.
[in] | arcmode | boolean flag determining the meaning of returned value. |
Definition at line 649 of file GeodesicLineExact.hpp.
Math::real GeographicLib::GeodesicLineExact::GenPosition | ( | bool | arcmode, |
real | s12_a12, | ||
unsigned | outmask, | ||
real & | lat2, | ||
real & | lon2, | ||
real & | azi2, | ||
real & | s12, | ||
real & | m12, | ||
real & | M12, | ||
real & | M21, | ||
real & | S12 | ||
) | const |
The general position function. GeodesicLineExact::Position and GeodesicLineExact::ArcPosition are defined in terms of this function.
[in] | arcmode | boolean flag determining the meaning of the second parameter; if arcmode is false, then the GeodesicLineExact object must have been constructed with caps |= GeodesicLineExact::DISTANCE_IN. |
[in] | s12_a12 | if arcmode is false, this is the distance between point 1 and point 2 (meters); otherwise it is the arc length between point 1 and point 2 (degrees); it can be signed. |
[in] | outmask | a bitor'ed combination of GeodesicLineExact::mask values specifying which of the following parameters should be set. |
[out] | lat2 | latitude of point 2 (degrees). |
[out] | lon2 | longitude of point 2 (degrees); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::LONGITUDE. |
[out] | azi2 | (forward) azimuth at point 2 (degrees). |
[out] | s12 | distance from point 1 to point 2 (meters); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::DISTANCE. |
[out] | m12 | reduced length of geodesic (meters); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::REDUCEDLENGTH. |
[out] | M12 | geodesic scale of point 2 relative to point 1 (dimensionless); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::GEODESICSCALE. |
[out] | M21 | geodesic scale of point 1 relative to point 2 (dimensionless); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::GEODESICSCALE. |
[out] | S12 | area under the geodesic (meters2); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::AREA. |
The GeodesicLineExact::mask values possible for outmask are
Requesting a value which the GeodesicLineExact object is not capable of computing is not an error; the corresponding argument will not be altered. Note, however, that the arc length is always computed and returned as the function value.
With the GeodesicLineExact::LONG_UNROLL bit set, the quantity lon2 − lon1 indicates how many times and in what sense the geodesic encircles the ellipsoid.
Definition at line 137 of file src/GeodesicLineExact.cpp.
void GeographicLib::GeodesicLineExact::GenSetDistance | ( | bool | arcmode, |
real | s13_a13 | ||
) |
Specify position of point 3 in terms of either distance or arc length.
[in] | arcmode | boolean flag determining the meaning of the second parameter; if arcmode is false, then the GeodesicLineExact object must have been constructed with caps |= GeodesicLineExact::DISTANCE_IN. |
[in] | s13_a13 | if arcmode is false, this is the distance from point 1 to point 3 (meters); otherwise it is the arc length from point 1 to point 3 (degrees); it can be negative. |
Definition at line 285 of file src/GeodesicLineExact.cpp.
|
inline |
Definition at line 552 of file GeodesicLineExact.hpp.
|
inline |
Definition at line 557 of file GeodesicLineExact.hpp.
|
private |
Definition at line 35 of file src/GeodesicLineExact.cpp.
|
inline |
Definition at line 563 of file GeodesicLineExact.hpp.
|
inline |
Definition at line 615 of file GeodesicLineExact.hpp.
|
inline |
Compute the position of point 2 which is a distance s12 (meters) from point 1.
[in] | s12 | distance from point 1 to point 2 (meters); it can be signed. |
[out] | lat2 | latitude of point 2 (degrees). |
[out] | lon2 | longitude of point 2 (degrees); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::LONGITUDE. |
[out] | azi2 | (forward) azimuth at point 2 (degrees). |
[out] | m12 | reduced length of geodesic (meters); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::REDUCEDLENGTH. |
[out] | M12 | geodesic scale of point 2 relative to point 1 (dimensionless); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::GEODESICSCALE. |
[out] | M21 | geodesic scale of point 1 relative to point 2 (dimensionless); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::GEODESICSCALE. |
[out] | S12 | area under the geodesic (meters2); requires that the GeodesicLineExact object was constructed with caps |= GeodesicLineExact::AREA. |
The values of lon2 and azi2 returned are in the range [−180°, 180°].
The GeodesicLineExact object must have been constructed with caps |= GeodesicLineExact::DISTANCE_IN; otherwise Math::NaN() is returned and no parameters are set. Requesting a value which the GeodesicLineExact object is not capable of computing is not an error; the corresponding argument will not be altered.
The following functions are overloaded versions of GeodesicLineExact::Position which omit some of the output parameters. Note, however, that the arc length is always computed and returned as the function value.
Definition at line 243 of file GeodesicLineExact.hpp.
|
inline |
See the documentation for GeodesicLineExact::Position.
Definition at line 257 of file GeodesicLineExact.hpp.
|
inline |
See the documentation for GeodesicLineExact::Position.
Definition at line 267 of file GeodesicLineExact.hpp.
|
inline |
See the documentation for GeodesicLineExact::Position.
Definition at line 278 of file GeodesicLineExact.hpp.
|
inline |
See the documentation for GeodesicLineExact::Position.
Definition at line 290 of file GeodesicLineExact.hpp.
|
inline |
See the documentation for GeodesicLineExact::Position.
Definition at line 303 of file GeodesicLineExact.hpp.
void GeographicLib::GeodesicLineExact::SetArc | ( | real | a13 | ) |
Specify position of point 3 in terms of arc length.
[in] | a13 | the arc length from point 1 to point 3 (degrees); it can be negative. |
The distance s13 is only set if the GeodesicLineExact object has been constructed with caps |= GeodesicLineExact::DISTANCE.
Definition at line 277 of file src/GeodesicLineExact.cpp.
void GeographicLib::GeodesicLineExact::SetDistance | ( | real | s13 | ) |
Specify position of point 3 in terms of distance.
[in] | s13 | the distance from point 1 to point 3 (meters); it can be negative. |
This is only useful if the GeodesicLineExact object has been constructed with caps |= GeodesicLineExact::DISTANCE_IN.
Definition at line 269 of file src/GeodesicLineExact.cpp.
|
friend |
Definition at line 38 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 47 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 42 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
Definition at line 48 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 50 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 49 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 42 of file GeodesicLineExact.hpp.
|
private |
Definition at line 42 of file GeodesicLineExact.hpp.
|
private |
Definition at line 47 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
private |
Definition at line 43 of file GeodesicLineExact.hpp.
|
staticprivate |
Definition at line 39 of file GeodesicLineExact.hpp.
|
private |
Definition at line 41 of file GeodesicLineExact.hpp.