J'aimerais dessiner une ellipse à partir d'un cx and cy
ainsi qu'une propriété de largeur et de hauteur de l'ellipse elle-même.
Vous trouverez ci-dessous un code de travail pour cette configuration :
Mais je souhaite maintenant générer une sorte d'"affichage de la progression" en peignant un pourcentage (de 0 à 100) de l'ellipse au lieu de l'ellipse complète.
J'ai joint un graphique pour illustrer le tout :
Je n'ai pas vraiment d'idée précise sur la manière de procéder. Je préférerais une solution qui me permette de ne pas redimensionner le canevas - juste pour des raisons de performance et j'espère que quelqu'un a une bonne idée pour résoudre mon problème.
let canvas = document.getElementById("canvas")
let ctx = canvas.getContext("2d");
canvas.width = 400;
canvas.height = 280;
ctx.fillStyle = "black";
ctx.fillRect(0, 0, canvas.width, canvas.height)
let ellipse = function(cx, cy, w, h) {
let lx = cx - w / 2,
rx = cx + w / 2,
ty = cy - h / 2,
by = cy + h / 2;
let magic = 0.551784;
let xmagic = magic * w / 2,
ymagic = h * magic / 2;
let region = new Path2D();
region.moveTo(cx, ty);
region.bezierCurveTo(cx + xmagic, ty, rx, cy - ymagic, rx, cy);
region.bezierCurveTo(rx, cy + ymagic, cx + xmagic, by, cx, by);
region.bezierCurveTo(cx - xmagic, by, lx, cy + ymagic, lx, cy);
region.bezierCurveTo(lx, cy - ymagic, cx - xmagic, ty, cx, ty);
ctx.strokeStyle = "red";
ctx.lineWidth = "10";
region.closePath();
ctx.stroke(region);
}
ellipse(canvas.width / 2, canvas.height / 2, 300, 120)
<canvas id="canvas"></canvas>