非零环绕数规则和奇-偶规则(Non-Zero Winding Number Rule And Odd-even Rule)

本文介绍在图形学中判断一个点是否位于多边形内的两种主要方法:奇-偶规则和非零环绕数规则。对于自相交与非自相交多边形,这两种方法提供了不同的解决方案。此外,还探讨了这些方法在iOS开发中的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在图形学中判断一个点是否在多边形内的方法:

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

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

内外部分的划分:

  • 不自交的多边形:多边形仅在顶点处连接,而在平面内没有其他公共点,此时可以直接划分内-外部分。
  • 自相交的多边形:多边形在平面内除顶点外还有其他公共点,此时划分内-外部分需要采用以下的方法:
    <1> 奇-偶规则(Odd-even Rule):奇数表示在多边形内,偶数表示在多边形外

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

<2> 非零环绕数规则(Nonzero Winding Number Rule):若环绕数为0表示在多边形内,非零表示在多边形外

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

例子如图:

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

非零环绕数规则和奇-偶规则(Non-Zero Winding Number Rule&&Odd-even Rule)在iOS开发中的应用:
1. CGContextClip 使用非零环绕数规则来判断当前路径和裁剪路径的交集。
2. CGContextEOClip 使用奇偶环绕数规则来判断当前路径和裁剪路径的交集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值