| CassiniSoldner.hpp | | CassiniSoldner.hpp | |
| | | | |
| skipping to change at line 12 | | skipping to change at line 12 | |
| * \file CassiniSoldner.hpp | | * \file CassiniSoldner.hpp | |
| * \brief Header for GeographicLib::CassiniSoldner class | | * \brief Header for GeographicLib::CassiniSoldner class | |
| * | | * | |
| * Copyright (c) Charles Karney (2009, 2010, 2011) <charles@karney.com> and | | * Copyright (c) Charles Karney (2009, 2010, 2011) <charles@karney.com> and | |
| * licensed under the MIT/X11 License. For more information, see | | * licensed under the MIT/X11 License. For more information, see | |
| * http://geographiclib.sourceforge.net/ | | * http://geographiclib.sourceforge.net/ | |
| **********************************************************************/ | | **********************************************************************/ | |
| | | | |
| #if !defined(GEOGRAPHICLIB_CASSINISOLDNER_HPP) | | #if !defined(GEOGRAPHICLIB_CASSINISOLDNER_HPP) | |
| #define GEOGRAPHICLIB_CASSINISOLDNER_HPP \ | | #define GEOGRAPHICLIB_CASSINISOLDNER_HPP \ | |
|
| "$Id: 5e164482237fc52a63dda3d7e4f287f6313fc79a $" | | "$Id: 5bc26e8f1b01bf50e377db0d9c140721f13dc834 $" | |
| | | | |
| #include <GeographicLib/Geodesic.hpp> | | #include <GeographicLib/Geodesic.hpp> | |
| #include <GeographicLib/GeodesicLine.hpp> | | #include <GeographicLib/GeodesicLine.hpp> | |
| #include <GeographicLib/Constants.hpp> | | #include <GeographicLib/Constants.hpp> | |
| | | | |
| namespace GeographicLib { | | namespace GeographicLib { | |
| | | | |
| /** | | /** | |
| * \brief Cassini-Soldner Projection. | | * \brief Cassini-Soldner Projection. | |
| * | | * | |
| | | | |
| skipping to change at line 74 | | skipping to change at line 74 | |
| **********************************************************************/ | | **********************************************************************/ | |
| | | | |
| class GEOGRAPHIC_EXPORT CassiniSoldner { | | class GEOGRAPHIC_EXPORT CassiniSoldner { | |
| private: | | private: | |
| typedef Math::real real; | | typedef Math::real real; | |
| Geodesic _earth; | | Geodesic _earth; | |
| GeodesicLine _meridian; | | GeodesicLine _meridian; | |
| real _sbet0, _cbet0; | | real _sbet0, _cbet0; | |
| static const real eps1_; | | static const real eps1_; | |
| static const real tiny_; | | static const real tiny_; | |
|
| static const unsigned maxit_ = 10; | | static const unsigned maxit_ = 10; | |
| | | | |
| // The following private helper functions are copied from Geodesic. | | // The following private helper functions are copied from Geodesic. | |
| static inline real AngNormalize(real x) throw() { | | static inline real AngNormalize(real x) throw() { | |
| // Place angle in [-180, 180). Assumes x is in [-540, 540). | | // Place angle in [-180, 180). Assumes x is in [-540, 540). | |
| return x >= 180 ? x - 360 : (x < -180 ? x + 360 : x); | | return x >= 180 ? x - 360 : (x < -180 ? x + 360 : x); | |
| } | | } | |
| 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 | |
| | | | |
End of changes. 2 change blocks. |
| 2 lines changed or deleted | | 2 lines changed or added | |
|
| LambertConformalConic.hpp | | LambertConformalConic.hpp | |
| | | | |
| skipping to change at line 12 | | skipping to change at line 12 | |
| * \file LambertConformalConic.hpp | | * \file LambertConformalConic.hpp | |
| * \brief Header for GeographicLib::LambertConformalConic class | | * \brief Header for GeographicLib::LambertConformalConic class | |
| * | | * | |
| * Copyright (c) Charles Karney (2010, 2011) <charles@karney.com> and licen
sed | | * Copyright (c) Charles Karney (2010, 2011) <charles@karney.com> and licen
sed | |
| * under the MIT/X11 License. For more information, see | | * under the MIT/X11 License. For more information, see | |
| * http://geographiclib.sourceforge.net/ | | * http://geographiclib.sourceforge.net/ | |
| **********************************************************************/ | | **********************************************************************/ | |
| | | | |
| #if !defined(GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP) | | #if !defined(GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP) | |
| #define GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP \ | | #define GEOGRAPHICLIB_LAMBERTCONFORMALCONIC_HPP \ | |
|
| "$Id: fcf9176f0a356995138754581297173aa3491693 $" | | "$Id: 01a4aff302dde6b1dca687badd42f945f34b9bf7 $" | |
| | | | |
| #include <algorithm> | | #include <algorithm> | |
| #include <GeographicLib/Constants.hpp> | | #include <GeographicLib/Constants.hpp> | |
| | | | |
| namespace GeographicLib { | | namespace GeographicLib { | |
| | | | |
| /** | | /** | |
| * \brief Lambert Conformal Conic Projection | | * \brief Lambert Conformal Conic Projection | |
| * | | * | |
| * Implementation taken from the report, | | * Implementation taken from the report, | |
| | | | |
| skipping to change at line 115 | | skipping to change at line 115 | |
| real t = (x - y)/2; | | real t = (x - y)/2; | |
| return (t != 0 ? sinh(t)/t : real(1)) * exp((x + y)/2); | | return (t != 0 ? sinh(t)/t : real(1)) * exp((x + y)/2); | |
| } | | } | |
| // Dsinh(x,y) = 2*sinh((x-y)/2)/(x-y) * cosh((x+y)/2) | | // Dsinh(x,y) = 2*sinh((x-y)/2)/(x-y) * cosh((x+y)/2) | |
| // cosh((x+y)/2) = (c+sinh(x)*sinh(y)/c)/2 | | // cosh((x+y)/2) = (c+sinh(x)*sinh(y)/c)/2 | |
| // c=sqrt((1+cosh(x))*(1+cosh(y))) | | // c=sqrt((1+cosh(x))*(1+cosh(y))) | |
| // cosh((x+y)/2) = sqrt( (sinh(x)*sinh(y) + cosh(x)*cosh(y) + 1)/2 ) | | // cosh((x+y)/2) = sqrt( (sinh(x)*sinh(y) + cosh(x)*cosh(y) + 1)/2 ) | |
| static inline real Dsinh(real x, real y, real sx, real sy, real cx, rea
l cy) | | static inline real Dsinh(real x, real y, real sx, real sy, real cx, rea
l cy) | |
| // sx = sinh(x), cx = cosh(x) | | // sx = sinh(x), cx = cosh(x) | |
| throw() { | | throw() { | |
|
| // real t = (x - y)/2, c = sqrt((1 + cx) * (1 + cy)); | | // real t = (x - y)/2, c = sqrt((1 + cx) * (1 + cy)); | |
| // return (t != 0 ? sinh(t)/t : real(1)) * (c + sx * sy / c) /2; | | // return (t != 0 ? sinh(t)/t : real(1)) * (c + sx * sy / c) /2; | |
|
| real t = (x - y)/2; | | real t = (x - y)/2; | |
| return (t != 0 ? sinh(t)/t : real(1)) * sqrt((sx * sy + cx * cy + 1)
/2); | | return (t != 0 ? sinh(t)/t : real(1)) * sqrt((sx * sy + cx * cy + 1)
/2); | |
| } | | } | |
| // Dasinh(x,y) = asinh((x-y)*(x+y)/(x*sqrt(1+y^2)+y*sqrt(1+x^2)))/(x-y) | | // Dasinh(x,y) = asinh((x-y)*(x+y)/(x*sqrt(1+y^2)+y*sqrt(1+x^2)))/(x-y) | |
| // = asinh((x*sqrt(1+y^2)-y*sqrt(1+x^2)))/(x-y) | | // = asinh((x*sqrt(1+y^2)-y*sqrt(1+x^2)))/(x-y) | |
| static inline real Dasinh(real x, real y, real hx, real hy) throw() { | | static inline real Dasinh(real x, real y, real hx, real hy) throw() { | |
| // hx = hyp(x) | | // hx = hyp(x) | |
| real t = x - y; | | real t = x - y; | |
| return t != 0 ? | | return t != 0 ? | |
| Math::asinh(x*y > 0 ? t * (x+y) / (x*hy + y*hx) : x*hy - y*hx) / t
: | | Math::asinh(x*y > 0 ? t * (x+y) / (x*hy + y*hx) : x*hy - y*hx) / t
: | |
| 1/hx; | | 1/hx; | |
| | | | |
| skipping to change at line 284 | | skipping to change at line 284 | |
| /** \name Inspector functions | | /** \name Inspector functions | |
| **********************************************************************
/ | | **********************************************************************
/ | |
| ///@{ | | ///@{ | |
| /** | | /** | |
| * @return \e a the equatorial radius of the ellipsoid (meters). This
is | | * @return \e a the equatorial radius of the ellipsoid (meters). This
is | |
| * the value used in the constructor. | | * the value used in the constructor. | |
| **********************************************************************
/ | | **********************************************************************
/ | |
| Math::real MajorRadius() const throw() { return _a; } | | Math::real MajorRadius() const throw() { return _a; } | |
| | | | |
| /** | | /** | |
|
| * @return \e f the flattening of the ellipsoid. This is the | | * @return \e f the flattening of the ellipsoid. This is the | |
| * value used in the constructor. | | * value used in the constructor. | |
| **********************************************************************
/ | | **********************************************************************
/ | |
| Math::real Flattening() const throw() { return _f; } | | Math::real Flattening() const throw() { return _f; } | |
| | | | |
| /** | | /** | |
| * <b>DEPRECATED</b> | | * <b>DEPRECATED</b> | |
| * @return \e r the inverse flattening of the ellipsoid. | | * @return \e r the inverse flattening of the ellipsoid. | |
| **********************************************************************
/ | | **********************************************************************
/ | |
| Math::real InverseFlattening() const throw() { return 1/_f; } | | Math::real InverseFlattening() const throw() { return 1/_f; } | |
| | | | |
| | | | |
End of changes. 4 change blocks. |
| 4 lines changed or deleted | | 4 lines changed or added | |
|
| Math.hpp | | Math.hpp | |
| | | | |
| skipping to change at line 15 | | skipping to change at line 15 | |
| * Copyright (c) Charles Karney (2008, 2009, 2010, 2011) <charles@karney.co
m> | | * Copyright (c) Charles Karney (2008, 2009, 2010, 2011) <charles@karney.co
m> | |
| * and licensed under the MIT/X11 License. For more information, see | | * and licensed under the MIT/X11 License. For more information, see | |
| * http://geographiclib.sourceforge.net/ | | * http://geographiclib.sourceforge.net/ | |
| **********************************************************************/ | | **********************************************************************/ | |
| | | | |
| // Constants.hpp includes Math.hpp. Place this include outside Math.hpp's | | // Constants.hpp includes Math.hpp. Place this include outside Math.hpp's | |
| // include guard to enforce this ordering. | | // include guard to enforce this ordering. | |
| #include <GeographicLib/Constants.hpp> | | #include <GeographicLib/Constants.hpp> | |
| | | | |
| #if !defined(GEOGRAPHICLIB_MATH_HPP) | | #if !defined(GEOGRAPHICLIB_MATH_HPP) | |
|
| #define GEOGRAPHICLIB_MATH_HPP "$Id: 045fb188fcc3fe808fed0c9d5fa965861d2735
d1 $" | | #define GEOGRAPHICLIB_MATH_HPP "$Id: f0c40ff3ed056d8a0a110725be4528be4a4a6a
6e $" | |
| | | | |
| /** | | /** | |
| * Are C++0X math functions available? | | * Are C++0X math functions available? | |
| **********************************************************************/ | | **********************************************************************/ | |
| #if !defined(GEOGRAPHICLIB_CPLUSPLUS0X_MATH) | | #if !defined(GEOGRAPHICLIB_CPLUSPLUS0X_MATH) | |
| # if defined(__GXX_EXPERIMENTAL_CXX0X__) | | # if defined(__GXX_EXPERIMENTAL_CXX0X__) | |
| # define GEOGRAPHICLIB_CPLUSPLUS0X_MATH 1 | | # define GEOGRAPHICLIB_CPLUSPLUS0X_MATH 1 | |
| # else | | # else | |
| # define GEOGRAPHICLIB_CPLUSPLUS0X_MATH 0 | | # define GEOGRAPHICLIB_CPLUSPLUS0X_MATH 0 | |
| # endif | | # endif | |
| | | | |
| skipping to change at line 197 | | skipping to change at line 197 | |
| * @return exp(\e x) - 1. | | * @return exp(\e x) - 1. | |
| **********************************************************************
/ | | **********************************************************************
/ | |
| template<typename T> static inline T expm1(T x) throw() { | | template<typename T> static inline T expm1(T x) throw() { | |
| volatile T | | volatile T | |
| y = std::exp(x), | | y = std::exp(x), | |
| z = y - 1; | | z = y - 1; | |
| // The reasoning here is similar to that for log1p. The expression | | // The reasoning here is similar to that for log1p. The expression | |
| // mathematically reduces to exp(x) - 1, and the factor z/log(y) = (y
- | | // mathematically reduces to exp(x) - 1, and the factor z/log(y) = (y
- | |
| // 1)/log(y) is a slowly varying quantity near y = 1 and is accuratel
y | | // 1)/log(y) is a slowly varying quantity near y = 1 and is accuratel
y | |
| // computed. | | // computed. | |
|
| return std::abs(x) > 1 ? z : (z == 0 ? x : x * z / std::log(y)); | | return std::abs(x) > 1 ? z : (z == 0 ? x : x * z / std::log(y)); | |
| } | | } | |
| #elif GEOGRAPHICLIB_CPLUSPLUS0X_MATH | | #elif GEOGRAPHICLIB_CPLUSPLUS0X_MATH | |
| template<typename T> static inline T expm1(T x) throw() | | template<typename T> static inline T expm1(T x) throw() | |
| { return std::expm1(x); } | | { return std::expm1(x); } | |
| #else | | #else | |
| static inline double expm1(double x) throw() { return ::expm1(x); } | | static inline double expm1(double x) throw() { return ::expm1(x); } | |
| static inline float expm1(float x) throw() { return ::expm1f(x); } | | static inline float expm1(float x) throw() { return ::expm1f(x); } | |
| #if defined(HAVE_LONG_DOUBLE) | | #if defined(HAVE_LONG_DOUBLE) | |
| static inline long double expm1(long double x) throw() | | static inline long double expm1(long double x) throw() | |
| { return ::expm1l(x); } | | { return ::expm1l(x); } | |
| | | | |
End of changes. 2 change blocks. |
| 2 lines changed or deleted | | 2 lines changed or added | |
|
| OSGB.hpp | | OSGB.hpp | |
| /** | | /** | |
| * \file OSGB.hpp | | * \file OSGB.hpp | |
| * \brief Header for GeographicLib::OSGB class | | * \brief Header for GeographicLib::OSGB class | |
| * | | * | |
| * Copyright (c) Charles Karney (2010, 2011) <charles@karney.com> and licen
sed | | * Copyright (c) Charles Karney (2010, 2011) <charles@karney.com> and licen
sed | |
| * under the MIT/X11 License. For more information, see | | * under the MIT/X11 License. For more information, see | |
| * http://geographiclib.sourceforge.net/ | | * http://geographiclib.sourceforge.net/ | |
| **********************************************************************/ | | **********************************************************************/ | |
| | | | |
| #if !defined(GEOGRAPHICLIB_OSGB_HPP) | | #if !defined(GEOGRAPHICLIB_OSGB_HPP) | |
|
| #define GEOGRAPHICLIB_OSGB_HPP "$Id: a8dbde4065691daa15563ea55c23eab4b7d8e9
67 $" | | #define GEOGRAPHICLIB_OSGB_HPP "$Id: 8d8f45bf479e7191b7dae5f8dd2f43ede9e934
d2 $" | |
| | | | |
| #include <string> | | #include <string> | |
| #include <sstream> | | #include <sstream> | |
| #include <GeographicLib/Constants.hpp> | | #include <GeographicLib/Constants.hpp> | |
| #include <GeographicLib/TransverseMercator.hpp> | | #include <GeographicLib/TransverseMercator.hpp> | |
| | | | |
| #if defined(_MSC_VER) | | #if defined(_MSC_VER) | |
| // Squelch warnings about dll vs string | | // Squelch warnings about dll vs string | |
| #pragma warning (push) | | #pragma warning (push) | |
| #pragma warning (disable: 4251) | | #pragma warning (disable: 4251) | |
| | | | |
| skipping to change at line 195 | | skipping to change at line 195 | |
| | | | |
| /** | | /** | |
| * @return \e f the inverse flattening of the Airy 1830 ellipsoid. | | * @return \e f the inverse flattening of the Airy 1830 ellipsoid. | |
| * | | * | |
| * For the Airy 1830 ellipsoid, \e a = 20923713 ft and \e b = 20853810
ft; | | * For the Airy 1830 ellipsoid, \e a = 20923713 ft and \e b = 20853810
ft; | |
| * thus the flattening = (20923713 - 20853810)/20923713 = 7767/2324857
= | | * thus the flattening = (20923713 - 20853810)/20923713 = 7767/2324857
= | |
| * 1/299.32496459... (The Airy 1830 value is returned because the OSGB | | * 1/299.32496459... (The Airy 1830 value is returned because the OSGB | |
| * projection is based on this ellipsoid.) | | * projection is based on this ellipsoid.) | |
| **********************************************************************
/ | | **********************************************************************
/ | |
| static Math::real Flattening() throw() | | static Math::real Flattening() throw() | |
|
| { return real(20923713 - 20853810) / real(20923713); } | | { return real(20923713 - 20853810) / real(20923713); } | |
| | | | |
| /** | | /** | |
| * <b>DEPRECATED</b> | | * <b>DEPRECATED</b> | |
| * @return \e r the inverse flattening of the Airy 1830 ellipsoid. | | * @return \e r the inverse flattening of the Airy 1830 ellipsoid. | |
| **********************************************************************
/ | | **********************************************************************
/ | |
| static Math::real InverseFlattening() throw() { return 1/Flattening();
} | | static Math::real InverseFlattening() throw() { return 1/Flattening();
} | |
| | | | |
| /** | | /** | |
| * @return \e k0 central scale for the OSGB projection (0.9996012717). | | * @return \e k0 central scale for the OSGB projection (0.9996012717). | |
| **********************************************************************
/ | | **********************************************************************
/ | |
| | | | |
End of changes. 2 change blocks. |
| 2 lines changed or deleted | | 2 lines changed or added | |
|
| SphericalHarmonic.hpp | | SphericalHarmonic.hpp | |
| | | | |
| skipping to change at line 12 | | skipping to change at line 12 | |
| * \file SphericalHarmonic.hpp | | * \file SphericalHarmonic.hpp | |
| * \brief Header for GeographicLib::SphericalHarmonic class | | * \brief Header for GeographicLib::SphericalHarmonic class | |
| * | | * | |
| * Copyright (c) Charles Karney (2011) <charles@karney.com> and licensed un
der | | * Copyright (c) Charles Karney (2011) <charles@karney.com> and licensed un
der | |
| * the MIT/X11 License. For more information, see | | * the MIT/X11 License. For more information, see | |
| * http://geographiclib.sourceforge.net/ | | * http://geographiclib.sourceforge.net/ | |
| **********************************************************************/ | | **********************************************************************/ | |
| | | | |
| #if !defined(GEOGRAPHICLIB_SPHERICALHARMONIC_HPP) | | #if !defined(GEOGRAPHICLIB_SPHERICALHARMONIC_HPP) | |
| #define GEOGRAPHICLIB_SPHERICALHARMONIC_HPP \ | | #define GEOGRAPHICLIB_SPHERICALHARMONIC_HPP \ | |
|
| "$Id: cd1abfd4b08774a17c141bb6fbb07b04d4658791 $" | | "$Id: 6fa804c46efd01670cfb7835dd022791b60d2942 $" | |
| | | | |
| #include <vector> | | #include <vector> | |
| #include <GeographicLib/Constants.hpp> | | #include <GeographicLib/Constants.hpp> | |
| #include <GeographicLib/SphericalEngine.hpp> | | #include <GeographicLib/SphericalEngine.hpp> | |
| #include <GeographicLib/CircularEngine.hpp> | | #include <GeographicLib/CircularEngine.hpp> | |
| #include <GeographicLib/Geocentric.hpp> | | #include <GeographicLib/Geocentric.hpp> | |
| | | | |
| namespace GeographicLib { | | namespace GeographicLib { | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 212 | | skipping to change at line 212 | |
| * Compute the spherical harmonic sum. | | * Compute the spherical harmonic sum. | |
| * | | * | |
| * @param[in] x cartesian coordinate. | | * @param[in] x cartesian coordinate. | |
| * @param[in] y cartesian coordinate. | | * @param[in] y cartesian coordinate. | |
| * @param[in] z cartesian coordinate. | | * @param[in] z cartesian coordinate. | |
| * @return \e V the spherical harmonic sum. | | * @return \e V the spherical harmonic sum. | |
| * | | * | |
| * This routine requires constant memory and thus never throws an | | * This routine requires constant memory and thus never throws an | |
| * exception. | | * exception. | |
| **********************************************************************
/ | | **********************************************************************
/ | |
|
| Math::real operator()(real x, real y, real z) const throw() { | | Math::real operator()(real x, real y, real z) const throw() { | |
| real f[] = {1}; | | real f[] = {1}; | |
| real v = 0; | | real v = 0; | |
| real dummy; | | real dummy; | |
| switch (_norm) { | | switch (_norm) { | |
| case FULL: | | case FULL: | |
| v = SphericalEngine::Value<false, SphericalEngine::FULL, 1> | | v = SphericalEngine::Value<false, SphericalEngine::FULL, 1> | |
| (_c, f, x, y, z, _a, dummy, dummy, dummy); | | (_c, f, x, y, z, _a, dummy, dummy, dummy); | |
| break; | | break; | |
| case SCHMIDT: | | case SCHMIDT: | |
| v = SphericalEngine::Value<false, SphericalEngine::SCHMIDT, 1> | | v = SphericalEngine::Value<false, SphericalEngine::SCHMIDT, 1> | |
| | | | |
End of changes. 2 change blocks. |
| 2 lines changed or deleted | | 2 lines changed or added | |
|