To pytanie ma już odpowiedź tutaj:
Point in Polygon aka hit test
C# Point in polygonJak sprawdzić, czy punkt (x, y) jest wewnątrz wielokąta w układzie współrzędnych kartezjańskich?
Biorąc losowy wielokąt formułowane z równań liniowych N w kartezjańskim układzie współrzędnych, czy istnieje standardowa formuła, która jest wykorzystywane do sprawdzania członkostwa w punkcie (x, y)?
Proste rozwiązanie polega na uzyskaniu wszystkich wzorów liniowych i sprawdzeniu, czy punkt X znajduje się poniżej tej linii, powyżej tej linii i na prawo od drugiej linii itp. Prawdopodobnie będzie to jednak żmudne.
Należy zauważyć, że wielokąt może mieć dowolny kształt z dowolną liczbą boków i może być wklęsły lub wypukły.
Dla wygody już dodany te funkcje użytkowe:
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);
}
To było już dyskutowane tutaj, zobacz http://stackoverflow.com/questions/217578/point-in-polygon-aka-hit-test –
ah, blisko! – TheOne