Sometimes speed is an issue if there are many polygons and or many points to check. There is an excellent reference on this issue under http://erich.realtimerendering.com/ptinpoly/ with the main conclusion that the angle summation algorithm should be avoided if speed is the objective. Below my Mathematica implementation of the point in polygon problem which appears to be roughly 5x faster than the inPolyQ[] algorithm posted above. Test case - use triangle poly = {{-1, 0}, {0, 1}, {1, 0}}; My code implementation inPoly2[poly_, pt_] := Module[{c, nvert,i,j}, nvert = Length[poly]; c = False; For[i = 1, i <= nvert, i++, If[i != 1, j = i - 1, j = nvert]; If[( ((poly[[i, 2]] > pt[[2]]) != (poly[[j, 2]] > pt[[2]])) && (pt[[ 1]] < (poly[[j, 1]] - poly[[i, 1]])*(pt[[2]] - poly[[i, 2]])/(poly[[j, 2]] - poly[[i, 2]]) + poly[[i, 1]])), c = ! c]; ]; c ]; An the timing output testing on point {0,0.99} Timing[t1 = Table[inPolyQ[poly, 0, 0.99], {10000}];] Timing[t2 = Table[inPoly2[poly, 0, 0.99], {10000}];] Out[115]= {0.062, Null} Out[116]= {0.016, Null}