Definition at line 282 of file lwalgorithm.c.
283{
284 int cn = 0;
285 uint32_t i;
288
291 if ( memcmp(first, last,
sizeof(
POINT2D)) )
292 {
293 lwerror(
"pt_in_ring_2d: V[n] != V[0] (%g %g != %g %g)",
294 first->
x, first->
y, last->
x, last->
y);
296
297 }
298
299 LWDEBUGF(2,
"pt_in_ring_2d called with point: %g %g", p->
x, p->
y);
300
301
302
304 for (i=0; i<ring->
npoints-1; i++)
305 {
306 double vt;
308
309
310 if
311 (
312
313 ((v1->
y <= p->
y) && (v2->
y > p->
y))
314
315 || ((v1->
y > p->
y) && (v2->
y <= p->
y))
316 )
317 {
318
319 vt = (double)(p->
y - v1->
y) / (v2->
y - v1->
y);
320
321
322 if (p->
x < v1->
x + vt * (v2->
x - v1->
x))
323 {
324
325 ++cn;
326 }
327 }
328 v1 = v2;
329 }
330
331 LWDEBUGF(3,
"pt_in_ring_2d returning %d", cn&1);
332
333 return (cn&1);
334}
#define LWDEBUGF(level, msg,...)
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
static const POINT2D * getPoint2d_cp(const POINTARRAY *pa, uint32_t n)
Returns a POINT2D pointer into the POINTARRAY serialized_ptlist, suitable for reading from.
References getPoint2d_cp(), LW_FALSE, LWDEBUGF, lwerror(), POINTARRAY::npoints, POINT2D::x, and POINT2D::y.