奇偶规则和非零缠绕规则
来源:互联网 发布:win8打不开软件怎么办 编辑:程序博客网 时间:2024/04/19 21:34
在图形学中判断一个点是否在多边形内,若多边形不是自相交的,那么可以简单的判断这个点在多边形内部还是外部;若多边形是自相交的,那么就需要根据非零缠绕规则和奇-偶规则判断。
判断多边形是否是自相交的:多边形在平面内除顶点外还有其他公共点
内-外测试
不自交的多边形:多边形仅在顶点处连接,而在平面内没有其他公共点,此时可以直接划分内-外部分。
自相交的多边形:多边形在平面内除顶点外还有其他公共点,此时划分内-外部分需要采用以下的方法。
(1)奇-偶规则(Odd-even Rule):奇数表示在多边形内,偶数表示在多边形外
从任意位置p作一条射线,若与该射线相交的多边形边的数目为奇数,则p是多边形内部点,否则是外部点。
(2)非零缠绕规则(Nonzero Winding Number Rule):若环绕数为0表示在多边形内,非零表示在多边形外
首先使多边形的边变为矢量。将环绕数初始化为零。再从任意位置p作一条射线。当从p点沿射线方向移动时,对在每个方向上穿过射线的边计数,每当多边形的边从右到左穿过射线时,环绕数加1,从左到右时,环绕数减1。处理完多边形的所有相关边之后,若环绕数为非零,则p为内部点,否则,p是外部点。
参考[1]中例子如下,
判断点p是否在多边形内,从点p向外做一条射线(可以任意方向),多边形的边从左到右经过射线时环数减1,多边形的边从右往左经过射线时环数加1,最后环数不为0,即表示在多边形内部。
当然,非零缠绕规则和奇偶规则会判断出现矛盾的情况,如下图所示,左侧表示用 奇偶规则判断绕环数为2 ,表示在多边形外,所以没有填充。右侧图用非零缠绕规则判断出绕数为2,非0表示在多边形内部,所以填充。
另外一个例子,如下
参考
[1]http://www.cs.rit.edu/~icss571/filling/alt_parity.html
[2]http://cs.hust.edu.cn/webroot/courses/csgraphics/jiaocai.php?bookpage=5_c_c
[3]http://en.wikipedia.org/wiki/Nonzero-rule
- 奇偶规则和非零缠绕规则
- 奇偶规则和非零环绕数规则
- 【计算机图形学】奇偶规则和非零环绕树规则
- 非零绕组规则与奇偶规则
- 奇偶规则VS非零环绕规则
- 非零绕组规则与奇偶规则
- Canvas中的非零环绕规则原理
- canvas — 非零环绕规则
- 奇偶放规则
- 非零环绕数规则和奇-偶规则(Non-Zero Winding Number Rule&&Odd-even Rule)
- 非零环绕数规则和奇-偶规则(Non-Zero Winding Number Rule And Odd-even Rule)
- 非零环绕数规则和奇-偶规则(Non-Zero Winding Number Rule&&Odd-even Rule)
- Graphic 矢量图形的区域填充与缠绕规则
- Non-Zero Winding Number Rule 非零绕组规则
- 游戏的现实规则和非现实规则
- 零基础学python-3.1 python基本规则和语句
- 命名规则(零)-Unfinished
- 规则
- Nginx 负载均衡模块 ngx_http_upstream_module 详述
- thinkphp页面重定向
- 关于eclipse无法查看代码debug时
- google 地图开发记录
- 生产与消费的wait和notify位置问题
- 奇偶规则和非零缠绕规则
- c++==简介及面向对象特点(1)
- windows下MongoDB的安装
- 最大子序列和问题
- 机器学习笔记 - 线性模型与线形回归
- linux网络设备驱动
- jdbc新增
- How to run Conda?
- [翻译]GMapping的介绍