Я хотел бы нарисовать эллипс с учетом cx and cy
position-property и свойства width и height самого эллипса.
Ниже вы можете найти рабочий код для этой настройки:
Но теперь я хочу создать своего рода «отображение прогресса», рисуя процент (от 0 до 100) эллипса вместо полного эллипса.
Я приложил сюда графическое изображениечтобы проиллюстрировать все это:
У меня нет четкого представления, как это сделать.Я бы предпочел решение, в котором я могу обойтись без изменения размера холста - просто из соображений производительности, и я надеюсь, что у кого-то есть хорошая идея, как решить мою проблему.
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>