非零环绕原则
来源:互联网 发布:音频合并时间软件 编辑:程序博客网 时间:2024/06/07 05:23
非零环绕原则
canvas绘图中交叉路径的填充问题,依据非零环绕原则,由顺、逆时针穿插次数决定是否填充某一区域
1.非零环绕原则原理
判断有自我交叉情况的路径时,对于路径中的任意给定区域,从该区域内部画一条足够长的线段,使此线段的终点完全落在路径范围之外。然后,初始化计数器为0,每当这条线段与路径上的直线或曲线相交时,就改变计数器的值。如果是与路径的顺时针部分相交,则加1,如果是与路径的逆时针部分相交,则减1。若计数器的最终值不是0,那么此区域就在路径里面,在调用fill方法时,浏览器就会对其进行填充。如果最终值时0,那么此区域就不在路径内部,浏览器就不会对其进行填充
2.应用实例
绘制镂空矩形,内部矩形和外部矩形绘制路径方向相反,内部矩形不会填充
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <title>Title</title> <style> canvas { border: 1px solid #000; } </style></head><body><canvas width="600" height="400" id='cas'></canvas><script> // 获取元素 var cas = document.getElementById( "cas" ); // 获取绘图上下文 var ctx = cas.getContext( '2d' ); // 绘制镂空矩形 // 里面顺时针, 外面逆时针就可以实现 // 外部方形 逆时针 ctx.moveTo( 100, 100 ) ctx.lineTo( 100, 300 ) ctx.lineTo( 300, 300 ) ctx.lineTo( 300, 100 ) ctx.closePath(); // 内部方形 顺时针 ctx.moveTo( 150, 150 ); ctx.lineTo( 250, 150 ); ctx.lineTo( 250, 250 ); ctx.lineTo( 150, 250 ); ctx.closePath(); ctx.fill();</script></body></html>
代码及相关文件详见GitHub主页 绘制镂空矩形-非零环绕原则
https://github.com/Jianxq12/ITcast/tree/master/Canvas
阅读全文
0 0
- 非零环绕原则
- 【canvas】非零环绕原则
- canvas绘图原理 非零环绕原则
- Canvas中的非零环绕规则原理
- canvas — 非零环绕规则
- 奇偶规则VS非零环绕规则
- 奇偶规则和非零环绕数规则
- 【计算机图形学】奇偶规则和非零环绕树规则
- 计算机图形学07一一 多边形理解 理解 奇偶规律 非零环绕数
- 非零环绕数规则和奇-偶规则(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)
- HDOJ1066-数学,N!的非零尾数
- 用lingo只显示非零变量
- 非零绕组规则与奇偶规则
- Pyhon float减法的非零问题
- matlab提取向量中的非零元素
- MDK下设置非零初始化
- vector的实现【C++】
- Python学习笔记2—变量与运算符
- Python基础教程(5)条件、循环和其他语句
- 类、对象、接口
- ASP.NET状态管理之九(会话Session)
- 非零环绕原则
- Kubernetes1.7新特性:支持绕过docker,直接通过containerd管理容器
- hdoj 5532 Almost Sorted Array
- oracle报错: “not a single-group group function”
- 【R】提升R代码运算效率的11个实用方法
- Java 五大框架之间的对比
- leetcode.array--59. Spiral Matrix II
- [agc009c]Division into Two
- 构建工具-----Gradle(二)-----myeclipse 10和myeclipse2015安装gradle插件----其他版本的myeclipse类似