使用HTML5 Canvas绘制贝塞尔曲线


HTML5 Canvas 的 `bezierCurveTo()` 方法可以用来生成贝塞尔曲线。贝塞尔曲线由一个起始点、两个控制点和一个结束点定义。与二次曲线相比,贝塞尔曲线使用两个控制点而不是一个控制点来定义,这允许我们创建更复杂的曲线。可以使用 `lineWidth`、`strokeStyle` 和 `lineCap` 属性来自定义贝塞尔曲线的样式。

什么是贝塞尔曲线?

贝塞尔曲线可能出现在桌面出版和图形程序中。贝塞尔曲线提供了更强大的形状控制。由于曲线的起点遵循其控制路径,我们可以创建环绕或反向的曲线。当需要在 Visio 风格的流程图中连接两个形状时,它们非常理想。

贝塞尔曲线可以通过两种不同的方式绘制

  • 二次贝塞尔曲线

  • 三次贝塞尔曲线

让我们逐一了解使用 HTML5 canvas 绘制贝塞尔曲线。

二次贝塞尔曲线

二次贝塞尔曲线是 2nd 次的贝塞尔曲线,由三个点 (A0、A1 和 A2) 定义。

示例

让我们来看一下下面的示例,它使用二次贝塞尔曲线绘制曲线。

<!DOCTYPE html>
<html>
   <body>
      <canvas id="mytutorial" width="300" height="150"></canvas>
      <script>
      var c = document.getElementById("mytutorial");
      var ctx = c.getContext("2d");
      ctx.beginPath();
      ctx.moveTo(20, 20);
      ctx.quadraticCurveTo(25, 105, 205, 25);
      ctx.stroke();
      </script>
   </body>
</html>

输出

当脚本执行时,它将生成一个输出,在网页上显示使用二次贝塞尔曲线绘制的曲线。

三次贝塞尔曲线

三次贝塞尔曲线是 3rd 次的贝塞尔曲线,由四个点 (A0、A1、A2 和 A4) 定义。曲线从 A0 开始,在 A3 结束。

示例

在下面的示例中,我们使用三次贝塞尔曲线绘制曲线。

<!DOCTYPE html>
<html>
   <body>
      <canvas id="mytutorial" width="300" height="150"></canvas>
      <script>
      var c = document.getElementById("mytutorial");
      var ctx = c.getContext("2d");
      ctx.beginPath();
      ctx.moveTo(20, 20);
      ctx.bezierCurveTo(30, 110, 210, 110, 210, 30);
      ctx.stroke();
      </script> 
   </body>
</html>

输出

运行上述脚本后,它将生成一个输出,其中包含使用贝塞尔曲线在网页上绘制的曲线。

示例

您可以尝试运行以下代码,使用 canvas 绘制贝塞尔曲线。

<!DOCTYPE HTML>
<html>
   <head>
      <style>
         #test {
            width: 100px;
            height:100px;
            margin: 0px auto;
         }
      </style>
      <script>
         function drawShape(){

            // get the canvas element using the DOM
            var canvas = document.getElementById('mycanvas');

            // Make sure we don't execute when canvas isn't supported
            if (canvas.getContext){

               // use getContext to use the canvas for drawing
               var ctx = canvas.getContext('2d');
               ctx.beginPath();
               ctx.moveTo(75,40);
               ctx.bezierCurveTo(75,37,70,25,50,25);
               ctx.bezierCurveTo(20,25,20,62.5,20,62.5);
               ctx.bezierCurveTo(20,80,40,102,75,120);
               ctx.bezierCurveTo(110,102,130,80,130,62.5);
               ctx.bezierCurveTo(130,62.5,130,25,100,25);
               ctx.bezierCurveTo(85,25,75,37,75,40);
               ctx.fill();
            } else {
               alert('You need Safari or Firefox 1.5+ to see this demo.');
            }
         }
      </script>
   </head>
   <body id = "test" onload = "drawShape();">
      <canvas id = "mycanvas"></canvas>
   </body>
</html>

输出

当用户尝试执行脚本时,它将在网页上显示使用贝塞尔曲线绘制的心形图像。

更新于:2023年10月11日

617 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.