JavaScript 如何绘制通过多个点的平滑曲线

JavaScript 如何绘制通过多个点的平滑曲线

在本文中,我们将使用JavaScript绘制通过多个点的平滑曲线。

方法: 绘制通过多个点的平滑曲线是一个具有挑战性的任务。有许多算法可以帮助我们使用特定的点来绘制曲线。贝塞尔曲线是曲线绘制技术之一。关于如何使用JavaScript绘制通过多个点的平滑曲线始终有很多讨论。所以,我们需要绘制通过多个点的平滑曲线。为了绘制一条线,我们应该有线的斜率。所以这里我们通过多个x和y的输入来计算线的斜率。为了绘制平滑曲线,我们应该有多个输入/点,通过这些输入/点我们可以绘制平滑曲线。这里我们尝试获取一个随机数,用于绘制平滑曲线。在这里,我们给出了一些关于使用多个点绘制平滑曲线的想法。请查看这段代码,我们将进一步解释。

示例: 此示例展示了上述方法的用法。

<h1 style="color:green"> 
    GeeksforGeeks 
</h1> 
  
<canvas id="GFG" width="600" height="400" 
        style="border: 2px solid black"> 
</canvas> 
  
<script> 
    var cv = document.getElementById("GFG"); 
    var ctx = cv.getContext("2d"); 
          
    function gradient(a, b) { 
        return (b.y-a.y)/(b.x-a.x); 
    } 
          
    function bzCurve(points, f, t) { 
        if (typeof(f) == 'undefined') f = 0.3; 
        if (typeof(t) == 'undefined') t = 0.6; 
      
        ctx.beginPath(); 
        ctx.moveTo(points[0].x, points[0].y); 
      
        var m = 0; 
        var dx1 = 0; 
        var dy1 = 0; 
          
        var preP = points[0]; 
          
        for (var i = 1; i < points.length; i++) { 
            var curP = points[i]; 
            nexP = points[i + 1]; 
            if (nexP) { 
                m = gradient(preP, nexP); 
                dx2 = (nexP.x - curP.x) * -f; 
                dy2 = dx2 * m * t; 
            } else { 
                dx2 = 0; 
                dy2 = 0; 
            } 
              
            ctx.bezierCurveTo( 
                preP.x - dx1, preP.y - dy1, 
                curP.x + dx2, curP.y + dy2, 
                curP.x, curP.y 
            ); 
          
            dx1 = dx2; 
            dy1 = dy2; 
            preP = curP; 
        } 
        ctx.stroke(); 
    } 
      
    // Generate random data 
    var lines = [];     
    var X = 10; 
    var t = 40; // control the width of X. 
    for (var i = 0; i < 100; i++ ) { 
        Y = Math.floor((Math.random() * 300) + 50); 
        p = { x: X, y: Y }; 
        lines.push(p); 
        X = X + t; 
    } 
      
    // Draw smooth line 
    ctx.setLineDash([0]); 
    ctx.lineWidth = 2; 
    ctx.strokeStyle = "green"; 
    bzCurve(lines, 0.3, 1); 
</script>
HTML

输出:

JavaScript 如何绘制通过多个点的平滑曲线

说明: 当我们运行这个程序时,每次它都会采用随机输入,这就是为什么它在每次执行时都会生成一个新的平滑曲线。

  • 先决条件:HTML Canvas基础知识
  • 使用DOM概念,将canvas对象的引用存储在变量‘cv’中。
  • 如果没有canvas的绘图上下文,就无法在其上绘制任何内容。
 var cv = document.getElementById("GFG");
var ctx = cv.getContext("2d");
JavaScript
  • 渐变函数返回线的斜率。
function gradient(a, b) {
            return (b.y-a.y)/(b.x-a.x);
}
JavaScript
  • The beginPath方法用于开始或重置路径。
  • The MoveTo方法用于将路径移动到画布上的指定点。
  ctx.beginPath();
ctx.moveTo(points[0].x, points[0].y);
JavaScript
  • Stroke 用于绘制您使用所有这些方法定义的路径。
ctx.stroke();
JavaScript

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册