用Canvas的arc函数绘制圆和图形

Canvas没有circle函数来画一个圆。在Canvas绘图API中,提供了一个函数来绘制不同的弧,包括圆。arc函数可接受以下参数,具体说明参见表

把角度转换为弧度

arc函数使用的angle参数指的是radian(弧度)而不是degree(角度)。如果原来习惯于使用角度,那么就需要在把angle参数值传入arc函数之前将角度值转换成弧度值。可以用下面的公式来转换角度单位:

Radians = π/180 X degrees

下图用角度和弧度两种单位显示了一些常用的角度值。在Canvas中绘制圆弧时,该图指明了角度值的位置,还能帮助我们很容易地选择起点角度与终点角度参数

用arc函数绘制不同的圆弧

var canvas = document.getElementById('game');
var ctx = canvas.getContext('2d');
ctx.filSytle = "rgba(200,200,100,0.6)";

//绘制下半圆
ctx.beginPath();
ctx.arc(100,110,50,0,Math.PI);
ctx.closePath();
ctx.fill();

//绘制上半圆
ctx.beginPath();
ctx.arc(100,90,50,0,Math.PI,true);
ctx.closePath();
ctx.fill();

//绘制左半圆
ctx.beginPath();
ctx.arc(230,100,50, Math.PI/2,Math.PI*3/2);
ctx.closePath();
ctx.fill();

//绘制右半圆
ctx.beginPath();
ctx.arc(250, 100, 50 , Math.PI*3/2, Math.PI/2); 
ctx.closePath();
ctx.fill();
// 绘制一个接近于圆的形状
ctx.beginPath();
ctx.arc(180, 240, 50 , Math.PI*7/6, Math.PI*2/3); 
ctx.closePath();
ctx.fill();
	
// 绘制一段小圆弧
ctx.beginPath();
ctx.arc(150, 250, 50 , Math.PI*7/6, Math.PI*2/3, true); 
ctx.closePath();
ctx.fill();

我们已经在arc函数中使用不同startAngle和endAngle参数来绘制6个不同的圆弧形状。这些圆弧形状演示了arc函数是如何工作的。
让我们回头看一下角度与弧度之间的关系并关注于上半圆,上半圆开始于角度0并结束于角度π,并从逆时针方向绘制圆弧。如果我们看一下圆,它看起就下图这样的图形。

如果需要从210°开始到120°结束,顺时钟进行绘制,将会得到如下图所示的圆弧

将画圆功能封装成函数

将原来用来画圆的代码放到一个函数中,然后使用for循环在Canvas上随机绘制出5个圆

function drawCircle(ctx, x, y, radius) {
	ctx.fillStyle = "rgba(200, 200, 100, .9)";
	ctx.beginPath();
	ctx.arc(x, y, radius, 0, Math.PI*2, true); 
	ctx.closePath();
	ctx.fill();
}

$(function(){		 			
	var canvas = document.getElementById("game");  
	var ctx = canvas.getContext("2d");
    
	var circleRadius = 10;

	var width = canvas.width;
	var height = canvas.height;
	
	// random 5 circles
	var circlesCount = 5;
	for (var i=0;i<circlesCount;i++) {		
		var x = Math.random()*width;
		var y = Math.random()*height;	 
		drawCircle(ctx, x, y, circleRadius);	
	}
});

在JavaScript中,可以使用Math.random()函数生成随机数。
random函数没有参数。它总是返回0~1之间的一个浮点数,这个数大于等于0且小于1。
有两种常用的方式来使用random函数。一种是在给定范围内生成随机数。另一种是生成true或false布尔值