国庆节怎么少得了国旗:绘制五星红旗

254 阅读2分钟

image.png

前言

image.png

要想实现国旗,核心就是要画五角星,我们一般画五角星是不是如下图所示,所以核心就是要找到五个点,将他们连接起来就是五角星了

image.png

而对于画图,web端的利器就是canvas,下面我们分析一下。对于下面这个没有旋转的五角星,我们以五角星中心为原点作一个坐标系,canvas是规定:向右向下是正方向。所以第一个点就是负的90度。又知道我们是隔一个点连接的,而且5个角刚好把一个圆分成5份,每一份就是360/5 = 72度。所以下一个点的度数是-90度+(72*2)

image.png

上面我们知道了每个点的角度问题,下面我们就要知道怎么计算每个点的长度问题,

x坐标:cx + Rcos(度)    y坐标: cy + Rsin(度)

image.png

每个点都知道了我们就很好实现了

实现

(1)定义一个canvas

<canvas id="canvas-flag" width="500"></canvas>

(2) 定义一个画五角星的方法

// 画五角星的方法

//cx,cy  圆心坐标  radius半径   fillColor填充颜色  startAngle初始角度

function drawStar(context, cx, cy, radius, fillColor, startAngle) {   

        var pointer = startAngle == null ? - Math.PI / 2 : startAngle; 

        var angle = 2 * Math.PI / countSides; 

       context.beginPath();

     //  因为是五角星,所以需要连接五个点

       for (var i = 0; i < 5; i++) { 

            context.lineTo(cx + radius * Math.cos(pointer), cy + radius * Math.sin(pointer)); 

            pointer += 2 * angle; 

       }

      context.fillStyle = fillColor; 

      context.fill();

      context.closePath(); }

(3)绘制国旗的除五角星部分

var COLOR_RED = "#de2910";

var COLOR_YELLOW = "#ffde00"var canvas = document.getElementById("canvas-flag"); 

var context = canvas.getContext("2d");  

var WIDTH = canvas.widthvar UNIT = WIDTH / 30var HEIGHT = canvas.height = UNIT * 20;  

context.fillStyle = COLOR_RED; 

context.fillRect(0, 0, WIDTH, HEIGHT); 

(4)绘制五个五角星

drawStar(context, 5 * UNIT, 5 * UNIT, 3 * UNITCOLOR_YELLOW,-Math.PI / 2);  



drawStar(context, 10 * UNIT, 2 * UNIT, UNIT, COLOR_YELLOW, Math.PI- Math.PI/180*28); 

drawStar(context, 12 * UNIT, 4 * UNIT, UNITCOLOR_YELLOW, Math.PI- Math.PI/180*15); 

drawStar(context, 12 * UNIT, 7 * UNIT, UNITCOLOR_YELLOW, Math.PI+ Math.PI/180*15); 

drawStar(context, 10 * UNIT, 9 * UNIT, UNITCOLOR_YELLOW, Math.PI+ Math.PI/180*28);

更多学习视频学习资料请参考:B站搜索“我们一起学前端”  

我们一起学前端的个人空间_哔哩哔哩_Bilibili