范围判断-射线穿透遇到的问题及解决方案

工作需要判断某个坐标点是否在一系列点所围成的多边形内,使用MOFEI_BIQIGU博主的射线穿透算法,发现一些情况下明明坐标就在范围内,但检测方法的判断结果是false,网上也找不到同样提问或者解答。水平有限浅学一点博主皮毛后,发现坐标点的顺序会影响判断结果,在这里补充下围点的条件:围点列表中相邻项必须按照多边形相邻点来放置,顺时针/逆时针均可。

举个例子,受测点t(6,3),需要判断是否位于a(5,2)、b(8,2)、c(5,4)、d(8,4)所形成的多边形中,如图所示,结果是true:

根据博主的算法, 使用pointList中的顺序,将相邻两点的连接,再检测射线是否穿透该点。但如果pointList相邻两点不是围点,则该线段不应用于检测射线穿透。射线应该与围点所形成的多边形的边线相检测是否相交。

 

证明方式:根据图1,若pointList的顺序为a、b、c、d的错误顺序(b、c不是相邻点),则算法判断结果为false,与实际不符:

 正确检测方式,调用前必须对pointList正确排序,例如使用a、b、d、c的逆时针围点排序,再进行调用,则相连线均为边线,方法执行结果正确:

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值