随笔 - 833  文章 - 1  评论 - 106  阅读 - 200万

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

复制代码

方法一:适用于凸多边形


适用于凸多边形的算法有很多种,比如计算该点和所有顶点连线的夹角和为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   3D入魔  阅读(101)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2013-03-15 UML序列图总结(转)
2013-03-15 UML类图几种关系的总结(转)
2013-03-15 UML用例图总结
2013-03-15 UML类图关系大全
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示