在Canvas画布上如何绘制圆弧?

运行效果

在Canvas画布上绘制圆弧。例如上图中的两个圆弧,这两个椭圆圆弧开始角度均为0°,结束角度均为135*(π/180),然而,它们最终呈现出的效果差异显著,同学们可以想一想这是为什么?这主要是由于在arc方法中anticlockwise参数的不同设置所导致的。如果anticlockwise设置为true时,则会按逆时针方向绘制135度圆弧,出现左侧图中的效果,否则会按顺时针方向绘制135度圆弧,出现右侧图中的效果。

以下是一个网页示例,展示了如何在Canvas上绘制圆弧:

示例效果与源代码:

运行效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<!DOCTYPE html>
<html lang="zh_CN">

<head>
<title>绘制基本图形2</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="图形系统开发实战:基础篇 示例">
<meta name="author" content="hjq">
<meta name="keywords" content="canvas,anygraph,javascript,图形">
</head>

<body style="margin:10px;">
<canvas id="canvas" width="550" height="300" style="border:solid 1px #CCCCCC; box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.5);"/>
</body>
<script>
// 从页面中获取画板对象
let canvas = document.getElementById('canvas');
// 从画板中获取“2D渲染上下文”对象
let ctx = canvas.getContext('2d');

// 绘制一个蓝色的圆弧
ctx.beginPath();
ctx.arc(150, 150, 100, 0, 135 * Math.PI / 180, true);
ctx.lineWidth = 8;
ctx.strokeStyle = "blue";
ctx.stroke();

// 绘制另一个蓝色的圆弧
ctx.beginPath();
ctx.arc(400, 150, 100, 0, 135 * Math.PI / 180, false);
ctx.lineWidth = 8;
ctx.strokeStyle = "blue";
ctx.stroke();
</script>

</html>

在这个示例中,我们首先定义了一个Canvas元素,并设置了其宽度和高度。然后,通过JavaScript中canvas.getContext()方法获取从画板中获取“2D渲染上下文”对象。
接下来,我们绘制一个按逆时针方向旋转的135度的蓝色圆弧,和一个按顺时针方向旋转的135°的蓝色圆弧,使用的关键方法是arc()方法。
需要注意的是,参数结束角度需要由135度转化为弧度,即135*Math.PI/180。其中参数anticlockwise设置为true时,将会按逆时针方向绘制135°圆弧,否则将会按顺时针方向绘制135°圆弧。