使用 HTML5 Canvas 绘制贝塞尔曲线

javascriptweb developmentfront end scripts

HTML5 Canvas 的 bezierCurveTo() 功能可用于生成贝塞尔曲线。上下文点、两个控制点和一个终点用于定义贝塞尔曲线。与二次曲线相比,贝塞尔曲线使用两个控制点而不是一个控制点来指定,这使我们能够生成更复杂的曲线。lineWidth、strokeStyle 和 lineCap 属性可用于自定义贝塞尔曲线的外观。

什么是贝塞尔曲线

贝塞尔曲线可能出现在桌面出版和图形程序中。贝塞尔曲线提供了更多的形式控制。由于曲线的起点遵循其控制路径,我们可以生成循环或反向的曲线。当您需要在 Visio 风格的流程图中连接两个形状时,它们是完美的选择。

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

  • 二次贝塞尔曲线

  • 三次贝塞尔曲线

让我们逐一查看,以便更好地理解 HTML5 画布中的贝塞尔曲线。

二次贝塞尔曲线

二次贝塞尔曲线是 2 次贝塞尔曲线。度,通过三个点(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>

输出

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

三次贝塞尔曲线

三次贝塞尔曲线是 3 阶贝塞尔曲线,由四个点(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>

输出

运行上述脚本,将生成一个输出,该输出由使用贝塞尔曲线在网页上绘制的曲线组成。

示例

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

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

            // 使用 DOM 获取画布元素
            var canvas = document.getElementById('mycanvas');
            
            // 确保在不支持画布时不执行
            if (canvas.getContext){
            
            	// 使用 getContext 使用画布进行绘图
               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>

输出

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


相关文章