nested.js 678 B

123456789101112131415161718
  1. // ray-casting algorithm based on
  2. // https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html
  3. module.exports = function pointInPolygonNested (point, vs, start, end) {
  4. var x = point[0], y = point[1];
  5. var inside = false;
  6. if (start === undefined) start = 0;
  7. if (end === undefined) end = vs.length;
  8. var len = end - start;
  9. for (var i = 0, j = len - 1; i < len; j = i++) {
  10. var xi = vs[i+start][0], yi = vs[i+start][1];
  11. var xj = vs[j+start][0], yj = vs[j+start][1];
  12. var intersect = ((yi > y) !== (yj > y))
  13. && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
  14. if (intersect) inside = !inside;
  15. }
  16. return inside;
  17. };