pointInPolygon function

bool pointInPolygon(
  1. Vector2 point,
  2. List<Vector2> polygon
)

Whether point is inside the polygon defined by polygon.

Uses the even-odd rule, so it works with concave polygons as well.

Implementation

bool pointInPolygon(Vector2 point, List<Vector2> polygon) {
  if (polygon.length < 3) {
    return false;
  }

  var inside = false;
  for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
    final xi = polygon[i].x;
    final yi = polygon[i].y;
    final xj = polygon[j].x;
    final yj = polygon[j].y;

    final intersects = (yi > point.y) != (yj > point.y) &&
        point.x < (xj - xi) * (point.y - yi) / (yj - yi) + xi;
    if (intersects) {
      inside = !inside;
    }
  }
  return inside;
}