Semi circles - multiply/modulo

As seen on Ruud's feed: twitter.com/ruuddotorg/status/1444090166151237632

Log in to post a comment.

// LL 2021
// As seen on Ruud's feed: https://twitter.com/ruuddotorg/status/1444090166151237632

const mult = 3; // min=2 max=100 step=1
const mod = 197; // min=1 max=1000 step=1
const slow = 0; // min=0 max=1 step=1 (No,Yes)

const turtle = new Turtle(); turtle.up(); 
steps = 500, astep = Math.PI / (steps-1);

function walk(i) {
    if (i == 0) {
        current_x = 1, iterations = 1, visited = { x: 1 };
        max = x = current_x, nx = (mult * x) % mod;
        while (!visited[nx] && iterations++ < 10000) {
            visited[x = nx] = 1;
            nx = (mult * x) % mod;
            scale = 190 / (max = Math.max(max, Math.max(x, nx)));
        }
    }
    if ((i % steps) == 0) {
        next_x = (mult * (old_x = current_x)) % mod;
        radius = Math.abs(next_x - current_x) / 2;
        center_x = (next_x + current_x) / 2;
        current_x = next_x; j=0;
    }
    a = j++ * astep; if (current_x > old_x) a = Math.PI - a;
    x = -95 + (center_x + Math.cos(a) * radius) * scale;
    y = Math.sin(a) * radius * scale * ((i/steps|0)&1 ? 1 : -1);
    turtle.goto(x, y); turtle.down();
    if (slow) { start = Date.now(); while (Date.now()-start < 1); }
    return (i/steps+1) < iterations;
}