c语言实现点在多边形内部,判断点在多边形内算法的C++实现

本文介绍了使用射线法判断点是否在多边形内的算法,包括算法思路和具体C++实现。通过计算射线与多边形边的交点数来判断,奇数个交点表示点在内部,偶数个在外部。文中还讨论了特殊情况的处理,并提供了代码示例。
摘要由CSDN通过智能技术生成

[TOC]

1. 算法思路

判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况。该算法的思路很简单,就是从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。如下图所示:

8175b2dc78aa69f7125f45e3f442e8da.png 算法步骤如下:

已知点point(x,y)和多边形Polygon的点有序集合(x1,y1;x2,y2;….xn,yn;);

以point为起点,以无穷远为终点作平行于X轴的射线line(x,y; -∞,y);循环取得多边形的每一条边side(xi,yi;xi+1,yi+1): 1). 判断point(x,y)是否在side上,如果是,则返回true。 2). 判断line与side是否有交点,如果有则count++。

判断交点的总数count,如果为奇数则返回true,偶数则返回false。

2. 具体实现

在具体的实现过程中,其实还有一个极端情况需要注意:当射线line经过的是多边形的顶点时,判断就会出现异常情况。针对这个问题,可以规定线段的两个端点,相对于另一个端点在上面的顶点称为上端点,下面是下端点。如果射线经过上端点,count加1,如果经过下端点,则count不必加1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值