16 template <
class GeodType>
25 _earth.GenInverse(_lat1, _lon1, lat, lon, _mask, s12, t, t, t, t, t, S12);
29 _crossings += transit(_lon1, lon);
31 _lat1 = lat; _lon1 = lon;
36 template <
class GeodType>
39 real lat, lon, S12, t;
40 _earth.GenDirect(_lat1, _lon1, azi,
false, s, _mask,
41 lat, lon, t, t, t, t, t, S12);
45 _crossings += transitdirect(_lon1, lon);
48 _lat1 = lat; _lon1 = lon;
53 template <
class GeodType>
55 real& perimeter, real& area)
const {
64 perimeter = _perimetersum();
67 _earth.GenInverse(_lat1, _lon1, _lat0, _lon0, _mask,
68 s12, t, t, t, t, t, S12);
69 perimeter = _perimetersum(s12);
72 int crossings = _crossings + transit(_lon1, _lon0);
74 tempsum += (tempsum < 0 ? 1 : -1) * _area0/2;
81 if (tempsum > _area0/2)
83 else if (tempsum <= -_area0/2)
86 if (tempsum >= _area0)
95 template <
class GeodType>
97 bool reverse,
bool sign,
98 real& perimeter, real& area)
const 106 perimeter = _perimetersum();
107 real tempsum = _polyline ? 0 : _areasum();
108 int crossings = _crossings;
109 unsigned num = _num + 1;
110 for (
int i = 0; i < (_polyline ? 1 : 2); ++i) {
112 _earth.GenInverse(i == 0 ? _lat1 : lat, i == 0 ? _lon1 : lon,
113 i != 0 ? _lat0 : lat, i != 0 ? _lon0 : lon,
114 _mask, s12, t, t, t, t, t, S12);
118 crossings += transit(i == 0 ? _lon1 : lon,
119 i != 0 ? _lon0 : lon);
127 tempsum += (tempsum < 0 ? 1 : -1) * _area0/2;
134 if (tempsum > _area0/2)
136 else if (tempsum <= -_area0/2)
139 if (tempsum >= _area0)
141 else if (tempsum < 0)
148 template <
class GeodType>
150 bool reverse,
bool sign,
151 real& perimeter, real& area)
const {
158 unsigned num = _num + 1;
159 perimeter = _perimetersum() + s;
163 real tempsum = _areasum();
164 int crossings = _crossings;
166 real lat, lon, s12, S12, t;
167 _earth.GenDirect(_lat1, _lon1, azi,
false, s, _mask,
168 lat, lon, t, t, t, t, t, S12);
170 crossings += transitdirect(_lon1, lon);
172 _earth.GenInverse(lat, lon, _lat0, _lon0, _mask, s12, t, t, t, t, t, S12);
175 crossings += transit(lon, _lon0);
179 tempsum += (tempsum < 0 ? 1 : -1) * _area0/2;
186 if (tempsum > _area0/2)
188 else if (tempsum <= -_area0/2)
191 if (tempsum >= _area0)
193 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.