У этого вопроса уже есть ответ:
Точка в полигоне aka hit test
С# Точка в полигоне
Учитывая случайный многоугольник, сформулированный с помощью N линейных уравнений в декартовой системе координат, существует ли какая-либо стандартная формула, которая используется для проверки принадлежности точки (x, y)?
Простое решение состоит в том, чтобы получить все формулы линии и проверить, находится ли точка X ниже этой строки, над этой линией и справа от другой линии и т.д. Но это, вероятно, будет утомительным.
Следует отметить, что многоугольник может иметь любую форму с любым числом сторон и может быть вогнутым или выпуклым.
Для удобства я уже добавил эти служебные функции:
float slope(CGPoint p1, CGPoint p2)
{
return (p2.y - p1.y) / (p2.x - p1.x);
}
CGPoint pointOnLineWithY(CGPoint p, float m, float y)
{
float x = (y - p.y)/m + p.x;
return CGPointMake(x,y);
}
CGPoint pointOnLineWithX(CGPoint p, float m, float x)
{
float y = m*(x - p.x) + p.y;
return CGPointMake(x, y);
}