C# 判断点是否在多边形的内部-射线法判断是否有交点的分析

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

综上:
在这里插入图片描述
能穿过线段的条件就是异或
在这里插入图片描述
在这里插入图片描述
这样就好办了:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值