Non-Zero Winding Number Rule 非零绕组规则

Non-Zero Winding Number Rule 非零绕组规则

该方法常用与判断点是否在多边形或曲线上。

给定一条曲线C和一个点P,构造一条从P点出发射向无穷远的射线。找出所有该射线和曲线的交点,并按如下规则统计绕组数量(winding number):

每一个顺时针方向(曲线从左向右通过射线)上的交点减1,每一个逆时针方向(曲线从右向左通过射线)上的交点加1。如果绕组总数为0,表示该点在曲线外;否则,该点在曲线内。



该规则和奇偶规则的区别如下:




上图中左下角是按照奇偶规则填充效果,右下图是按照非零绕组规则填充的效果:
从P点射出一条指向无穷远的射线,对于奇偶规则,曲线和射线有两个交点(或交点个数为偶数)。因此,按照奇偶规则,点P在曲线之外;对于非零规则,曲线在顺时针方向上被射线分割两次,绕组值为-2,非零。因此P点是在曲线上的点。

下面这个来自Developer-apple的图也很能说明问题:




CGContextFillPath,CGContextClip 使用的是非零绕组规则
CGContextEOClip 使用的是奇偶规则
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值