PIP(): crossing number test for a point in a polygon input: P = a point, V[] = vertex points of a polygon V[n+1] with V[n]=V[0].
- Returns
- 0 = outside, 1 = inside
Definition at line 415 of file shp2pgsql-core.c.
416{
417 int cn = 0;
418 int i;
419
420
421 for (i = 0; i < n-1; i++)
422 {
423 if (((V[i].y <= P.
y) && (V[i + 1].y > P.
y))
424 || ((V[i].y > P.
y) && (V[i + 1].y <= P.
y)))
425 {
426 double vt = (float)(P.
y - V[i].y) / (V[i + 1].
y - V[i].
y);
427 if (P.
x < V[i].x + vt * (V[i + 1].x - V[i].x))
428 ++cn;
429 }
430 }
431
432 return (cn&1);
433}
References struct_ring::n, struct_point::x, and struct_point::y.
Referenced by FindPolygons().