首先提下非零环绕原则,如下图:

这里如上面的图,这个非零环绕和画图的方向有关!

如+1要染色的地方,在这里找一个点射向外边,如果相交的地方画图方向和射线方向一样就是+1,要染色。

+2那个地方,也是那样。

0为不染色,因为一个+1一个-1,只要不是0就要染色,这就是非零环绕原则。

下面给出两个实例

程序运行截图如下:

源码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><canvas id="canvas" style="border: 1px solid #aaa; display: block; margin: 50px auto;">当前浏览器不支持canvas
</canvas><script>window.onload = function(){let canvas = document.getElementById("canvas");canvas.width = 800;canvas.height = 800;let context = canvas.getContext("2d");context.beginPath();context.arc(400, 400, 300, 0, Math.PI * 2, false);context.arc(400, 400, 150, 0, Math.PI * 2, true);context.fillStyle = "#058";context.shadowColor = "gray";context.shadowOffsetX = 10;context.shadowOffsetY = 10;context.shadowBlur = 10;context.fill();}</script></body>
</html>

第二个实例运行截图如下;

源码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><canvas id="canvas" style="border: 1px solid #aaa; display: block; margin: 50px auto;">当前浏览器不支持canvas
</canvas><script>window.onload = function(){let canvas = document.getElementById("canvas");canvas.width = 800;canvas.height = 800;let context = canvas.getContext("2d");context.beginPath();context.rect(100, 100, 600, 600);pathRect(context, 200, 200, 400, 200);pathTriangle(context, 300, 450, 150, 650, 450, 650);context.arc(550, 550, 100, 0, Math.PI * 2, true);context.closePath();context.fillStyle = "#058";context.shadowColor = "gray";context.shadowOffsetX = 10;context.shadowOffsetY = 10;context.shadowBlur = 10;context.fill();}function pathRect(cxt, x, y, width, height){cxt.moveTo(x, y);cxt.lineTo(x, y + height);cxt.lineTo(x + width, y + height);cxt.lineTo(x + width, y);cxt.lineTo(x, y);}function pathTriangle(cxt, x1, y1, x2, y2, x3, y3){cxt.moveTo(x1, y1);cxt.lineTo(x2, y2);cxt.lineTo(x3, y3);cxt.lineTo(x1, y1);}</script></body>
</html>

canvas笔记-非零环绕原则及剪纸实例相关推荐

  1. 填充路径时使用的非零环绕规则

    如果当前路径是循环的,或者包含多个相交的子路径,那么Canvas的绘图环境变量就必须判断,当fill()方法被调用时,应该如何对当前路径进行填充. Canvas在填充互相有交叉的路径时,使用非零环绕规 ...

  2. svpwm矢量控制电机相电压波形_SVPWM调制中的6个非零基础电压矢量的幅值到底是Udc还是2/3Udc ? 电压利用率为什么是1?...

    16年抛出来的一个问题,无意间又看到了,感觉哪怕是个小问题,但是能去伪存真,能为更多认真的人所有用,那也是在改变世界 其实也是因为看到这位兄台的留言,更加激发了我要写这篇文章:隐隐的感受,其实世界上, ...

  3. 鸟哥的LINUX私房菜 基础学习篇 读书笔记 -- 第零章 计算机概论 (一)

    鸟哥的LINUX私房菜 基础学习篇 读书笔记 -- 第零章 计算机概论 (一) 第零章 计算机概论 0.1 电脑:辅助人脑的好工具 0.1.1 计算机硬件五大组成部分 0.1.2 一切设计的起点: C ...

  4. CSP 202109-2 非零段划分

    题目链接:非零段划分 题目描述 A1,A2,⋯,An 是一个由 n 个自然数(非负整数)组成的数组.我们称其中 Ai,⋯,Aj 是一个非零段,当且仅当以下条件同时满足: 1≤i≤j≤n: 对于任意的整 ...

  5. 一种递归式的非零自然数全分解方法

    一种递归式的非零自然数全分解方法   在开始讲之前,首先介绍一下这个方法针对的问题背景:一个非零自然数(1,2,3,--)既不重复也不遗漏地任意分解为非零自然数(如:3=1+1+1=1+2),我在本篇 ...

  6. 最简单太阳系H5动画canvas详解 零基础可入

    最简单太阳系H5动画canvas详解 零基础可入 最终结果:(实际为动画效果,金星绕轨道转动) 页面准备/html 要使用canvas,需要首先在页面中要绘制的位置放入canvas标签元素,在后期的绘 ...

  7. 【 MATLAB 】any 函数介绍(确定是否有任意数组元素非零)

    any Determine if any array elements are nonzero(确定是否有任何数组元素非零) Syntax B = any(A) B = any(A,dim) Desc ...

  8. Keil MDK下如何设置非零初始化变量(转)

    源:Keil MDK下如何设置非零初始化变量 一些工控产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位而重启现场设备.而keil mdk在默 ...

  9. [物理学与PDEs]第3章习题1 只有一个非零分量的磁场

    设磁场 ${\bf H}$ 只有一个非零分量, 试证明 $$\bex ({\bf H}\cdot\n){\bf H}={\bf 0}. \eex$$ 证明: 不妨设 ${\bf H}=(0,0,H_3 ...

最新文章

  1. 编程语言python培训-Python是什么样的编程语言?
  2. Uncaught (in promise) DOMException 报错
  3. (7)Microsoft office Word 2013版本操作入门_常用技巧
  4. 查看oracle会话空闲时间,使用Oracle PROFILE控制会话空闲时间
  5. 深入C++的new(2011-11-15 15:08 )
  6. 动态心电图信息存储(三)
  7. QTP软件测试工具学习
  8. Eclipse 切换 SVN 地址
  9. php 网站计数器,PHP开源程序通用网站计数器代码分享
  10. C++使用Socks5协议进行代理上网(二)
  11. php 冷门与常用函数
  12. 强驴分享北京最好玩儿的隐秘旅游地
  13. linux 驱动之PWM蜂鸣器驱动
  14. Class not found so assuming code is running on a pre-Java 9 JVM
  15. cad角度命令怎么输入_CAD阵列命令中角度阵列的使用技巧
  16. C# DevExpress控件Gridview和GridControl学习总结
  17. Altium designer18 绘制PCB漏线检查
  18. UICC 之 USIM 详解全系列
  19. 用友和金蝶ERP产品私有云部署方案
  20. 企业微信支付收款码申请开通方法

热门文章

  1. 关于COCOS2D-X 中的音乐与音效应用的备注
  2. Android开发真机测试方法 (转)
  3. 013年十大急需的热门IT技能
  4. 莱斯大学找到了多被提升3G/4G网络性能的方法
  5. 大数据下union all的视图分页解决方案
  6. 什么样的程序算作漂亮的?
  7. 服务员就结账了的p8u8
  8. 专业即时通讯工具的SEO人生发力
  9. 只能是做的HTML5审批流项目
  10. 比iPhone更具创意 魅族M8屏幕解锁演示