/*!\file IsInPoly.c * \brief: from a contour, determine which nodes are in domain. */ #include #include "../../toolkits/toolkits.h" #include "./exp.h" #include "../shared.h" #ifdef HAVE_CONFIG_H #include #else #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!" #endif /*pnpoly{{{*/ int pnpoly(int npol, double *xp, double *yp, double x, double y, int edgevalue) { int i, j, c = 0; double n1, n2, normp, scalar; /*first test, are they colinear? if yes, is the point in the middle of the segment*/ if (edgevalue != 2 ){ for (i = 0, j = npol-1; i < npol; j = i++) { n1=pow(yp[i]-yp[j],2.0)+pow(xp[i]-xp[j],2.0); n2=pow(y-yp[j],2.0)+pow(x-xp[j],2.0); normp=pow(n1*n2,0.5); scalar=(yp[i]-yp[j])*(y-yp[j])+(xp[i]-xp[j])*(x-xp[j]); if (scalar == normp){ if (n2<=n1){ c = edgevalue; return c; } } } } /*second test : point is neither on a vertex, nor on a side, where is it ?*/ for (i = 0, j = npol-1; i < npol; j = i++) { if ((((yp[i]<=y) && (y