小白學(xué)canvas-繪制正多邊形、五角星

繪制正多邊形

第一種方法就是發(fā)揮強大的數(shù)學(xué)能力,計算出各個頂點的位置,然后moveTo(),lineTo()。
第二種就是抄抄大神寫的正多邊形函數(shù)

function createPolygon(cxt,n,dx,dy,size){
            cxt.beginPath();
            var degree=(2*Math.PI)/n;
            for (var i=0;i<n;i++){
                var x=Math.cos(i*degree);
                var y=Math.sin(i*degree);
                cxt.lineTo(x*size+dx,y*size+dy);
            }
            cxt.closePath();
        }

creatPolygon(cxt,n,dx,dy,size),n為邊數(shù),(dx,dy)為多邊形中心點位置,size為中心點到頂點的距離。然后調(diào)用creatPolygon()方法

圖片.png
關(guān)于closePath()

如果畫布的子路徑是打開的,closePath() 通過添加一條線條連接當前點和子路徑起始點來關(guān)閉它。
如果子路徑已經(jīng)閉合了,這個方法不做任何事情。
一旦子路徑閉合,就不能再為其添加更多的直線或曲線了。要繼續(xù)向該路徑添加,需要通過調(diào)用 moveTo() 開始一條新的子路徑。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
        //封裝
        function $$(id){
            return document.getElementById(id);
        }
        window.onload=function(){
            //提取
            var cnv=$$("canvas");
            var cxt=cnv.getContext("2d");
            //繪制正多邊形
            createPolygon(cxt,5,125,75,50);
            cxt.fillStyle="red";
            cxt.fill();
        }
        //封裝正多邊形函數(shù)
        function createPolygon(cxt,n,dx,dy,size){
            cxt.beginPath();
            var degree=(2*Math.PI)/n;
            for (var i=0;i<n;i++){
                var x=Math.cos(i*degree);
                var y=Math.sin(i*degree);
                cxt.lineTo(x*size+dx,y*size+dy);
            }
            cxt.closePath();
        }
    </script>
</head>
<body>
    <canvas id="canvas" width="250" height="150" style="border:1px dashed gray"></canvas>
</body>
</html>
正五邊形( ̄Q ̄)╯

繪制五角星

先獲取頂點坐標,然后連接起來。


<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
        //封裝
        function $$(id){
            return document.getElementById(id);
        }
        window.onload=function(){
            //提取
            var cnv=$$("canvas");
            var cxt=cnv.getContext("2d");
            //繪制五角星
            cxt.beginPath();
            for (var i=0;i<5;i++){
                //+號后的值為中心點坐標值
                cxt.lineTo(Math.cos((18+i*72)*Math.PI/180)*50+125,
                -Math.sin((18+i*72)*Math.PI/180)*50+75);
                cxt.lineTo(Math.cos((54+i*72)*Math.PI/180)*25+125,
                -Math.sin((54+i*72)*Math.PI/180)*25+75);
            }
            cxt.closePath();
            cxt.fillStyle="yellow";//定義填充顏色
            cxt.fill();//填充動作
            cxt.strokeStyle="red";//定義描邊顏色
            cxt.stroke();//描邊動作
        }
    </script>
</head>
<body>
    <canvas id="canvas" width="250" height="150" style="border:1px dashed gray"></canvas>
</body>
</html>
亮閃閃的五角星★′?`★
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近項目中要實現(xiàn)加速球效果。是時候該學(xué)習(xí)一波了,好了廢話不多說,記筆記,還是從自己發(fā)憷的自定義view開始。 先來...
    laifrog閱讀 1,740評論 0 4
  • 一:canvas簡介 1.1什么是canvas? ①:canvas是HTML5提供的一種新標簽 ②:HTML5 ...
    GreenHand1閱讀 4,878評論 2 32
  • 一、簡介 HTML5 中的定義:“它是依賴分辨率的位圖畫布,你可以在 canvas 上面繪制任何圖形,甚至加載照片...
    destiny0904閱讀 10,824評論 1 4
  • 書中代碼示例效果展示:Core HTML5 Canvas Examples 基礎(chǔ)知識 canvas元素 canva...
    szu_bee閱讀 3,044評論 2 28
  • 文/雙 對多肉的喜愛,我真可稱得上是一見鐘情,愛如珍品。 小小的軀體,隱藏著大大的能量。只要給它一點水,一點陽光和...
    雙zs閱讀 283評論 7 1

友情鏈接更多精彩內(nèi)容