Home >Web Front-end >H5 Tutorial >How to draw a circle using canvas? Three dynamic implementation methods for drawing circles using canvas

How to draw a circle using canvas? Three dynamic implementation methods for drawing circles using canvas

不言
不言Original
2018-09-15 13:42:4711342browse

We all should know that canvas can be used to draw a variety of pictures on the browser. So, how to use canvas to draw a circle? This article will introduce to you three dynamic implementation methods of using canvas to draw a circle.

First let’s look at the first method of drawing a circle on canvas: using the canvas arc() method to dynamically draw a circle

arc() method creates an arc/curve ( for creating circles or partial circles).

Idea: Limit it by setting the starting angle and ending angle, and then achieve the animation effect by accumulating temporary angle variables.

Syntax: context.arc(x,y,r,sAngle,eAngle,counterclockwise);

Canvas circle drawing implementation code:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <style type="text/css">
    #myCanvas{
        margin: 0 auto;
        display: block;
    }
    </style>
</head>
<body>
  <canvas id="myCanvas">当前浏览器不支持canvas组件请升级!</canvas>
  <script type="text/javascript">
  //方法一:arc 动态画圆
  var c = document.getElementById(&#39;myCanvas&#39;);
  var ctx = c.getContext(&#39;2d&#39;);
  var mW = c.width = 300;
  var mH = c.height = 300;
  var lineWidth = 5;
  var r = mW / 2; //中间位置
  var cR = r - 4 * lineWidth; //圆半径
  var startAngle = -(1 / 2 * Math.PI); //开始角度
  var endAngle = startAngle + 2 * Math.PI; //结束角度
  var xAngle = 1 * (Math.PI / 180); //偏移角度量
  var fontSize = 35; //字号大小
  var tmpAngle = startAngle; //临时角度变量
  //渲染函数
  var rander = function(){
    if(tmpAngle >= endAngle){
      return;
    }else if(tmpAngle + xAngle > endAngle){
      tmpAngle = endAngle;
    }else{
      tmpAngle += xAngle;
    }
    ctx.clearRect(0, 0, mW, mH);
    //画圈
    ctx.beginPath();
    ctx.lineWidth = lineWidth;
    ctx.strokeStyle = &#39;#1c86d1&#39;;
    ctx.arc(r, r, cR, startAngle, tmpAngle);
    ctx.stroke();
    ctx.closePath();
    //写字
    ctx.fillStyle = &#39;#1d89d5&#39;;
    ctx.font= fontSize + &#39;px Microsoft Yahei&#39;;
    ctx.textAlign=&#39;center&#39;;
    ctx.fillText( Math.round((tmpAngle -  startAngle) / (endAngle - startAngle) * 100) + &#39;%&#39;, r, r + fontSize / 2);
    requestAnimationFrame(rander);
  };
  rander();
  </script>
</body>
</html>

canvas drawing circle renderings:

How to draw a circle using canvas? Three dynamic implementation methods for drawing circles using canvas

## Next, let’s take a look at the second canvas drawing circle Method : Use the canvas rotate() method to draw a circle

rotate() method to rotate the current drawing.

Idea: Redefine the point coordinates as (0, 0), and then perform single-point drawing by rotating the graphic within the specified range.

Grammar: context.translate(x,y);

Implementation code of canvas drawing circle:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <style type="text/css">
    #myCanvas{  
          margin: 0 auto;        
          display: block;    
          }
    </style></head><body>
  <canvas id="myCanvas">当前浏览器不支持canvas组件请升级!</canvas>
  <script type="text/javascript">
  //方法二:rotate() 动态画圆
  var c = document.getElementById(&#39;myCanvas&#39;);  
  var ctx = c.getContext(&#39;2d&#39;);  
  var mW = c.width = 300;  
  var mH = c.height = 300;  
  var lineWidth = 5;  
  var r = mW / 2; //中间位置
  var cR = r - 4 * lineWidth; //圆半径
  var startAngle = -(1 / 2 * Math.PI); //开始角度
  var endAngle = startAngle + 2 * Math.PI; //结束角度
  var xAngle = 1 * (Math.PI / 180); //偏移角度量
  var fontSize = 35; //字号大小
  var tmpAngle = startAngle; //临时角度变量
  //渲染函数
  var rander = function(){
    if(tmpAngle >= endAngle){     
     return;
    }else if(tmpAngle + xAngle > endAngle){
      tmpAngle = endAngle;
    }else{
      tmpAngle += xAngle;
    }
    ctx.clearRect(0, 0, mW, mH);    //画圈
    ctx.save();
    ctx.beginPath();
    ctx.lineWidth = lineWidth;
    ctx.strokeStyle = &#39;#1c86d1&#39;;
    ctx.translate(r, r); //重定义圆点
    ctx.rotate(-Math.PI); //最上方为起点
    for(var i = 0; i <= tmpAngle - startAngle; i += xAngle){ //绘图
      ctx.moveTo(0, cR - lineWidth);
      ctx.lineTo(0, cR);
      ctx.rotate(xAngle); //通过旋转角度和画点的方式绘制圆
    }
    ctx.stroke();
    ctx.closePath();
    ctx.restore();    //写字
    ctx.fillStyle = &#39;#1d89d5&#39;;
    ctx.font= fontSize + &#39;px Microsoft Yahei&#39;;
    ctx.textAlign=&#39;center&#39;;
    ctx.fillText( Math.round((tmpAngle -  startAngle) / (endAngle - startAngle) * 100) + &#39;%&#39;, r, r + fontSize / 2);
    requestAnimationFrame(rander);
  };
  rander();  
  </script>
  </body>
  </html>

Canvas drawing circle rendering:

How to draw a circle using canvas? Three dynamic implementation methods for drawing circles using canvas

Finally let’s look at the third method of drawing a circle on canvas: Use to get the circle Draw a circle using coordinates

Idea: Use sin() and cos() to store the coordinate position between the start angle and the end angle in an array according to a certain angle offset, and then follow the array The coordinate points in are drawn.


Implementation code for canvas drawing circle:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <style type="text/css">
    #myCanvas{     
       margin: 0 auto;        
       display: block;    
       }
    </style></head><body>
  <canvas id="myCanvas">当前浏览器不支持canvas组件请升级!</canvas>

  <script type="text/javascript">
  //方法三:获取圆坐标方式 动态画圆
  var c = document.getElementById(&#39;myCanvas&#39;);  
  var ctx = c.getContext(&#39;2d&#39;);  
  var mW = c.width = 300;  
  var mH = c.height = 300;  
  var lineWidth = 5;  
  var r = mW / 2; //中间位置
  var cR = r - 4 * lineWidth; //圆半径
  var startAngle = -(1 / 2 * Math.PI); //开始角度
  var endAngle = startAngle + 2 * Math.PI; //结束角度
  var xAngle = 2 * (Math.PI / 180); //偏移角度量
  var cArr = []; //圆坐标数组
  //初始化圆坐标数组
  for(var i = startAngle; i <= endAngle; i += xAngle){    
  //通过sin()和cos()获取每个角度对应的坐标
    var x = r + cR * Math.cos(i);    
    var y = r + cR * Math.sin(i);
    cArr.push([x, y]);
  }  //移动到开始点
  var startPoint = cArr.shift();
  ctx.beginPath();
  ctx.moveTo(startPoint[0], startPoint[1]);  //渲染函数
  var rander = function(){
    //画圈
    if(cArr.length){
      ctx.lineWidth = lineWidth;
      ctx.strokeStyle = &#39;#1c86d1&#39;;    
      var tmpPoint = cArr.shift();
      ctx.lineTo(tmpPoint[0], tmpPoint[1]);
      ctx.stroke();      
    }else{
      cArr = null;      
      return;
    }
    requestAnimationFrame(rander);
  };
  rander();  
  </script>
  </body>
  </html>

Canvas drawing circle rendering:

How to draw a circle using canvas? Three dynamic implementation methods for drawing circles using canvas

The above articles are three ways to use canvas to draw a circle. These three methods are all dynamically implemented, and the final effect is the same. If you want to To learn more about canvas, please refer to

HTML5 Development Manual.

The above is the detailed content of How to draw a circle using canvas? Three dynamic implementation methods for drawing circles using canvas. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Related articles

See more