Definition at line 297 of file lwalgorithm.c.
298{
299 int cn = 0;
300 uint32_t i;
303
306 if ( memcmp(first, last,
sizeof(
POINT2D)) )
307 {
308 lwerror(
"pt_in_ring_2d: V[n] != V[0] (%g %g != %g %g)",
309 first->
x, first->
y, last->
x, last->
y);
311
312 }
313
314 LWDEBUGF(2,
"pt_in_ring_2d called with point: %g %g", p->
x, p->
y);
315
316
317
319 for (i=0; i<ring->
npoints-1; i++)
320 {
321 double vt;
323
324
325 if
326 (
327
328 ((v1->
y <= p->
y) && (v2->
y > p->
y))
329
330 || ((v1->
y > p->
y) && (v2->
y <= p->
y))
331 )
332 {
333
334 vt = (double)(p->
y - v1->
y) / (v2->
y - v1->
y);
335
336
337 if (p->
x < v1->
x + vt * (v2->
x - v1->
x))
338 {
339
340 ++cn;
341 }
342 }
343 v1 = v2;
344 }
345
346 LWDEBUGF(3,
"pt_in_ring_2d returning %d", cn&1);
347
348 return (cn&1);
349}
#define LWDEBUGF(level, msg,...)
void void lwerror(const char *fmt,...) __attribute__((format(printf
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.