pointInPolygon function
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;
}