| Geodesic.hpp | | Geodesic.hpp | |
| | | | |
| skipping to change at line 100 | | skipping to change at line 100 | |
| * m12, \e M12, \e M21 which all specify the behavior of nearby geodesics | | * m12, \e M12, \e M21 which all specify the behavior of nearby geodesics | |
| * obey addition rules. Let points 1, 2, and 3 all lie on a single geode
sic, | | * obey addition rules. Let points 1, 2, and 3 all lie on a single geode
sic, | |
| * then | | * then | |
| * - \e m13 = \e m12 \e M23 + \e m23 \e M21 | | * - \e m13 = \e m12 \e M23 + \e m23 \e M21 | |
| * - \e M13 = \e M12 \e M23 − (1 − \e M12 \e M21) \e m23 / \e
m12 | | * - \e M13 = \e M12 \e M23 − (1 − \e M12 \e M21) \e m23 / \e
m12 | |
| * - \e M31 = \e M32 \e M21 − (1 − \e M23 \e M32) \e m12 / \e
m23 | | * - \e M31 = \e M32 \e M21 − (1 − \e M23 \e M32) \e m12 / \e
m23 | |
| * | | * | |
| * Additional functionality is provided by the GeodesicLine class, which | | * Additional functionality is provided by the GeodesicLine class, which | |
| * allows a sequence of points along a geodesic to be computed. | | * allows a sequence of points along a geodesic to be computed. | |
| * | | * | |
|
| * The calculations are accurate to better than 15 nm (15 nanometers). S | | * The calculations are accurate to better than 15 nm (15 nanometers) for | |
| ee | | the | |
| * Sec. 9 of | | * WGS84 ellipsoid. See Sec. 9 of | |
| * <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a> for | | * <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a> for | |
| * details. The algorithms used by this class are based on series expans
ions | | * details. The algorithms used by this class are based on series expans
ions | |
| * using the flattening \e f as a small parameter. These only accurate f
or | | * using the flattening \e f as a small parameter. These only accurate f
or | |
|
| * |\e f| < 0.01; however reasonably accurate results will be obtained | | * |\e f| < 0.02; however reasonably accurate results will be obtained | |
| for | | for | |
| * |\e f| < 0.1. For very eccentric ellipsoids, use GeodesicExact | | * |\e f| < 0.2. Here is a table of the approximate maximum error | |
| * instead. | | * (expressed as a distance) for an ellipsoid with the same major radius | |
| | | as | |
| | | * the WGS84 ellipsoid and different values of the flattening.<pre> | |
| | | * |f| error | |
| | | * 0.01 25 nm | |
| | | * 0.02 30 nm | |
| | | * 0.05 10 um | |
| | | * 0.1 1.5 mm | |
| | | * 0.2 300 mm | |
| | | * </pre>For very eccentric ellipsoids, use GeodesicExact instead. | |
| * | | * | |
| * The algorithms are described in | | * The algorithms are described in | |
| * - C. F. F. Karney, | | * - C. F. F. Karney, | |
| * <a href="http://dx.doi.org/10.1007/s00190-012-0578-z"> | | * <a href="http://dx.doi.org/10.1007/s00190-012-0578-z"> | |
| * Algorithms for geodesics</a>, | | * Algorithms for geodesics</a>, | |
| * J. Geodesy, 2012; | | * J. Geodesy, 2012; | |
| * DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z"> | | * DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z"> | |
|
| * 10.1007/s00190-012-0578-z</a>. | | * 10.1007/s00190-012-0578-z</a>; | |
| | | * addenda: <a href="http://geographiclib.sf.net/geod-addenda.html"> | |
| | | * geod-addenda.html</a>. | |
| * . | | * . | |
| * For more information on geodesics see \ref geodesic. | | * For more information on geodesics see \ref geodesic. | |
| * | | * | |
| * Example of use: | | * Example of use: | |
| * \include example-Geodesic.cpp | | * \include example-Geodesic.cpp | |
| * | | * | |
| * <a href="Geod.1.html">Geod</a> is a command-line utility providing acc
ess | | * <a href="Geod.1.html">Geod</a> is a command-line utility providing acc
ess | |
| * to the functionality of Geodesic and GeodesicLine. | | * to the functionality of Geodesic and GeodesicLine. | |
| **********************************************************************/ | | **********************************************************************/ | |
| | | | |
| | | | |
| skipping to change at line 141 | | skipping to change at line 151 | |
| static const int nC1_ = GEOGRAPHICLIB_GEODESIC_ORDER; | | static const int nC1_ = GEOGRAPHICLIB_GEODESIC_ORDER; | |
| static const int nC1p_ = GEOGRAPHICLIB_GEODESIC_ORDER; | | static const int nC1p_ = GEOGRAPHICLIB_GEODESIC_ORDER; | |
| static const int nA2_ = GEOGRAPHICLIB_GEODESIC_ORDER; | | static const int nA2_ = GEOGRAPHICLIB_GEODESIC_ORDER; | |
| static const int nC2_ = GEOGRAPHICLIB_GEODESIC_ORDER; | | static const int nC2_ = GEOGRAPHICLIB_GEODESIC_ORDER; | |
| static const int nA3_ = GEOGRAPHICLIB_GEODESIC_ORDER; | | static const int nA3_ = GEOGRAPHICLIB_GEODESIC_ORDER; | |
| static const int nA3x_ = nA3_; | | static const int nA3x_ = nA3_; | |
| static const int nC3_ = GEOGRAPHICLIB_GEODESIC_ORDER; | | static const int nC3_ = GEOGRAPHICLIB_GEODESIC_ORDER; | |
| static const int nC3x_ = (nC3_ * (nC3_ - 1)) / 2; | | static const int nC3x_ = (nC3_ * (nC3_ - 1)) / 2; | |
| static const int nC4_ = GEOGRAPHICLIB_GEODESIC_ORDER; | | static const int nC4_ = GEOGRAPHICLIB_GEODESIC_ORDER; | |
| static const int nC4x_ = (nC4_ * (nC4_ + 1)) / 2; | | static const int nC4x_ = (nC4_ * (nC4_ + 1)) / 2; | |
|
| static const unsigned maxit_ = 30; | | static const unsigned maxit1_ = 20; | |
| static const unsigned bisection_ = std::numeric_limits<real>::digits + | | static const unsigned maxit2_ = maxit1_ + | |
| 10; | | std::numeric_limits<real>::digits + 10; | |
| | | | |
| static const real tiny_; | | static const real tiny_; | |
| static const real tol0_; | | static const real tol0_; | |
| static const real tol1_; | | static const real tol1_; | |
| static const real tol2_; | | static const real tol2_; | |
|
| | | static const real tolb_; | |
| static const real xthresh_; | | static const real xthresh_; | |
| | | | |
| enum captype { | | enum captype { | |
| CAP_NONE = 0U, | | CAP_NONE = 0U, | |
| CAP_C1 = 1U<<0, | | CAP_C1 = 1U<<0, | |
| CAP_C1p = 1U<<1, | | CAP_C1p = 1U<<1, | |
| CAP_C2 = 1U<<2, | | CAP_C2 = 1U<<2, | |
| CAP_C3 = 1U<<3, | | CAP_C3 = 1U<<3, | |
| CAP_C4 = 1U<<4, | | CAP_C4 = 1U<<4, | |
| CAP_ALL = 0x1FU, | | CAP_ALL = 0x1FU, | |
| | | | |
| skipping to change at line 632 | | skipping to change at line 644 | |
| * [−180°, 180°). | | * [−180°, 180°). | |
| * | | * | |
| * If either point is at a pole, the azimuth is defined by keeping the | | * If either point is at a pole, the azimuth is defined by keeping the | |
| * longitude fixed and writing \e lat = 90° − ε or | | * longitude fixed and writing \e lat = 90° − ε or | |
| * −90° + ε and taking the limit ε → 0 f
rom | | * −90° + ε and taking the limit ε → 0 f
rom | |
| * above. | | * above. | |
| * | | * | |
| * The solution to the inverse problem is found using Newton's method.
If | | * The solution to the inverse problem is found using Newton's method.
If | |
| * this fails to converge (this is very unlikely in geodetic applicatio
ns | | * this fails to converge (this is very unlikely in geodetic applicatio
ns | |
| * but does occur for very eccentric ellipsoids), then the bisection me
thod | | * but does occur for very eccentric ellipsoids), then the bisection me
thod | |
|
| * is used to refine the solution. This should always converge to an | | * is used to refine the solution. | |
| * accurate solution. | | | |
| * | | | |
| * (If the routine fails to converge, then all the requested outputs ar | | | |
| e | | | |
| * set to Math::NaN() --- test for such results with Math::isnan. Plea | | | |
| se | | | |
| * report all cases where this occurs.) | | | |
| * | | * | |
| * The following functions are overloaded versions of Geodesic::Inverse | | * The following functions are overloaded versions of Geodesic::Inverse | |
| * which omit some of the output parameters. Note, however, that the a
rc | | * which omit some of the output parameters. Note, however, that the a
rc | |
| * length is always computed and returned as the function value. | | * length is always computed and returned as the function value. | |
| **********************************************************************
/ | | **********************************************************************
/ | |
| Math::real Inverse(real lat1, real lon1, real lat2, real lon2, | | Math::real Inverse(real lat1, real lon1, real lat2, real lon2, | |
| real& s12, real& azi1, real& azi2, real& m12, | | real& s12, real& azi1, real& azi2, real& m12, | |
| real& M12, real& M21, real& S12) const throw() { | | real& M12, real& M21, real& S12) const throw() { | |
| return GenInverse(lat1, lon1, lat2, lon2, | | return GenInverse(lat1, lon1, lat2, lon2, | |
| DISTANCE | AZIMUTH | | | DISTANCE | AZIMUTH | | |
| | | | |
End of changes. 6 change blocks. |
| 19 lines changed or deleted | | 24 lines changed or added | |
|
| GeodesicExact.hpp | | GeodesicExact.hpp | |
| | | | |
| skipping to change at line 40 | | skipping to change at line 40 | |
| * The equations for geodesics on an ellipsoid can be expressed in terms
of | | * The equations for geodesics on an ellipsoid can be expressed in terms
of | |
| * incomplete elliptic integrals. The Geodesic class expands these integ
rals | | * incomplete elliptic integrals. The Geodesic class expands these integ
rals | |
| * in a series in the flattening \e f and this provides an accurate solut
ion | | * in a series in the flattening \e f and this provides an accurate solut
ion | |
| * for \e f &isin [-0.01, 0.01]. The GeodesicExact class computes the | | * for \e f &isin [-0.01, 0.01]. The GeodesicExact class computes the | |
| * ellitpic integrals directly and so provides a solution which is valid
for | | * ellitpic integrals directly and so provides a solution which is valid
for | |
| * all \e f. However, in practice, its use should be limited to about \e | | * all \e f. However, in practice, its use should be limited to about \e | |
| * b/\e a ∈ [0.01, 100] or \e f ∈ [-99, 0.99]. | | * b/\e a ∈ [0.01, 100] or \e f ∈ [-99, 0.99]. | |
| * | | * | |
| * For the WGS84 ellipsoid, these classes are 2--3 times \e slower than t
he | | * For the WGS84 ellipsoid, these classes are 2--3 times \e slower than t
he | |
| * series solution and 2--3 times \e less \e accurate (because it's less
easy | | * series solution and 2--3 times \e less \e accurate (because it's less
easy | |
|
| * to control round-off errors with the elliptic integral formulation). | | * to control round-off errors with the elliptic integral formulation); i | |
| * However the error in the series solution scales as <i>f</i><sup>7</sup | | .e., | |
| > | | * the error is about 40 nm (40 nanometers) instead of 15 nm. However th | |
| * while the error in the elliptic integral solution is independent of \e | | e | |
| f. | | * error in the series solution scales as <i>f</i><sup>7</sup> while the | |
| | | * error in the elliptic integral solution depends weakly on \e f. If th | |
| | | e | |
| | | * quarter meridian distance is 10000 km and the ratio \e b/\e a = 1 &min | |
| | | us; | |
| | | * \e f is varied then the approximate maximum error (expressed as a | |
| | | * distance) is <pre> | |
| | | * 1 - f error (nm) | |
| | | * 1/128 387 | |
| | | * 1/64 345 | |
| | | * 1/32 269 | |
| | | * 1/16 210 | |
| | | * 1/8 115 | |
| | | * 1/4 69 | |
| | | * 1/2 36 | |
| | | * 1 15 | |
| | | * 2 25 | |
| | | * 4 96 | |
| | | * 8 318 | |
| | | * 16 985 | |
| | | * 32 2352 | |
| | | * 64 6008 | |
| | | * 128 19024 | |
| | | * </pre> | |
| * | | * | |
| * The computation of the area in these classes is via a 30th order serie
s. | | * The computation of the area in these classes is via a 30th order serie
s. | |
| * This gives accurate results for \e b/\e a ∈ [1/2, 2]; the accurac
y is | | * This gives accurate results for \e b/\e a ∈ [1/2, 2]; the accurac
y is | |
| * about 8 decimal digits for \e b/\e a ∈ [1/4, 4]. | | * about 8 decimal digits for \e b/\e a ∈ [1/4, 4]. | |
| * | | * | |
| * See \ref geodellip for the formulation. See the documentation on the | | * See \ref geodellip for the formulation. See the documentation on the | |
| * Geodesic class for additional information on the geodesics problems. | | * Geodesic class for additional information on the geodesics problems. | |
| * | | * | |
| * Example of use: | | * Example of use: | |
| * \include example-GeodesicExact.cpp | | * \include example-GeodesicExact.cpp | |
| | | | |
| skipping to change at line 65 | | skipping to change at line 86 | |
| * to the functionality of GeodesicExact and GeodesicLineExact (via the -
E | | * to the functionality of GeodesicExact and GeodesicLineExact (via the -
E | |
| * option). | | * option). | |
| **********************************************************************/ | | **********************************************************************/ | |
| | | | |
| class GEOGRAPHIC_EXPORT GeodesicExact { | | class GEOGRAPHIC_EXPORT GeodesicExact { | |
| private: | | private: | |
| typedef Math::real real; | | typedef Math::real real; | |
| friend class GeodesicLineExact; | | friend class GeodesicLineExact; | |
| static const int nC4_ = GEOGRAPHICLIB_GEODESICEXACT_ORDER; | | static const int nC4_ = GEOGRAPHICLIB_GEODESICEXACT_ORDER; | |
| static const int nC4x_ = (nC4_ * (nC4_ + 1)) / 2; | | static const int nC4x_ = (nC4_ * (nC4_ + 1)) / 2; | |
|
| static const unsigned maxit_ = 30; | | static const unsigned maxit1_ = 20; | |
| static const unsigned bisection_ = std::numeric_limits<real>::digits + | | static const unsigned maxit2_ = maxit1_ + | |
| 10; | | std::numeric_limits<real>::digits + 10; | |
| | | | |
| static const real tiny_; | | static const real tiny_; | |
| static const real tol0_; | | static const real tol0_; | |
| static const real tol1_; | | static const real tol1_; | |
| static const real tol2_; | | static const real tol2_; | |
|
| | | static const real tolb_; | |
| static const real xthresh_; | | static const real xthresh_; | |
| | | | |
| enum captype { | | enum captype { | |
| CAP_NONE = 0U, | | CAP_NONE = 0U, | |
| CAP_E = 1U<<0, | | CAP_E = 1U<<0, | |
| // Skip 1U<<1 for compatibility with Geodesic (not required) | | // Skip 1U<<1 for compatibility with Geodesic (not required) | |
| CAP_D = 1U<<2, | | CAP_D = 1U<<2, | |
| CAP_H = 1U<<3, | | CAP_H = 1U<<3, | |
| CAP_C4 = 1U<<4, | | CAP_C4 = 1U<<4, | |
| CAP_ALL = 0x1FU, | | CAP_ALL = 0x1FU, | |
| OUT_ALL = 0x7F80U, | | OUT_ALL = 0x7F80U, | |
| }; | | }; | |
| | | | |
|
| static real SinCosSeries(real sinx, real cosx, const real c[], int n) | | static real CosSeries(real sinx, real cosx, const real c[], int n) | |
| throw(); | | throw(); | |
| static inline real AngRound(real x) throw() { | | static inline real AngRound(real x) throw() { | |
| // The makes the smallest gap in x = 1/16 - nextafter(1/16, 0) = 1/2^
57 | | // The makes the smallest gap in x = 1/16 - nextafter(1/16, 0) = 1/2^
57 | |
| // for reals = 0.7 pm on the earth if x is an angle in degrees. (Thi
s | | // for reals = 0.7 pm on the earth if x is an angle in degrees. (Thi
s | |
| // is about 1000 times more resolution than we get with angles around
90 | | // is about 1000 times more resolution than we get with angles around
90 | |
| // degrees.) We use this to avoid having to deal with near singular | | // degrees.) We use this to avoid having to deal with near singular | |
| // cases when x is non-zero but tiny (e.g., 1.0e-200). | | // cases when x is non-zero but tiny (e.g., 1.0e-200). | |
| const real z = real(0.0625); // 1/16 | | const real z = real(0.0625); // 1/16 | |
| volatile real y = std::abs(x); | | volatile real y = std::abs(x); | |
| // The compiler mustn't "simplify" z - (z - y) to y | | // The compiler mustn't "simplify" z - (z - y) to y | |
| | | | |
| skipping to change at line 541 | | skipping to change at line 564 | |
| * @return \e a12 arc length of between point 1 and point 2 (degrees). | | * @return \e a12 arc length of between point 1 and point 2 (degrees). | |
| * | | * | |
| * \e lat1 and \e lat2 should be in the range [−90°, 90°]
; \e | | * \e lat1 and \e lat2 should be in the range [−90°, 90°]
; \e | |
| * lon1 and \e lon2 should be in the range [−540°, 540°). | | * lon1 and \e lon2 should be in the range [−540°, 540°). | |
| * The values of \e azi1 and \e azi2 returned are in the range | | * The values of \e azi1 and \e azi2 returned are in the range | |
| * [−180°, 180°). | | * [−180°, 180°). | |
| * | | * | |
| * If either point is at a pole, the azimuth is defined by keeping the | | * If either point is at a pole, the azimuth is defined by keeping the | |
| * longitude fixed and writing \e lat = 90° − ε or | | * longitude fixed and writing \e lat = 90° − ε or | |
| * −90° + ε and taking the limit ε → 0 f
rom | | * −90° + ε and taking the limit ε → 0 f
rom | |
|
| * above. If the routine fails to converge, then all the requested out | | * above. | |
| puts | | | |
| * are set to Math::NaN(). (Test for such results with Math::isnan.) | | | |
| This | | | |
| * is not expected to happen with ellipsoidal models of the earth; plea | | | |
| se | | | |
| * report all cases where this occurs. | | | |
| * | | * | |
| * The following functions are overloaded versions of GeodesicExact::In
verse | | * The following functions are overloaded versions of GeodesicExact::In
verse | |
| * which omit some of the output parameters. Note, however, that the a
rc | | * which omit some of the output parameters. Note, however, that the a
rc | |
| * length is always computed and returned as the function value. | | * length is always computed and returned as the function value. | |
| **********************************************************************
/ | | **********************************************************************
/ | |
| Math::real Inverse(real lat1, real lon1, real lat2, real lon2, | | Math::real Inverse(real lat1, real lon1, real lat2, real lon2, | |
| real& s12, real& azi1, real& azi2, real& m12, | | real& s12, real& azi1, real& azi2, real& m12, | |
| real& M12, real& M21, real& S12) const throw() { | | real& M12, real& M21, real& S12) const throw() { | |
| return GenInverse(lat1, lon1, lat2, lon2, | | return GenInverse(lat1, lon1, lat2, lon2, | |
| DISTANCE | AZIMUTH | | | DISTANCE | AZIMUTH | | |
| | | | |
End of changes. 5 change blocks. |
| 16 lines changed or deleted | | 34 lines changed or added | |
|
| GeodesicLine.hpp | | GeodesicLine.hpp | |
| | | | |
| skipping to change at line 36 | | skipping to change at line 36 | |
| * a12 along the geodesic. | | * a12 along the geodesic. | |
| * | | * | |
| * The default copy constructor and assignment operators work with this | | * The default copy constructor and assignment operators work with this | |
| * class. Similarly, a vector can be used to hold GeodesicLine objects. | | * class. Similarly, a vector can be used to hold GeodesicLine objects. | |
| * | | * | |
| * The calculations are accurate to better than 15 nm (15 nanometers). S
ee | | * The calculations are accurate to better than 15 nm (15 nanometers). S
ee | |
| * Sec. 9 of | | * Sec. 9 of | |
| * <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a> for | | * <a href="http://arxiv.org/abs/1102.1215v1">arXiv:1102.1215v1</a> for | |
| * details. The algorithms used by this class are based on series expans
ions | | * details. The algorithms used by this class are based on series expans
ions | |
| * using the flattening \e f as a small parameter. These only accurate f
or | | * using the flattening \e f as a small parameter. These only accurate f
or | |
|
| * |\e f| < 0.01; however reasonably accurate results will be obtained | | * |\e f| < 0.02; however reasonably accurate results will be obtained | |
| for | | for | |
| * |\e f| < 0.1. For very eccentric ellipsoids, use GeodesicLineExact | | * |\e f| < 0.2. For very eccentric ellipsoids, use GeodesicLineExact | |
| * instead. | | * instead. | |
| * | | * | |
| * The algorithms are described in | | * The algorithms are described in | |
| * - C. F. F. Karney, | | * - C. F. F. Karney, | |
| * <a href="http://dx.doi.org/10.1007/s00190-012-0578-z"> | | * <a href="http://dx.doi.org/10.1007/s00190-012-0578-z"> | |
| * Algorithms for geodesics</a>, | | * Algorithms for geodesics</a>, | |
| * J. Geodesy, 2012; | | * J. Geodesy, 2012; | |
| * DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z"> | | * DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z"> | |
|
| * 10.1007/s00190-012-0578-z</a>. | | * 10.1007/s00190-012-0578-z</a>; | |
| | | * addenda: <a href="http://geographiclib.sf.net/geod-addenda.html"> | |
| | | * geod-addenda.html</a>. | |
| * . | | * . | |
| * For more information on geodesics see \ref geodesic. | | * For more information on geodesics see \ref geodesic. | |
| * | | * | |
| * Example of use: | | * Example of use: | |
| * \include example-GeodesicLine.cpp | | * \include example-GeodesicLine.cpp | |
| * | | * | |
| * <a href="Geod.1.html">Geod</a> is a command-line utility providing acc
ess | | * <a href="Geod.1.html">Geod</a> is a command-line utility providing acc
ess | |
| * to the functionality of Geodesic and GeodesicLine. | | * to the functionality of Geodesic and GeodesicLine. | |
| **********************************************************************/ | | **********************************************************************/ | |
| | | | |
| | | | |
End of changes. 2 change blocks. |
| 4 lines changed or deleted | | 6 lines changed or added | |
|
| Gnomonic.hpp | | Gnomonic.hpp | |
| | | | |
| skipping to change at line 29 | | skipping to change at line 29 | |
| /** | | /** | |
| * \brief %Gnomonic projection | | * \brief %Gnomonic projection | |
| * | | * | |
| * %Gnomonic projection centered at an arbitrary position \e C on the | | * %Gnomonic projection centered at an arbitrary position \e C on the | |
| * ellipsoid. This projection is derived in Section 8 of | | * ellipsoid. This projection is derived in Section 8 of | |
| * - C. F. F. Karney, | | * - C. F. F. Karney, | |
| * <a href="http://dx.doi.org/10.1007/s00190-012-0578-z"> | | * <a href="http://dx.doi.org/10.1007/s00190-012-0578-z"> | |
| * Algorithms for geodesics</a>, | | * Algorithms for geodesics</a>, | |
| * J. Geodesy, 2012; | | * J. Geodesy, 2012; | |
| * DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z"> | | * DOI: <a href="http://dx.doi.org/10.1007/s00190-012-0578-z"> | |
|
| * 10.1007/s00190-012-0578-z</a>. | | * 10.1007/s00190-012-0578-z</a>; | |
| | | * addenda: <a href="http://geographiclib.sf.net/geod-addenda.html"> | |
| | | * geod-addenda.html</a>. | |
| * . | | * . | |
| * The projection of \e P is defined as follows: compute the geodesic lin
e | | * The projection of \e P is defined as follows: compute the geodesic lin
e | |
| * from \e C to \e P; compute the reduced length \e m12, geodesic scale \
e | | * from \e C to \e P; compute the reduced length \e m12, geodesic scale \
e | |
| * M12, and ρ = <i>m12</i>/\e M12; finally \e x = ρ sin \e azi1;
\e | | * M12, and ρ = <i>m12</i>/\e M12; finally \e x = ρ sin \e azi1;
\e | |
| * y = ρ cos \e azi1, where \e azi1 is the azimuth of the geodesic at
\e | | * y = ρ cos \e azi1, where \e azi1 is the azimuth of the geodesic at
\e | |
| * C. The Gnomonic::Forward and Gnomonic::Reverse methods also return th
e | | * C. The Gnomonic::Forward and Gnomonic::Reverse methods also return th
e | |
| * azimuth \e azi of the geodesic at \e P and reciprocal scale \e rk in t
he | | * azimuth \e azi of the geodesic at \e P and reciprocal scale \e rk in t
he | |
| * azimuthal direction. The scale in the radial direction if | | * azimuthal direction. The scale in the radial direction if | |
| * 1/<i>rk</i><sup>2</sup>. | | * 1/<i>rk</i><sup>2</sup>. | |
| * | | * | |
| | | | |
End of changes. 1 change blocks. |
| 1 lines changed or deleted | | 3 lines changed or added | |
|