How to Draw Smooth Curve Through Multiple Points using JavaScript ?

In this article, we will Draw a Smooth Curve Through Multiple Points using JavaScript.
Approach: Drawing a smooth curve with multiple points is a challenging task. There are many algorithms that can help us to draw a curve using particular points. Bezier Curve is one of the curve drawing techniques. There is always lots of discussion around how to draw a smooth curve through multiple numbers of points using JavaScript. So, we are given to draw a smooth curve through the multiple numbers of points. For drawing a line we should have a slope of the line. So here we calculate the slope of a line by taking multiple inputs of x and y. For drawing a smooth curve we should have multiple numbers of inputs/points by which we can draw the smooth curve. Here we are trying to get a random number for which we are trying to draw a smooth curve. Here, we give you some ideas about drawing a smooth curve using multiple numbers of points. Please go through this code and we will explain it further.Â
Example: This example shows the use of the above-explained approach.
html
| <h1style="color:green">     zambiatek </h1>  Â<canvasid="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> | 
Output:
 
Explanation: When we run this program, Every time it takes random inputs and this is why it generates a new smooth curve on every execution.
- Pre-requisite: HTML Canvas Basics
- Reference for canvas object is stored in variable ‘cv’ using DOM concept.
- Without having the drawing context of the canvas nothing can be drawn on it.
 var cv = document.getElementById("GFG");
        var ctx = cv.getContext("2d");
- Gradient function that returns the slope of the line.
function gradient(a, b) {
            return (b.y-a.y)/(b.x-a.x);
        }
- The beginPath method is used to start or reset the path.
- The MoveTo method is used to move the path to the specified point in the canvas.
  ctx.beginPath();
        ctx.moveTo(points[0].x, points[0].y);
- Stroke is used to draw the path you have defined with all those methods.
ctx.stroke();
 
				 
					


