算法:
let inside = false; // flag
let len = poly.length;
let x1, y1, x2, y2;
for (let i = 0, j = len - 2; i < len; j = i, i += 2) {
x1 = poly[i];
y1 = poly[i + 1];
x2 = poly[j];
y2 = poly[j + 1];
if (y < y2) {
if (y1 <= y) {
if ((y - y1) * (x2 - x1) > (x - x1) * (y2 - y1)) inside = (!inside);
}
} else if (y < y1) {
if ((y - y1) * (x2 - x1) < (x - x1) * (y2 - y1)) inside = (!inside);
}
}
}
poly的结构:[x1, y1, x2, y2, x3, y3, ...]
这个(y - y1) (x2 - x1) > (x - x1) (y2 - y1)到底在判断什么?
变形一下(y-y1)/(x-x1) > (y2-y1)/(x2-x1)
你看像不像在比较斜率