Canvas画布上绘制两个椭圆圆弧开始角度和结束角度都一样,为什么效果差异显著?

运行效果

在Canavas画布上绘制两个椭圆圆弧,这两个椭圆圆弧开始角度均为45°,结束角度均为225°,
然而,它们最终呈现出的效果差异显著,这主要是由于在ellipse()方法中anticlockwise参数的不同设置所导致的。
如果anticlockwise参数设置为true时,则会按逆时针方向绘制该椭圆圆弧,出现左侧图中的效果,
否则会按顺时针方向绘制该椭圆圆弧,出现右侧图中的效果。

以下是一个网页示例,展示了如何在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
38
<!DOCTYPE html>
<html lang="zh_CN">

<head>
<title>绘制基本图形(椭圆弧)</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="480" 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');

// 按顺时针方向绘制一个开始角度为45°,结束角度为225°的椭圆弧
ctx.beginPath();
ctx.ellipse(150, 150, 100, 60, 0, 45 * (Math.PI /180), 225 * (Math.PI /180), false);
ctx.strokeStyle = "blue";
ctx.lineWidth = 6;
ctx.stroke();

// 按逆时针方向绘制一个开始角度为45°,结束角度为225°的椭圆弧
ctx.beginPath();
ctx.ellipse(350, 150, 100, 60, 0, 45 * (Math.PI /180), 225 * (Math.PI /180), true);
ctx.strokeStyle = "blue";
ctx.lineWidth = 6;
ctx.stroke();

</script>

</html>

在这个示例中,我们首先定义了一个Canvas元素,并设置了其宽度和高度。然后,通过JavaScript中canvas.getContext()方法获取从画板中获取“2D渲染上下文”对象。
接下来,绘制两个椭圆圆弧。
首先使用canvas提供的beginPass()方法告诉canvas开始新的路径,
然后使用canvas提供的ellipse()方法绘制两个椭圆圆弧,其中参数开始角度都设置为45°,结束角度都设置为225°;
需要注意,在这里其中一个椭圆弧的anticlockwise参数设置为false,另一个设置为true。
最后使用stroke()方法绘制当前路径。然而,它们最终呈现出的效果差异显著。这主要是由于在ellipse()方法中anticlockwise参数的不同设置所导致的。如果anticlockwise参数设置为false时,则会按顺时针方向绘制该椭圆圆弧,否则会按逆时针方向绘制该椭圆圆弧。