canvas筆記-畫一個五角星(含算法)

算法如下:

上面的圖是正三角形:

說下算法,關於上面那些x,y是怎麼算出來的。

這裏大圓的5個頂點,每個頂點佔用的角度爲360/5 = 72度,左邊那個18度是通過90 - 72 = 18度。

大圓半徑爲R,所以

x爲cos(18度) * R

y爲-sin(18度) * R

這個負是因爲座標y,是因爲向下爲正。

其他角度通過加72度就可以了!

 

下面來看下那個54度是怎麼算的!

72 * 2 - 90 = 54度,同樣半徑爲r

x爲cos(54度) * r

y爲-sin(54度) * r

其他角度通過加72度就可以了!

 

如果要旋轉角度,只要畫點時,每個點加一個對應的角度即可!

 

下面是代碼:

<!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.lineWidth = 10;
        drawStar(context, 150, 300, 400, 400, 0);
    }

    function drawStar(cxt, r, R, x, y, rot){

        cxt.beginPath();
        for(let i = 0; i < 5; i++){

            cxt.lineTo(Math.cos((18 + i * 72 - rot) / 180 * Math.PI) * R + x,
            -Math.sin((18 + i * 72- rot) / 180 * Math.PI) * R + y);

            cxt.lineTo(Math.cos((54 + i * 72 - rot) / 180 * Math.PI) * r + x,
            -Math.sin((54 + i * 72 - rot) / 180 * Math.PI) * r + y);
        }

        cxt.closePath();
        cxt.stroke();
    }
</script>

</body>
</html>

程序運行截圖如下:

這裏有一個要注意的,就是cos裏面要傳弧度,下面是度和弧度轉換的格式:

1弧度=180/pai 度

1度=pai/180 弧度

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章