婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解HTML5 Canvas繪制不規則圖形時的非零環繞原則

詳解HTML5 Canvas繪制不規則圖形時的非零環繞原則

熱門標簽:貸款電銷人工和機器人哪個好 聯通400電話申請 高德地圖標注賓館位置 飛亞外呼系統 電話機器人如何 杭州營銷電銷機器人供應商 百應電銷機器人產業 西寧智能外呼系統加盟 電視購物電銷外呼系統

路徑方向與非零環繞原則
平時我們畫的圖形都是規規矩矩的,那么如果我們用線條畫了個抽象派作品,就像下面這圖一樣,童鞋們知道怎么用fill()染色呢?

這里就要用到數學上的一個方法——非零環繞原則,來判斷哪塊區域是里面,哪塊區域是外面。接下來,我們具體來看下什么是非零環繞原則。

首先,我們得給圖形確定一條路徑,只要“一筆畫”并且“不走重復路線”就可以了。如圖,標出的是其中的一種路徑方向。我們先假定路徑的正方向為1(其實為-1啥的也都可以,正負方向互為相反數,不是0就行),那么反方向就是其相反數-1。
然后,我們在子路徑切割的幾塊區域內的任意一點各取一條方向任意的射線,這里我只取了三個區域的射線為例,來判斷這三塊區域是“里面”還是“外面”。
接下來,我們就來判斷了。S1中引出的射線L1,與S1的子路徑的正方向相交,那么我們就給計數器+1,結果為+1,在外面。
S2中引出的射線L2,與兩條子路徑的正方向相交,計數器+2,結果為+2,在外面。
S3中引出的射線L3,與兩條子路徑相交,但是其中有一條的反方向,計數器+1-1,結果為0,在里面。沒錯,只要結果不為0,該射線所在的區域就在外面。


繪制圓環
記得arc方法嗎?它的最后一個參數就是判斷是路徑方向的,如果是路徑相反的兩個同心圓在一起,圖上色會有什么神奇的效果呢?

下面我們通過代碼來實現它。

JavaScript Code復制內容到剪貼板
  1. <!DOCTYPE html>   
  2. <html lang="zh">   
  3. <head>   
  4.     <meta charset="UTF-8">   
  5.     <title>圓環</title>   
  6.     <style>   
  7.         body { background: url("./images/bg3.jpg") repeat; }  
  8.         #canvas { border: 1px solid #aaaaaa; display: block; margin: 50px auto; }   
  9.     </style>   
  10. </head>   
  11. <body>   
  12. <div id="canvas-warp">   
  13.     <canvas id="canvas">   
  14.         你的瀏覽器居然不支持Canvas?!趕快換一個吧!!   
  15.     </canvas>   
  16. </div>   
  17.   
  18. <script>   
  19.     window.onload = function(){   
  20.         var canvas = document.getElementById("canvas");   
  21.         canvas.width = 800;   
  22.         canvas.height = 600;   
  23.         var context = canvas.getContext("2d");   
  24.         context.fillStyle = "#FFF";   
  25.         context.fillRect(0,0,800,600);   
  26.   
  27.         context.shadowColor = "#545454";   
  28.         context.shadowOffsetX = 5;   
  29.         context.shadowOffsetY = 5;   
  30.         context.shadowBlur = 2;   
  31.   
  32.         context.arc(400, 300, 200, 0, Math.PI * 2 ,false);   
  33.         context.arc(400, 300, 230, 0, Math.PI * 2 ,true);   
  34.         context.fillStyle = "#00AAAA";   
  35.         context.fill();   
  36.     };   
  37. </script>   
  38. </body>   
  39. </html>  

運行結果:

鏤空剪紙效果
接下來,我們利用非零環繞原則和陰影來繪制一個鏤空的剪紙效果。

JavaScript Code復制內容到剪貼板
  1. <!DOCTYPE html>   
  2. <html lang="zh">   
  3. <head>   
  4.     <meta charset="UTF-8">   
  5.     <title>鏤空剪紙效果</title>   
  6.     <style>   
  7.         body { background: url("./images/bg3.jpg") repeat; }  
  8.         #canvas { border: 1px solid #aaaaaa; display: block; margin: 50px auto; }   
  9.     </style>   
  10. </head>   
  11. <body>   
  12. <div id="canvas-warp">   
  13.     <canvas id="canvas">   
  14.         你的瀏覽器居然不支持Canvas?!趕快換一個吧!!   
  15.     </canvas>   
  16. </div>   
  17.   
  18. <script>   
  19.     window.onload = function(){   
  20.         var canvas = document.getElementById("canvas");   
  21.         canvas.width = 800;   
  22.         canvas.height = 600;   
  23.         var context = canvas.getContext("2d");   
  24.         context.fillStyle = "#FFF";   
  25.         context.fillRect(0,0,800,600);   
  26.   
  27.         context.beginPath();   
  28.         context.rect(200,100,400,400);   
  29.         drawPathRect(context, 250, 150, 300, 150);   
  30.         drawPathTriangle(context, 345, 350, 420, 450, 270, 450);   
  31.         context.arc(500, 400, 50, 0, Math.PI * 2, true);   
  32.         context.closePath();   
  33.   
  34.         context.fillStyle = "#058";   
  35.         context.shadowColor = "gray";   
  36.         context.shadowOffsetX = 10;   
  37.         context.shadowOffsetY = 10;   
  38.         context.shadowBlur = 10;   
  39.         context.fill();   
  40.   
  41.     };   
  42.   
  43.     //逆時針繪制矩形   
  44.     function drawPathRect(cxt, x, y, w, h){   
  45.         /**  
  46.          * 這里不能使用beginPath和closePath,  
  47.          * 不然就不屬于子路徑而是另一個全新的路徑,  
  48.          * 無法使用非零環繞原則  
  49.          */  
  50.         cxt.moveTo(x, y);   
  51.         cxt.lineTo(x, y + h);   
  52.         cxt.lineTo(x + w, y + h);   
  53.         cxt.lineTo(x + w, y);   
  54.         cxt.lineTo(x, y);   
  55.   
  56.     }   
  57.   
  58.     //逆時針繪制三角形   
  59.     function drawPathTriangle(cxt, x1, y1, x2, y2, x3, y3){   
  60.         cxt.moveTo(x1,y1);   
  61.         cxt.lineTo(x3,y3);   
  62.         cxt.lineTo(x2,y2);   
  63.         cxt.lineTo(x1,y1);   
  64.     }   
  65.   
  66. </script>   
  67. </body>   
  68. </html>  

運行結果:

這里手動繪制矩形的原因是我們想要得到逆時針路徑的矩形,而且API提供的rect()方法繪制是順時針矩形。另外,需要注意的是,這個剪紙是一個圖形,一個路徑。不能在繪制鏤空三角形和繪制鏤空矩形的方法里使用beginPath()和closePath(),不然它們就會是新的路徑、新的圖形,而不是剪紙的子路徑、子圖形,就無法使用非零環繞原則。


標簽:煙臺 內蒙古 玉溪 安慶 牡丹江 撫州 邯鄲 晉中

巨人網絡通訊聲明:本文標題《詳解HTML5 Canvas繪制不規則圖形時的非零環繞原則》,本文關鍵詞  詳解,HTML5,Canvas,繪制,不規則,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解HTML5 Canvas繪制不規則圖形時的非零環繞原則》相關的同類信息!
  • 本頁收集關于詳解HTML5 Canvas繪制不規則圖形時的非零環繞原則的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    精东粉嫩av免费一区二区三区| 九色|91porny| 一区二区三区在线观看视频| 亚洲综合免费观看高清完整版在线| 国产成人精品亚洲午夜麻豆| 老汉av免费一区二区三区| 婷婷中文字幕一区三区| 亚洲福利电影网| 亚洲va欧美va人人爽午夜| 天天av天天翘天天综合网色鬼国产| 美日韩一区二区三区| 另类小说色综合网站| 国产精品一二三区| 欧美日韩国产中文| 欧美视频一区在线| 精品久久久久久无| 高清成人在线观看| 日本高清不卡aⅴ免费网站| 欧美电影免费观看高清完整版在线| 午夜精品视频一区| 国产剧情在线观看一区二区| 色综合av在线| 久久精品人人做| 五月激情综合网| 成人看片黄a免费看在线| 欧美日韩一区二区在线视频| 亚洲精品一区二区在线观看| 欧美色大人视频| 国产亚洲精品免费| 日韩av中文在线观看| 波多野结衣的一区二区三区| 日韩免费视频一区| 成人精品国产福利| 欧美调教femdomvk| 国产精品美女一区二区| 久久成人av少妇免费| 在线观看欧美日本| 中文字幕日韩一区| 大胆欧美人体老妇| 久久综合久色欧美综合狠狠| 亚洲国产视频网站| 99精品热视频| 中文字幕av一区二区三区高 | 青草av.久久免费一区| 高清成人免费视频| 久久这里都是精品| 蜜乳av一区二区三区| 欧美美女直播网站| 亚洲主播在线观看| 色综合久久综合网97色综合| 亚洲国产高清aⅴ视频| 国产伦精品一区二区三区免费| 91麻豆精品国产91久久久久| 亚洲午夜久久久久久久久电影网| 91麻豆国产精品久久| 中文字幕中文字幕一区二区| 9i在线看片成人免费| 亚洲视频免费在线观看| 成人毛片视频在线观看| 国产精品国产自产拍高清av王其 | 日韩一区二区三区三四区视频在线观看 | 国产麻豆精品theporn| www久久精品| 黄色日韩网站视频| 久久亚洲综合色一区二区三区| 欧美a级一区二区| 日韩三级精品电影久久久| 日本中文字幕一区| 在线成人免费观看| 美国十次了思思久久精品导航| 欧美日韩国产首页在线观看| 亚洲午夜一区二区| 欧美二区三区的天堂| 日本成人中文字幕在线视频 | 日韩精品免费视频人成| 欧美一区二区免费观在线| 免费xxxx性欧美18vr| 国产亚洲精品福利| 91在线观看一区二区| 亚洲夂夂婷婷色拍ww47| 在线播放国产精品二区一二区四区| 日日夜夜免费精品| 久久午夜老司机| 91视频在线看| 日韩精品国产精品| 国产视频一区二区在线观看| 91在线精品一区二区| 日韩精品乱码免费| 国产欧美一区二区三区沐欲| 欧美三级中文字幕| 国产成人综合亚洲网站| 伊人开心综合网| 精品久久国产字幕高潮| 日本乱码高清不卡字幕| 久久精品国产亚洲aⅴ| 亚洲视频香蕉人妖| 精品国产成人系列| 色综合中文字幕国产| 亚洲成人综合视频| 亚洲精品在线免费观看视频| 欧美在线观看视频在线| 国产成人欧美日韩在线电影| 亚洲午夜私人影院| 国产精品剧情在线亚洲| 9191国产精品| 色婷婷av一区二区| 国产精品一区久久久久| 亚洲自拍偷拍综合| 日本一区二区成人| www国产成人免费观看视频 深夜成人网| 色综合天天综合色综合av| 国产在线国偷精品免费看| 亚洲电影一级黄| 亚洲激情图片小说视频| 久久久久久久综合狠狠综合| 欧美一区二区三区啪啪| 在线观看日韩av先锋影音电影院| 国产精品一区二区久久精品爱涩 | 欧美三片在线视频观看| 大白屁股一区二区视频| 久久精品理论片| 日韩一区精品视频| 伊人色综合久久天天| 国产精品国产三级国产aⅴ中文 | 精品日韩一区二区三区免费视频| 99久久久免费精品国产一区二区| 激情六月婷婷久久| 亚洲高清三级视频| 亚洲免费在线视频一区 二区| 国产女人18水真多18精品一级做| 91精品国产综合久久香蕉的特点| 欧美丝袜丝nylons| 色婷婷久久综合| 日本高清不卡在线观看| 91网站在线观看视频| 国产白丝精品91爽爽久久| 国产真实精品久久二三区| 久久精品国产秦先生| 美腿丝袜一区二区三区| 精品一区二区在线视频| 久久99热这里只有精品| 欧美96一区二区免费视频| 日韩有码一区二区三区| 日韩av不卡一区二区| 秋霞国产午夜精品免费视频| 日本不卡在线视频| 久久成人av少妇免费| 国产在线播放一区| 国产成人av福利| 99国产精品久久久久久久久久| 91色乱码一区二区三区| 在线亚洲一区观看| 欧美精品日韩综合在线| 911精品产国品一二三产区| 日韩亚洲欧美一区| 日韩免费福利电影在线观看| 精品国产百合女同互慰| 国产精品国产三级国产三级人妇| 日韩伦理电影网| 一区二区三区四区精品在线视频| 亚洲国产综合视频在线观看| 日韩二区在线观看| 国产一区91精品张津瑜| 波多野结衣亚洲一区| 欧美亚洲图片小说| 日韩欧美另类在线| 亚洲国产成人私人影院tom| 日韩一区有码在线| 亚洲国产日韩a在线播放性色| 琪琪久久久久日韩精品| 美腿丝袜一区二区三区| 成人高清视频在线| 欧美日韩一区久久| 久久精品网站免费观看| 亚洲久草在线视频| 日本欧美一区二区| www.亚洲人| 91精品国产欧美一区二区| 国产亚洲欧美日韩俺去了| 亚洲精品欧美激情| 老鸭窝一区二区久久精品| 99精品视频中文字幕| 欧美日韩激情一区| 久久久噜噜噜久久人人看| 中文字幕在线不卡| 日本不卡的三区四区五区| 成人精品国产免费网站| 51午夜精品国产| 中文字幕av免费专区久久| 日产精品久久久久久久性色| 91在线码无精品| 国产亚洲自拍一区| 视频一区欧美日韩| 91啪亚洲精品| 久久久精品影视| 奇米色777欧美一区二区| 一本色道久久综合精品竹菊| 久久综合九色综合97婷婷女人| 亚洲国产另类精品专区| 波多野结衣中文一区|