判断点在多边形范围之内的方法,网上找的,觉得挺有用的,共享一下……
/// <summary> /// 测试点是都在多边形之内 /// </summary> /// <param name="xt">点的X坐标</param> /// <param name="yt">点的Y坐标</param> /// <param name="listPolygon">多边形坐标点集合</param> /// <returns></returns> private bool TestRange(double xt, double yt, List<Tuple<double, double>> listPolygon) { int nCount = listPolygon.Count; int nCross = 0; for (int i = 0; i < nCount; i++) { double tempx1 = listPolygon[i].Item1; double tempx2 = listPolygon[(i + 1) % nCount].Item1; double tempy1 = listPolygon[i].Item2; double tempy2 = listPolygon[(i + 1) % nCount].Item2; // 求解 y=p.y 与 p1p2 的交点 if (tempy1 == tempy2) // p1p2 与 y=p0.y平行 continue; if (yt < Math.Min(tempy1, tempy2)) // 交点在p1p2延长线上 continue; if (yt >= Math.Max(tempy1, tempy2)) // 交点在p1p2延长线上 continue; // 求交点的 X 坐标 double x = (double)(yt - tempy1) * (double)(tempx2 - tempx1) / (double)(tempy2 - tempy1) + tempx1; if (x > xt) nCross++; // 只统计单边交点 } // 单边交点为偶数,点在多边形之外 return (nCross % 2 == 1); }
原文:http://www.cnblogs.com/starpnd/p/3593232.html