Draw the Smooth Line Through the Points
How to Draw Smooth Curve Through Multiple Points using JavaScript ?
Drawing a smooth curve with the multiple points is a challenging task. There are many algorithms that can help us to draw a curve using particular points. Bezier Curve is the one of the curve drawing technique. There is always lots of discussion around how to draw a smooth curve through the 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 and 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:
<!DOCTYPE html>
<
html
>
<
head
>
<
title
>
Smooth Curve
</
title
>
<
style
>
#GFG {
border: 2px solid black;
}
h1{
color: green;
}
</
style
>
</
head
>
<
body
>
<
center
>
<
h1
>GeeksforGeeks</
h1
>
<
canvas
id
=
"GFG"
width
=
"600"
height
=
"400"
>
</
canvas
>
</
center
>
<
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>
</
body
>
</
html
>
Output:
Explanation: When we run this program, Every time it takes random inputs and this is why it generate 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 drawing context of canvas nothing can be drawn on it.
var cv = document.getElementById("GFG"); var ctx = cv.getContext("2d");
- Gradient function that return slope of the line.
function gradient(a, b) { return (b.y-a.y)/(b.x-a.x); }
- BeginPath method are used to start or reset the path.
- MoveTo method are 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();
Draw the Smooth Line Through the Points
Source: https://www.geeksforgeeks.org/how-to-draw-smooth-curve-through-multiple-points-using-javascript/