JacobiConformal.hpp
Go to the documentation of this file.
1 
14 
15 namespace GeographicLib {
42  typedef Math::real real;
43  real _a, _b, _c, _ab2, _bc2, _ac2;
45  static void norm(real& x, real& y)
46  { real z = Math::hypot(x, y); x /= z; y /= z; }
47  public:
59  JacobiConformal(real a, real b, real c)
60  : _a(a), _b(b), _c(c)
61  , _ab2((_a - _b) * (_a + _b))
62  , _bc2((_b - _c) * (_b + _c))
63  , _ac2((_a - _c) * (_a + _c))
64  , _ex(_ab2 / _ac2 * Math::sq(_c / _b), -_ab2 / Math::sq(_b),
65  _bc2 / _ac2 * Math::sq(_a / _b), Math::sq(_a / _b))
66  , _ey(_bc2 / _ac2 * Math::sq(_a / _b), +_bc2 / Math::sq(_b),
67  _ab2 / _ac2 * Math::sq(_c / _b), Math::sq(_c / _b))
68  {
69  if (!(Math::isfinite(_a) && _a >= _b && _b >= _c && _c > 0))
70  throw GeographicErr("JacobiConformal: axes are not in order");
71  if (!(_a > _c))
72  throw GeographicErr
73  ("JacobiConformal: use alternate constructor for sphere");
74  }
89  JacobiConformal(real a, real b, real c, real ab, real bc)
90  : _a(a), _b(b), _c(c)
91  , _ab2(ab * (_a + _b))
92  , _bc2(bc * (_b + _c))
93  , _ac2(_ab2 + _bc2)
94  , _ex(_ab2 / _ac2 * Math::sq(_c / _b),
95  -(_a - _b) * (_a + _b) / Math::sq(_b),
96  _bc2 / _ac2 * Math::sq(_a / _b), Math::sq(_a / _b))
97  , _ey(_bc2 / _ac2 * Math::sq(_a / _b),
98  +(_b - _c) * (_b + _c) / Math::sq(_b),
99  _ab2 / _ac2 * Math::sq(_c / _b), Math::sq(_c / _b))
100  {
101  if (!(Math::isfinite(_a) && _a >= _b && _b >= _c && _c > 0 &&
102  ab >= 0 && bc >= 0))
103  throw GeographicErr("JacobiConformal: axes are not in order");
104  if (!(ab + bc > 0 && Math::isfinite(_ac2)))
105  throw GeographicErr("JacobiConformal: ab + bc must be positive");
106  }
110  Math::real x() const { return Math::sq(_a / _b) * _ex.Pi(); }
118  Math::real x(real somg, real comg) const {
119  real somg1 = _b * somg, comg1 = _a * comg; norm(somg1, comg1);
120  return Math::sq(_a / _b)
121  * _ex.Pi(somg1, comg1, _ex.Delta(somg1, comg1));
122  }
131  Math::real x(real omg) const {
132  real somg, comg;
133  Math::sincosd(omg, somg, comg);
134  return x(somg, comg) / Math::degree();
135  }
139  Math::real y() const { return Math::sq(_c / _b) * _ey.Pi(); }
147  Math::real y(real sbet, real cbet) const {
148  real sbet1 = _b * sbet, cbet1 = _c * cbet; norm(sbet1, cbet1);
149  return Math::sq(_c / _b)
150  * _ey.Pi(sbet1, cbet1, _ey.Delta(sbet1, cbet1));
151  }
160  Math::real y(real bet) const {
161  real sbet, cbet;
162  Math::sincosd(bet, sbet, cbet);
163  return y(sbet, cbet) / Math::degree();
164  }
165  };
166 
167 } // namespace GeographicLib
JacobiConformal(real a, real b, real c, real ab, real bc)
Scalar * b
Definition: benchVecAdd.cpp:17
static bool isfinite(T x)
Definition: Math.hpp:806
Scalar Scalar * c
Definition: benchVecAdd.cpp:17
Mathematical functions needed by GeographicLib.
Definition: Math.hpp:102
static void sincosd(T x, T &sinx, T &cosx)
Definition: Math.hpp:558
Elliptic integrals and functions.
Math::real y(real bet) const
JacobiConformal(real a, real b, real c)
static T hypot(T x, T y)
Definition: Math.hpp:243
Math::real y(real sbet, real cbet) const
static T sq(T x)
Definition: Math.hpp:232
Namespace for GeographicLib.
Jacobi's conformal projection of a triaxial ellipsoid.
Header for GeographicLib::EllipticFunction class.
static T degree()
Definition: Math.hpp:216
static void norm(real &x, real &y)
Math::real x(real omg) const
Math::real x(real somg, real comg) const
Exception handling for GeographicLib.
Definition: Constants.hpp:389
Math::real Delta(real sn, real cn) const


gtsam
Author(s):
autogenerated on Tue Jul 4 2023 02:34:27