function torusKnotR(ctx, p, q, r) {
let da = (2 * Math.PI * p) / q;
ctx.translate(r, r);
ctx.beginPath();
let fn = ctx.moveTo.bind(ctx);
for (let i = 0; i < q; i++) {
let a = i * da;
fn(r * Math.cos(a), r * Math.sin(a));
fn = ctx.lineTo.bind(ctx);
}
ctx.closePath();
ctx.strokeJoin = 'round';
ctx.stroke();
}