16 template <
class GeodType>
24 _earth.GenInverse(_lat1, _lon1, lat, lon, _mask, s12, t, t, t, t, t, S12);
28 _crossings += transit(_lon1, lon);
30 _lat1 = lat; _lon1 = lon;
35 template <
class GeodType>
38 real lat, lon, S12, t;
39 _earth.GenDirect(_lat1, _lon1, azi,
false, s, _mask,
40 lat, lon, t, t, t, t, t, S12);
44 _crossings += transitdirect(_lon1, lon);
47 _lat1 = lat; _lon1 = lon;
52 template <
class GeodType>
54 real& perimeter, real& area)
const {
63 perimeter = _perimetersum();
66 _earth.GenInverse(_lat1, _lon1, _lat0, _lon0, _mask,
67 s12, t, t, t, t, t, S12);
68 perimeter = _perimetersum(s12);
71 int crossings = _crossings + transit(_lon1, _lon0);
73 tempsum += (tempsum < 0 ? 1 : -1) * _area0/2;
80 if (tempsum > _area0/2)
82 else if (tempsum <= -_area0/2)
85 if (tempsum >= _area0)
94 template <
class GeodType>
96 bool reverse,
bool sign,
97 real& perimeter, real& area)
const 105 perimeter = _perimetersum();
106 real tempsum = _polyline ? 0 : _areasum();
107 int crossings = _crossings;
108 unsigned num = _num + 1;
109 for (
int i = 0; i < (_polyline ? 1 : 2); ++i) {
111 _earth.GenInverse(i == 0 ? _lat1 : lat, i == 0 ? _lon1 : lon,
112 i != 0 ? _lat0 : lat, i != 0 ? _lon0 : lon,
113 _mask, s12, t, t, t, t, t, S12);
117 crossings += transit(i == 0 ? _lon1 : lon,
118 i != 0 ? _lon0 : lon);
126 tempsum += (tempsum < 0 ? 1 : -1) * _area0/2;
133 if (tempsum > _area0/2)
135 else if (tempsum <= -_area0/2)
138 if (tempsum >= _area0)
140 else if (tempsum < 0)
147 template <
class GeodType>
149 bool reverse,
bool sign,
150 real& perimeter, real& area)
const {
157 unsigned num = _num + 1;
158 perimeter = _perimetersum() + s;
162 real tempsum = _areasum();
163 int crossings = _crossings;
165 real lat, lon, s12, S12, t;
166 _earth.GenDirect(_lat1, _lon1, azi,
false, s, _mask,
167 lat, lon, t, t, t, t, t, S12);
169 crossings += transitdirect(_lon1, lon);
171 _earth.GenInverse(lat, lon, _lat0, _lon0, _mask, s12, t, t, t, t, t, S12);
174 crossings += transit(lon, _lon0);
178 tempsum += (tempsum < 0 ? 1 : -1) * _area0/2;
185 if (tempsum > _area0/2)
187 else if (tempsum <= -_area0/2)
190 if (tempsum >= _area0)
192 else if (tempsum < 0)
static T AngNormalize(T x)
unsigned TestEdge(real azi, real s, bool reverse, bool sign, real &perimeter, real &area) const
unsigned TestPoint(real lat, real lon, bool reverse, bool sign, real &perimeter, real &area) const
#define GEOGRAPHICLIB_EXPORT
void AddEdge(real azi, real s)
unsigned Compute(bool reverse, bool sign, real &perimeter, real &area) const
Namespace for GeographicLib.
void AddPoint(real lat, real lon)
Header for GeographicLib::PolygonAreaT class.
static T AngNormalize2(T x)