GeographicLib
2.7
Toggle main menu visibility
Loading...
Searching...
No Matches
Ellipsoid.cpp
Go to the documentation of this file.
1
/**
2
* \file Ellipsoid.cpp
3
* \brief Implementation for GeographicLib::Ellipsoid class
4
*
5
* Copyright (c) Charles Karney (2012-2023) <karney@alum.mit.edu> and licensed
6
* under the MIT/X11 License. For more information, see
7
* https://geographiclib.sourceforge.io/
8
**********************************************************************/
9
10
#include <
GeographicLib/Ellipsoid.hpp
>
11
12
namespace
GeographicLib
{
13
14
using namespace
std;
15
16
/// \cond SKIP
17
Ellipsoid::Ellipsoid
(
real
a,
real
f)
18
: stol_(
real
(0.01) * sqrt(numeric_limits<
real
>::epsilon()))
19
, _a(a)
20
, _f(f)
21
, _b(_a * (1 - _f))
22
, _e2(_f * (2 - _f))
23
, _e12(_e2 / (1 - _e2))
24
, _n(_f / (2 - _f))
25
, _aux(_a, _f)
26
, _rm(_aux.RectifyingRadius(true))
27
, _c2(_aux.AuthalicRadiusSquared(true))
28
{}
29
/// \endcond
30
31
const
Ellipsoid
&
Ellipsoid::WGS84
() {
32
static
const
Ellipsoid
wgs84(
Constants::WGS84_a
(),
Constants::WGS84_f
());
33
return
wgs84;
34
}
35
36
Math::real
Ellipsoid::QuarterMeridian
()
const
37
{
return
Math::pi
()/2 * _rm; }
38
39
Math::real
Ellipsoid::Area
()
const
40
{
return
4 *
Math::pi
() * _c2; }
41
42
Math::real
Ellipsoid::ParametricLatitude
(real phi)
const
{
43
return
_aux.Convert(
AuxLatitude::PHI
,
AuxLatitude::BETA
,
44
Math::LatFix
(phi),
true
);
45
}
46
47
Math::real
Ellipsoid::InverseParametricLatitude
(real beta)
const
{
48
return
_aux.Convert(
AuxLatitude::BETA
,
AuxLatitude::PHI
,
49
Math::LatFix
(beta),
true
);
50
}
51
52
Math::real
Ellipsoid::GeocentricLatitude
(real phi)
const
{
53
return
_aux.Convert(
AuxLatitude::PHI
,
AuxLatitude::THETA
,
54
Math::LatFix
(phi),
true
);
55
}
56
57
Math::real
Ellipsoid::InverseGeocentricLatitude
(real theta)
const
{
58
return
_aux.Convert(
AuxLatitude::THETA
,
AuxLatitude::PHI
,
59
Math::LatFix
(theta),
true
);
60
}
61
62
Math::real
Ellipsoid::RectifyingLatitude
(real phi)
const
{
63
return
_aux.Convert(
AuxLatitude::PHI
,
AuxLatitude::MU
,
64
Math::LatFix
(phi),
true
);
65
}
66
67
Math::real
Ellipsoid::InverseRectifyingLatitude
(real mu)
const
{
68
return
_aux.Convert(
AuxLatitude::MU
,
AuxLatitude::PHI
,
69
Math::LatFix
(mu),
true
);
70
}
71
72
Math::real
Ellipsoid::AuthalicLatitude
(real phi)
const
{
73
return
_aux.Convert(
AuxLatitude::PHI
,
AuxLatitude::XI
,
74
Math::LatFix
(phi),
true
);
75
}
76
77
Math::real
Ellipsoid::InverseAuthalicLatitude
(real xi)
const
{
78
return
_aux.Convert(
AuxLatitude::XI
,
AuxLatitude::PHI
,
79
Math::LatFix
(xi),
true
);
80
}
81
82
Math::real
Ellipsoid::ConformalLatitude
(real phi)
const
{
83
return
_aux.Convert(
AuxLatitude::PHI
,
AuxLatitude::CHI
,
84
Math::LatFix
(phi),
true
);
85
}
86
87
Math::real
Ellipsoid::InverseConformalLatitude
(real chi)
const
{
88
return
_aux.Convert(
AuxLatitude::CHI
,
AuxLatitude::PHI
,
89
Math::LatFix
(chi),
true
);
90
}
91
92
Math::real
Ellipsoid::IsometricLatitude
(real phi)
const
{
93
return
_aux.Convert(
AuxLatitude::PHI
,
AuxLatitude::CHI
,
94
AuxAngle::degrees
(
Math::LatFix
(phi)),
true
).lamd();
95
}
96
97
Math::real
Ellipsoid::InverseIsometricLatitude
(real psi)
const
{
98
return
_aux.Convert(
AuxLatitude::CHI
,
AuxLatitude::PHI
,
99
AuxAngle::lamd
(psi),
true
).degrees();
100
}
101
102
Math::real
Ellipsoid::CircleRadius
(real phi)
const
{
103
// a * cos(beta)
104
AuxAngle
beta(_aux.Convert(
AuxLatitude::PHI
,
AuxLatitude::BETA
,
105
AuxAngle::degrees
(
Math::LatFix
(phi)),
106
true
).normalized());
107
return
_a * beta.
x
();
108
}
109
110
Math::real
Ellipsoid::CircleHeight
(real phi)
const
{
111
// b * sin(beta)
112
AuxAngle
beta(_aux.Convert(
AuxLatitude::PHI
,
AuxLatitude::BETA
,
113
AuxAngle::degrees
(
Math::LatFix
(phi)),
114
true
).normalized());
115
return
_b * beta.
y
();
116
}
117
118
Math::real
Ellipsoid::MeridianDistance
(real phi)
const
{
119
return
_rm * _aux.Convert(
AuxLatitude::PHI
,
AuxLatitude::MU
,
120
AuxAngle::degrees
(
Math::LatFix
(phi)),
121
true
).radians();
122
}
123
124
Math::real
Ellipsoid::MeridionalCurvatureRadius
(real phi)
const
{
125
real v = 1 - _e2 *
Math::sq
(
Math::sind
(
Math::LatFix
(phi)));
126
return
_a * (1 - _e2) / (v * sqrt(v));
127
}
128
129
Math::real
Ellipsoid::TransverseCurvatureRadius
(real phi)
const
{
130
real v = 1 - _e2 *
Math::sq
(
Math::sind
(
Math::LatFix
(phi)));
131
return
_a / sqrt(v);
132
}
133
134
Math::real
Ellipsoid::NormalCurvatureRadius
(real phi, real azi)
const
{
135
real calp, salp,
136
v = 1 - _e2 *
Math::sq
(
Math::sind
(
Math::LatFix
(phi)));
137
Math::sincosd
(azi, salp, calp);
138
return
_a / (sqrt(v) * (
Math::sq
(calp) * v / (1 - _e2) +
Math::sq
(salp)));
139
}
140
141
}
// namespace GeographicLib
Ellipsoid.hpp
Header for GeographicLib::Ellipsoid class.
real
GeographicLib::Math::real real
Definition
Geod3Solve.cpp:25
GeographicLib::AuxAngle
An accurate representation of angles.
Definition
AuxAngle.hpp:51
GeographicLib::AuxAngle::y
Math::real y() const
Definition
AuxAngle.hpp:74
GeographicLib::AuxAngle::x
Math::real x() const
Definition
AuxAngle.hpp:79
GeographicLib::AuxAngle::degrees
Math::real degrees() const
Definition
AuxAngle.hpp:228
GeographicLib::AuxAngle::lamd
Math::real lamd() const
Definition
AuxAngle.hpp:240
GeographicLib::AuxLatitude::XI
@ XI
Definition
AuxLatitude.hpp:151
GeographicLib::AuxLatitude::BETA
@ BETA
Definition
AuxLatitude.hpp:131
GeographicLib::AuxLatitude::MU
@ MU
Definition
AuxLatitude.hpp:141
GeographicLib::AuxLatitude::THETA
@ THETA
Definition
AuxLatitude.hpp:136
GeographicLib::AuxLatitude::CHI
@ CHI
Definition
AuxLatitude.hpp:146
GeographicLib::AuxLatitude::PHI
@ PHI
Definition
AuxLatitude.hpp:126
GeographicLib::Constants::WGS84_f
static T WGS84_f()
Definition
Constants.hpp:118
GeographicLib::Constants::WGS84_a
static T WGS84_a()
Definition
Constants.hpp:112
GeographicLib::Ellipsoid::Area
Math::real Area() const
Definition
Ellipsoid.cpp:39
GeographicLib::Ellipsoid::RectifyingLatitude
Math::real RectifyingLatitude(real phi) const
Definition
Ellipsoid.cpp:62
GeographicLib::Ellipsoid::IsometricLatitude
Math::real IsometricLatitude(real phi) const
Definition
Ellipsoid.cpp:92
GeographicLib::Ellipsoid::CircleHeight
Math::real CircleHeight(real phi) const
Definition
Ellipsoid.cpp:110
GeographicLib::Ellipsoid::AuthalicLatitude
Math::real AuthalicLatitude(real phi) const
Definition
Ellipsoid.cpp:72
GeographicLib::Ellipsoid::NormalCurvatureRadius
Math::real NormalCurvatureRadius(real phi, real azi) const
Definition
Ellipsoid.cpp:134
GeographicLib::Ellipsoid::QuarterMeridian
Math::real QuarterMeridian() const
Definition
Ellipsoid.cpp:36
GeographicLib::Ellipsoid::Ellipsoid
Ellipsoid(real a, real f)
GeographicLib::Ellipsoid::CircleRadius
Math::real CircleRadius(real phi) const
Definition
Ellipsoid.cpp:102
GeographicLib::Ellipsoid::ConformalLatitude
Math::real ConformalLatitude(real phi) const
Definition
Ellipsoid.cpp:82
GeographicLib::Ellipsoid::InverseIsometricLatitude
Math::real InverseIsometricLatitude(real psi) const
Definition
Ellipsoid.cpp:97
GeographicLib::Ellipsoid::InverseParametricLatitude
Math::real InverseParametricLatitude(real beta) const
Definition
Ellipsoid.cpp:47
GeographicLib::Ellipsoid::InverseRectifyingLatitude
Math::real InverseRectifyingLatitude(real mu) const
Definition
Ellipsoid.cpp:67
GeographicLib::Ellipsoid::WGS84
static const Ellipsoid & WGS84()
Definition
Ellipsoid.cpp:31
GeographicLib::Ellipsoid::MeridionalCurvatureRadius
Math::real MeridionalCurvatureRadius(real phi) const
Definition
Ellipsoid.cpp:124
GeographicLib::Ellipsoid::InverseAuthalicLatitude
Math::real InverseAuthalicLatitude(real xi) const
Definition
Ellipsoid.cpp:77
GeographicLib::Ellipsoid::InverseConformalLatitude
Math::real InverseConformalLatitude(real chi) const
Definition
Ellipsoid.cpp:87
GeographicLib::Ellipsoid::TransverseCurvatureRadius
Math::real TransverseCurvatureRadius(real phi) const
Definition
Ellipsoid.cpp:129
GeographicLib::Ellipsoid::ParametricLatitude
Math::real ParametricLatitude(real phi) const
Definition
Ellipsoid.cpp:42
GeographicLib::Ellipsoid::GeocentricLatitude
Math::real GeocentricLatitude(real phi) const
Definition
Ellipsoid.cpp:52
GeographicLib::Ellipsoid::MeridianDistance
Math::real MeridianDistance(real phi) const
Definition
Ellipsoid.cpp:118
GeographicLib::Ellipsoid::InverseGeocentricLatitude
Math::real InverseGeocentricLatitude(real theta) const
Definition
Ellipsoid.cpp:57
GeographicLib::Math::LatFix
static T LatFix(T x)
Definition
Math.hpp:303
GeographicLib::Math::sincosd
static void sincosd(T x, T &sinx, T &cosx)
Definition
Math.cpp:104
GeographicLib::Math::sq
static T sq(T x)
Definition
Math.hpp:209
GeographicLib::Math::sind
static T sind(T x)
Definition
Math.cpp:172
GeographicLib::Math::pi
static T pi()
Definition
Math.hpp:187
GeographicLib::Math::real
double real
Definition
Math.hpp:115
GeographicLib
Namespace for GeographicLib.
Definition
Accumulator.cpp:12
src
Ellipsoid.cpp
Generated by
1.17.0