判断一个点是否在多边形内部

55 阅读1分钟
export const isPointInPolygon = (point, polygon) => {
  let count = 0;
  const length = polygon.length;

  for (let i = 0; i < length; i++) {
    const p1 = polygon[i];
    const p2 = polygon[(i + 1) % length];
    if (
      (p1.yAxis <= point.yAxis && point.yAxis < p2.yAxis) ||
      (p2.yAxis <= point.yAxis && point.yAxis < p1.yAxis)
    ) {
      const intersectX =
        ((point.yAxis - p1.yAxis) * (p2.xAxis - p1.xAxis)) /
          (p2.yAxis - p1.yAxis) +
        p1.xAxis;

      if (point.xAxis < intersectX) {
        count++;
      }
    }
  }

  return count % 2 === 1;
};