在Canvas画布上如何利用二次贝塞尔曲线绘制连续的曲线?

在Canvas画布上利用二次贝塞尔曲线绘制连续的曲线,通常涉及到将多个二次贝塞尔曲线段链接在一起,使得每一段的终点成为下一段的起点。这种方法允许我们创建平滑且连续的路径。
如图,该曲线由5条曲线段组成,该曲线绘制方法如下,首先使用beginPath方法开始路径,然后使用moveTo方法指定画笔的当前位置。
接着使用quadraticCurveTo方法开始绘制第一条曲线段,
需要注意的是,在quadraticCurveTo()执行后,画布会将曲线的终点作为新的当前位置,在绘制第二条曲线段时,会以该位置作为曲线的起点绘制新的曲线段,同理绘制第二条曲线后,曲线的终点位置将作为新的曲线的起点,
同理可连续绘制第三条、第四条、第五条曲线段。按照路径的绘制流程,使用strokeStyle设置曲线颜色,最后使用stroke方法对连续的曲线进行描边,将连续的曲线绘制在画布上。
如此,我们就完成了这段连续曲线的绘制。

示例效果与源代码

运行效果

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

<head>
<title>绘制曲线和路径(quadraticCurveTo)</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,图形">
<script src="../js/helper.js"></script>
</head>

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

// 开始绘制路径
ctx.beginPath();
ctx.moveTo(50, 150);
ctx.quadraticCurveTo(125, 20, 200, 150);
ctx.quadraticCurveTo(275, 280, 350, 150);
ctx.quadraticCurveTo(425, 20, 500, 150);
ctx.quadraticCurveTo(575, 280, 650, 150);
ctx.quadraticCurveTo(725, 20, 800, 150);

// 描边
ctx.lineWidth = 4;
ctx.strokeStyle = "red";
ctx.stroke();
</script>

</html>

尝试一下 »