基本算法就是从点出发一条任意角度的射线,如果与多边形相交奇数次就在多边形内,偶数次就在多边形外。
当然还得考虑一些特殊情况,比如正好和顶点相交。
直接上代码,(注意:本人不对该代码做任何品质保证,请照搬同学好好理解其内涵,并自行测试使用)
- C#代码
static bool PointInPolygon(PointF p, PointF[] poly) {
PointF p1, p2;
bool inside = false;
PointF oldPoint = poly[poly.Length-1];
for (int i = 0; i < poly.Length; i++) {
PointF newPoint = poly[i];
if (newPoint.X > oldPoint.X) { p1 = oldPoint; p2 = newPoint; }
else { p1 = newPoint; p2 = oldPoint; }
if ((p1.X<p.X) == (p.X<=p2.X) && (p.Y-p1.Y)*(p2.X-p1.X) < (p2.Y-p1.Y)*(p.X-p1.X