El concepto de este tipo de curva es similar a la de Bezier. La diferencia es que solo hay un punto de atracción.
Confeccionaremos un ejemplo que muestre una curva de este tipo y desplazaremos el punto de atracción en forma vertical (cada vez que lo desplacemos borraremos el canvas y volveremos a graficar):
<!DOCTYPE HTML>
<html>
<head>
<title>Título de la página</title>
<meta charset="UTF-8">
<script type="text/javascript">
function retornarLienzo(x) {
var canvas = document.getElementById(x);
if (canvas.getContext) {
var lienzo = canvas.getContext("2d");
return lienzo;
} else
return false;
}
var fila=0;
function dibujar() {
var lienzo=retornarLienzo("lienzo1");
if (lienzo) {
lienzo.clearRect(0,0,300,300);
lienzo.strokeStyle="rgb(255,0,0)";
lienzo.beginPath();
lienzo.moveTo(0,150);
lienzo.quadraticCurveTo(150,fila,300,150);
lienzo.stroke();
fila++;
if (fila>300)
fila=0;
}
}
function iniciar() {
setInterval(dibujar,10);
}
</script>
</head>
<body onLoad="iniciar()">
<canvas id="lienzo1" width="300" height="300">
Su navegador no permite utilizar canvas.
</canvas>
</body>
</html>
El resultado en el navegador al cargar esta página es:

La función inicar se ejecuta una vez que la página se encuentra cargada, en esta función llamamos a setInterval y le pasamos como parámetro la función que debe ejecutarse cada 10 milisegundos:
function iniciar() {
setInterval(dibujar,10);
}
En la función dibujar lo primero que hacemos el borrar el contenido del canvas:
lienzo.clearRect(0,0,300,300);
Definimos el color de la línea, inicializamos el camino, mediante el método moveTo definimos el primer punto fijo de la curva y seguidamente llamamos la método quadraticCurveTo pasando como parámetro el punto movil y los dos últimos parámetros indican el segundo punto fijo de la curva:
lienzo.strokeStyle="rgb(255,0,0)";
lienzo.beginPath();
lienzo.moveTo(0,150);
lienzo.quadraticCurveTo(150,fila,300,150);
lienzo.stroke();
Incrementamos la variable global que permite modificar en cada paso la ubicación del punto de atracción:
fila++;
Si la variable supera el valor 300 volvemos a asignarle el valor 0:
if (fila>300)
fila=0;