此代码在画布中生成希尔伯特曲线,我试图在每次调用ctx.lineTo
时从中创建动画。我尝试了使用setInterval
和requestAnimationFrame
的许多解决方案,但是它们都不起作用。
这里的代码:
const bw = 904;
const bh = 820;
const pixelX = 10;
const canvas = document.getElementById("board");
canvas.setattribute("width",bw);
canvas.setattribute("height",bh);
const ctx = canvas.getcontext("2d");
const hilbertCurve = (x,y,Xi,Xj,Yi,Yj,n) => {
if (n < 0) {
ctx.lineTo(x + (Xi + Yi) / 2,y + (Xj + Yj) / 2);
} else {
hilbertCurve(x,Yi / 2,Yj / 2,Xi / 2,Xj / 2,n - 1);
hilbertCurve(x + Xi / 2,y + Xj / 2,n - 1);
hilbertCurve(
x + Xi / 2 + Yi / 2,y + Xj / 2 + Yj / 2,n - 1
);
hilbertCurve(
x + Xi / 2 + Yi,y + Xj / 2 + Yj,-Yi / 2,-Yj / 2,-Xi / 2,-Xj / 2,n - 1
);
}
};
function draw() {
ctx.beginPath();
hilbertCurve(0,bw,bh,7);
ctx.strokeStyle = "red";
ctx.stroke();
}
function init() {
window.requestAnimationFrame(draw);
}
init();
<canvas id="board"></canvas>