C# 判断点是否在多边形的内部-射线法判断是否有交点的分析
最近在做关于点在多边形内部的判断,有很多大佬都讲过使用射线法,但是涉及到细节地方没有详细的分析,本文只针对分析是否穿过其中一条边的情况。
关于点是否在轮廓之内,最多的是判断在是否穿过某一顶点的情况,可以列出如下思路:(水平向左 射线)
1、判断点是否在图形范围区间
2、判断点是否在当前直线Y轴范围区间
3、判断点射线跟当前直线的关系
(1)点在线段上-----在图形上,直接return true
(2)线段是水平的 —此种情况不做计算
(3)点射线经过线段的一个端点 分两种情况一、穿过的是线段的最高点,
计数加一,穿过的是线段的最低点,忽略
4、点射线穿过线段,并且没有穿过端点
(1)判断点的X坐标是否在线段的区间,小于直接忽略,大于就计数加一
(2)点在区间之内
根据4个象限分析情况
第一象限:
Kcp1 > Kp1p2, p2.y-p1.y>0;
第二象限
Kp1c>kp1p2, p2.y-p1.y>0
第三象限
Kcp1<kp1p2, p2.y-p1.y<0
第四象限
Kcp1<Kp1p2,p2.y-p1.y<0
综上:
能穿过线段的条件就是异或
这样就好办了: