失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > canvas笔记-非零环绕原则及剪纸实例

canvas笔记-非零环绕原则及剪纸实例

时间:2019-07-12 18:45:21

相关推荐

canvas笔记-非零环绕原则及剪纸实例

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

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

如+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笔记-非零环绕原则及剪纸实例》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。