inPolygonInner method

bool inPolygonInner(
  1. List<Offset> mPoints
)

返回一个点是否在一个多边形区域内

Implementation

bool inPolygonInner(List<Offset> mPoints) {
  int nCross = 0;
  for (int i = 0; i < mPoints.length; i++) {
    Offset p1 = mPoints[i];
    Offset p2 = mPoints[((i + 1) % mPoints.length)];
    if (p1.dy == p2.dy) {
      continue;
    }

    if (dy < min(p1.dy, p2.dy)) {
      continue;
    }
    if (dy >= max(p1.dy, p2.dy)) {
      continue;
    }

    double x = (dy - p1.dy) * (p2.dx - p1.dx) / (p2.dy - p1.dy) + p1.dx;
    if (x > dx) {
      //只统计单边交点
      nCross++;
    }
  }
  return (nCross % 2 == 1);
}