码迷,mamicode.com
首页 > 其他好文 > 详细

非零缠绕规则和奇偶规则

时间:2016-05-25 09:30:48      阅读:592      评论:0      收藏:0      [点我收藏+]

标签:

在图形学中判断一个点是否在多边形内,若多边形不是自相交的,那么可以简单的判断这个点在多边形内部还是外部;若多边形是自相交的,那么就需要根据非零环绕规则和奇-偶规则判断。

判断多边形是否是自相交的:多边形在平面内除顶点外还有其他公共点

内-外测试
    不自交的多边形:多边形仅在顶点处连接,而在平面内没有其他公共点,此时可以直接划分内-外部分。
    自相交的多边形:多边形在平面内除顶点外还有其他公共点,此时划分内-外部分需要采用以下的方法。

    (1)奇-偶规则(Odd-even Rule):奇数表示在多边形内,偶数表示在多边形外

    从任意位置p作一条射线,若与该射线相交的多边形边的数目为奇数,则p是多边形内部点,否则是外部点。

    (2)非零环绕规则Nonzero Winding Number Rule):若环绕数为0表示在多边形内,非零表示在多边形外
    首先使多边形的边变为矢量。将环绕数初始化为零。再从任意位置p作一条射线。当从p点沿射线方向移动时,对在每个方向上穿过射线的边计数,每当多边形的边从右到左穿过射线时,环绕数加1,从左到右时,环绕数减1。处理完多边形的所有相关边之后,若环绕数为非零,则p为内部点,否则,p是外部点。

奇偶规则和线的方向没有关系(逆时针或者顺时针), 非零缠绕规则是根据线的方向来确定的.

 

判断点p是否在多边形内,从点p向外做一条射线(可以任意方向),多边形的边从左到右经过射线时环数减1,多边形的边从右往左经过射线时环数加1,最后环数不为0,即表示在多边形内部。

技术分享

当然,非零绕数规则和奇偶规则会判断出现矛盾的情况,如下图所示,左侧表示用 奇偶规则判断绕环数为2 ,表示在多边形外,所以没有填充。右侧图用非零绕环规则判断出绕数为2,非0表示在多边形内部,所以填充。

技术分享

 

另外一个例子,如下

技术分享

 

非零环绕规则和奇-偶规则(Non-Zero Winding Number Rule&&Odd-even Rule)在iphone中应用

1.CGContextClip  使用非零环绕规则来判断当前路径和裁剪路径的交集。

2.CGContextEOClip 使用奇偶环绕规则来判断当前路径和裁剪路径的交集。

 

非零缠绕规则和奇偶规则

标签:

原文地址:http://www.cnblogs.com/luckychen/p/5525794.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!