GIS算法:2_点是否在多边形内

运用射线法计算点是否落在多边形内。

红点是要计算的点,通过该点引一条水平线,计算多边形各边与该水平线的交点(蓝点),如果红点两侧的射线与多边形各边的交点数都是奇数,那么红点在多边形内,反之不在。

 
计算红点引出的水平射线与多边形的边有无交点,可以简化为与线段有无交点。

如图:

计算红点引出的射线与蓝线段是否相交,即红点引出的射线与蓝线段的焦点(A,y)是否在蓝线段上,而非蓝线段两头的引线上。

即y值在yi和yi+1之间,并且A值在xi和xi+1之间。

根据几何函数关系可知:(yi-y)/(yi-yi+1)=(A-xi)/(xi+1-xi),求得A=( y -yi)/( yi+1-yi)* (xi+1-xi)+ xi

代码思想如下:

  1. 先判断y值是否在yi和yi+1之间。
  2. 然后判断A值是否在xi和xi+1之间
  3. 再判断A值大于还是小于x值,以此判断是左边交点,还是右边交点。
  4. 左边交点nl,右边交点nr,如果满足1和2,且A值小于x值,那么左边交点nl+1,;如果满足1和2,且A值大于x值,那么右边交点nr+1。

另注意,如图所示,从红点引出的水平线,与多边形的交点在拐点上,只能算作与一边相交。

即红点的坐标(x,y)。

xi <=x< xi+1 或xi >=x> xi+1 AND yi <=y< yi+1 或yi >=y> yi+1

即相接两边,如果交点在线段端点上,那么这个交点要么算在第一个线段上,要么算在第二个线段上,不能两个线段都算。

为了逻辑清晰,线段(i,i+1),等号=只放在i点上,这样的话,多边形每个拐点都能遍历到,且每个拐点只计算一次。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值