这个问题在这里已经有了答案:
Point in Polygon aka hit test
C# Point in polygon
给定一个在笛卡尔坐标系中用 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);
}