您的位置:首页 > 其它

判断点是否在多边形内

2016-11-07 00:00 411 查看
摘要: 使用射线法(奇偶法)和 转角法判断

射线法(奇偶法)

只适用于简单多边形(没有自相交点)。从P点开始的射线穿过多边形边界次数,多边形的边界将多边形分为内部和外部。如果是偶数在多边形外部,否则奇数在多边形内部。如下图所示Pin为内部点,Qout为外部点,n为通过边界次数。



另如果射线经过顶点的时候,一个标准的预定是在左边界或下边界的点认定多边形内部,在右边界或上边界的点认为在多边形外部。例如两个不同多边形共享一个公共边,那么在这条边上点会在一个多边形内部而在另一个多边形外部。这样可以避免了在计算机图形显示中会出现的一些问题。

穿越规则测试规则:

1. 方向向上的边包括其开始点,不包括其终止点。

2.方向向下的边不包括其开始点,包括其终止点。

3.水平边不参与穿越测试(前提是选择水平的、向点P右边延伸的射线)。

4.射线和多边形的边焦点必须严格在P点右侧(规定了多边形右边边界上的点在多边形外部,在左边边界上的点在多边形内部)。

满足以上规则计算2个线段是否相交

转角法

转角法非常简单:按照多边形顶点逆时针顺序,从P点到顶点Vi分别做连线,其中αi为Vi和Vi+1之间的夹角。如果α角度逆时针为正,顺时针为负,这样所有到顶点做连线之间夹角和为(环绕数)0,这点P在多边形外部,否则在内部。



如上图所示P点到各个顶点连线夹角和为0,即P在多边形外部。



如上图所示,角度之和 > 0 为在多边形内部。

环绕数推导公式 wn = 1/2π(α0 + α1 + ...... + αi) i ∈[0, n-1] 推导 wn = 1/2π(PVi*PVi+1/|PVi||PVi+1|) i ∈ [0, n-1]。该公式arccos比较耗时。

另两种判断方法

1. 从P点向右做射线R,如果边从射线R下方跨到上方,那么穿越+1,如果从上方跨到下方,则是-1。最终和为wn环绕数。如下图所示:



2. 这种方法不必去计算射线和边的交点,但需要判断点P是否在边的左边,但对于方向向上和向下的边的判断与是否在左边规则不同。对于方向向上的边,如果穿过设想到达P的右边,那么P是在边的左侧;方向向下的边如果穿越射线的正方向,那么P在边的右边(意思是说判断点P与边的关系,而不是相对坐标系内位置)。



如上图a 和图b中P点都是位于射线左侧,但是向上和向下方向的边P点位于不同位置。

伪代码如下:需要注意的是同样需要准守射线法中1、2、4项规则。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息