viewof m = {
const context = DOM.context2d(width, height);
const scale = width / viewbox.width * 1.8;
context.lineCap = "round";
context.lineJoin = "round";
for (let m = 0; true; m = (m + 1) % M) {
context.save();
context.fillStyle = "rgba(255, 255, 255, 0.04)";
context.fillRect(0, 0, width, height);
context.translate(width / 2, height / 2);
context.scale(scale, scale);
context.translate(-viewbox.width / 2, -viewbox.height / 2);
context.beginPath();
for (let t = 0; t < q; ++t) {
const a = t * 2 / q * Math.PI;
let p = [0, 0];
for (let i = 0; i < m; ++i) {
p = add(p, mul(DFT[i], expim(a * K[i])));
}
if (t === 0) context.moveTo(...p);
else context.lineTo(...p);
}
context.closePath();
context.lineWidth = 1.5 / scale;
context.stroke();
context.restore();
context.canvas.value = m;
yield context.canvas;
}
}