求点是否在任意多边形范围内[转]


方法一:适用于凸多边形


适用于凸多边形的算法有很多种,比如计算该点和所有顶点连线的夹角和为360度,面积法,向量法等


方法二:适用于任意多边形(凸多边形和凹多边形)


以该点为端点的任意射线与多边形的交点个数为偶数则在多边形范围外,反之则在多边形范围内

private bool IsPointInRange(double[] point, List<double[]> coorData)
        {
            int i = 0;
            int j = coorData.Count - 1;
            int c = 0;
            for (; i < coorData.Count; j = i++)
            {
                if (((coorData[i][1] > point[1]) != (coorData[j][1] > point[1]))
                    && (point[0] < (coorData[j][0] - coorData[i][0]) * (point[1] - coorData[i][1]) / (coorData[j][1] - coorData[i][1]) + coorData[i][0]))
                {
                    c = 1 + c;
                }
            }

            if (c % 2 == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

 

posted on 2022-03-15 09:20  3D入魔  阅读(97)  评论(0编辑  收藏  举报