使用html5 canvas繪製圓形或弧線

來源:互聯網
上載者:User

標籤:tco   lan   完整   href   檢測   用法   src   start   gre   

注意:本文屬於《html5 Canvas繪製圖形入門詳解》系列文章中的一部分。如果你是html5初學者,僅僅閱讀本文,可能無法較深入的理解canvas,甚至無法順暢地通讀本文。請點擊上述連結以瞭解使用html5 canvas繪製圖形的完整內容。

在html5中,CanvasRenderingContext2D對象也提供了專門用於繪製圓形或弧線的方法,請參考以下屬性和方法介紹:

arc(x, y, radius, startRad, endRad, anticlockwise)

在canvas畫布上繪製以座標點(x,y)為圓心、半徑為radius的圓上的一段弧線。這段弧線的起始弧度是startRad,結束弧度是endRad。這裡的弧度是以x軸正方向(時鐘三點鐘)為基準、進行順時針旋轉的角度來計算的。anticlockwise表示是以逆時針方向還是順時針方向開始繪製,如果為true則表示逆時針,如果為false則表示順時針。anticlockwise參數是可選的,預設為false,即順時針。

arcTo(x1, y1, x2, y2, radius)
這個方法將利用當前端點、端點1 (x1,y1)和端點2 (x2,y2)這三個點所形成的夾角,然後繪製一段與夾角的兩邊相切並且半徑為 radius的圓上的弧線。一般情況下,繪製弧線的開始位置是當前端點,結束位置是端點2,並且弧線繪製的方向就是串連這兩個端點的最短圓弧的方向。此外,如果當前端點不在所指定的圓上,本方法還將繪製一條從當前端點到弧線起點的直線。

由於詳細介紹arcTo()方法的篇幅較多,請移步至這裡查看arcTo()的詳細用法。

在瞭解了canvas繪製弧線的上述API之後,我們就一起來看看如何使用arc()繪製弧線。我們已經知道,arc()接收的第4個和第5個參數表示繪製弧線的開始弧度和結束弧度。相信各位讀者在學校的數學或幾何課程上都學過弧度,弧度是一種角度單位。弧長等於半徑的弧,其所對的圓心角就是1弧度。我們還知道,半徑為r的圓,其周長為2πr。在具備這些幾何知識的前提下,我們就可以使用arc()方法繪製弧線了。

使用canvas繪製弧線

現在,我們就來繪製一條半徑為50px的圓的1/4弧線。

 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>HTML5 Canvas繪製弧線入門樣本</title> 6 </head> 7 <body> 8  9 <!-- 添加canvas標籤,並加上紅色邊框以便於在頁面上查看 -->10 <canvas id="myCanvas" width="400px" height="300px" style="border: 1px solid red;">11 您的瀏覽器不支援canvas標籤。12 </canvas>13 14 <script type="text/javascript">15 //擷取Canvas對象(畫布)16 var canvas = document.getElementById("myCanvas");17 //簡單地檢測當前瀏覽器是否支援Canvas對象,以免在一些不支援html5的瀏覽器中提示法錯誤18 if(canvas.getContext){  19     //擷取對應的CanvasRenderingContext2D對象(畫筆)20     var ctx = canvas.getContext("2d");  21     22     //開始一個新的繪製路徑23     ctx.beginPath();24     //設定弧線的顏色為藍色25     ctx.strokeStyle = "blue";26     var circle = {27         x : 100,    //圓心的x軸座標值28         y : 100,    //圓心的y軸座標值29         r : 50      //圓的半徑30     };31     //沿著座標點(100,100)為圓心、半徑為50px的圓的順時針方向繪製弧線32     ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI / 2, false);    33     //按照指定的路徑繪製弧線34     ctx.stroke();35 }36 </script>37 </body>38 </html>

對應的顯示效果如:運行代碼

         使用canvas沿著順時針方向繪製弧線 

如上所示,我們設定了繪製的弧線的所在圓的圓心座標為(100,100),半徑為50px。由於一個半徑為r的圓的周長為2πr,也就是說,一個完整的圓,其所對應的弧度為(換算成常規角度就是360°),所以我們想要畫一個圓的1/4弧線,只要弧度為π/2(即90°)就可以了。在上面的代碼中,我們使用了JavaScript中表示π的常量Math.PI

此外,在上面的代碼中,我們還設定了繪製弧線的方向為順時針方向(false)。由於起始弧度為0,結束弧度為π/2,因此弧線將從x軸的正方向開始沿著順時針方向繪製,從而得到上面的圖形。如果我們將上述代碼中的弧線繪製方向改為逆時針,會有什麼樣的效果呢?

 1 <script type="text/javascript"> 2 //擷取Canvas對象(畫布) 3 var canvas = document.getElementById("myCanvas"); 4 //簡單地檢測當前瀏覽器是否支援Canvas對象,以免在一些不支援html5的瀏覽器中提示法錯誤 5 if(canvas.getContext){   6     //擷取對應的CanvasRenderingContext2D對象(畫筆) 7     var ctx = canvas.getContext("2d");   8      9     //開始一個新的繪製路徑10     ctx.beginPath();11     //設定弧線的顏色為藍色12     ctx.strokeStyle = "blue";13     var circle = {14         x : 100,    //圓心的x軸座標值15         y : 100,    //圓心的y軸座標值16         r : 50      //圓的半徑17     };18     //沿著座標點(100,100)為圓心、半徑為50px的圓的逆時針方向繪製弧線19     ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI / 2, true);    20     //按照指定的路徑繪製弧線21     ctx.stroke();22 }23 </script>

對應的顯示效果如下:運行代碼

       使用canvas沿著逆時針方向繪製弧線

使用canvas繪製圓形

當我們學會了繪製弧線之後,舉一反三,我們想要繪製圓形自然也不在話下,只需要將上述代碼的結束弧度改為2π即可。

 1 <script type="text/javascript"> 2 //擷取Canvas對象(畫布) 3 var canvas = document.getElementById("myCanvas"); 4 //簡單地檢測當前瀏覽器是否支援Canvas對象,以免在一些不支援html5的瀏覽器中提示法錯誤 5 if(canvas.getContext){   6     //擷取對應的CanvasRenderingContext2D對象(畫筆) 7     var ctx = canvas.getContext("2d");   8      9     //開始一個新的繪製路徑10     ctx.beginPath();11     //設定弧線的顏色為藍色12     ctx.strokeStyle = "blue";13     var circle = {14         x : 100,    //圓心的x軸座標值15         y : 100,    //圓心的y軸座標值16         r : 50      //圓的半徑17     };18     //以canvas中的座標點(100,100)為圓心,繪製一個半徑為50px的圓形19     ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI * 2, true);    20     //按照指定的路徑繪製弧線21     ctx.stroke();22 }23 </script>

對應的顯示效果如下:運行代碼

                使用canvas繪製的圓形

備忘:arc()方法中的起始弧度參數startRad和結束弧度參數endRad都是以弧度為單位,即使你填入一個數字,例如360,仍然會被看作是360弧度。將上述代碼的結束弧度設為360會產生什麼用的後果呢?這就要看繪製的方向了(即anticlockwise參數的值),如果是順時針繪製(false),則將繪製出一個完整的圓形;如果是逆時針繪製,大於2π的弧度將被轉換為一個弧度相等、但不大於2π的弧度。例如,將上述代碼中的結束弧度設為3π(Math.PI * 3),如果anticlockwisefalse,將會顯示為一個完整的圓形,如果為true,則其顯示效果與設為π時的顯示效果一致。

 

   結束弧度設為3π時,順時針(false)旋轉的繪製效果

 

  結束弧度設為3π時,逆時針(true)旋轉的繪製效果

使用html5 canvas繪製圓形或弧線

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.