Fuzzy Curves

Every step turtles walk a fixed amount forward and turn their head based off of the a*sin(x) + b*cos(y) of their position

Log in to post a comment.

// You can find the Turtle API reference here: https://turtletoy.net/syntax
Canvas.setpenopacity(1);

// Global code will be evaluated once.
const turtles = [];
let seed = 1000; // min=1 max=1000000 step=1
const bits = 20; 
const samples = 150000; 
const mod = 1<<bits;
const num_turtles = 29; // min = 1 max = 100 step = 1
const steps = 10000; // min = 10 max = 10000 step = 1
const forward_step_size = 0.08; // min = 0.01 max = .15 step = 0.01
const spawn_range = 61; // min = 0 max = 100 step = 1
const sin_modifier = 2.5; // min = 0 max = 10 step = 0.1
const cos_modifier = 6.6; // min = 0 max = 10 step = 0.1

for(let i = 0; i < num_turtles; i++) {
    let turtle = new Turtle();
    turtle.penup();
    turtle.setheading(random() * 360);
    let radius = random() * spawn_range;
    let theta = random() * Math.PI * 2;
    turtle.setx(radius * Math.cos(theta));
    turtle.sety(radius * Math.sin(theta));
    turtle.pendown();
    turtles.push(turtle);
}

// The walk function will be called until it returns false.
function walk(i) {
    for(let j in turtles) {
        turtles[j].right(sin_modifier * Math.sin(turtles[j].x()) + cos_modifier * Math.cos(turtles[j].y())); 
        turtles[j].forward(forward_step_size);
        
    }
    return i < steps;
}

////////////////////////////////////////////////////////////////
// Pseudorandom number generator. Created by Reinder Nijhoff 2024
// https://turtletoy.net/turtle/a2274fd1fe
////////////////////////////////////////////////////////////////
function random() { // returns a number [0, 1[
    let r = 1103515245 * (((seed+=12345) >> 1) ^ seed);
    r = 1103515245 * (r ^ (r >> 3));
    r = r ^ (r >> 16);
    return (r % mod) / mod;
}