inPolygonBorder method

bool inPolygonBorder(
  1. List<Offset> mPoints
)

返回一个点是否在一个多边形边界上

Implementation

bool inPolygonBorder(List<Offset> mPoints) {
  for (int i = 0; i < mPoints.length; i++) {
    Offset p1 = mPoints[i];
    Offset p2 = mPoints[((i + 1) % mPoints.length)];
    if (dy < min(p1.dy, p2.dy)) {
      continue;
    }
    if (dy > max(p1.dy, p2.dy)) {
      continue;
    }
    if (p1.dy == p2.dy) {
      double minX = min(p1.dx, p2.dx);
      double maxX = max(p1.dx, p2.dx);
// point在水平线段p1p2上,直接return true
      if ((dy == p1.dy) && (dx >= minX && dx <= maxX)) {
        return true;
      }
    } else {
      // 求解交点
      double x = (dy - p1.dy) * (p2.dx - p1.dx) / (p2.dy - p1.dy) + p1.dx;
      if (x == dx) {
        return true;
      }
    }
  }
  return false;
}