noise

noise by gpt & veryblueofnaman

Log in to post a comment.

// Title: Organic Cube Grid
// Author: Veryblueofnaman

const turtle = new Turtle();
const cols = 6;
const rows = 6;
const size = 40;

function setup() {
    turtle.penup();
    turtle.goto(-cols * size / 2, -rows * size / 2);
    turtle.pendown();
}

function walk(i) {
    const x = (i % cols) * size - (cols * size) / 2;
    const y = Math.floor(i / cols) * size - (rows * size) / 2;
    const rot = Math.random() * 360;
    drawCube(x, y, size, rot);
    return i < cols * rows - 1;
}

function drawCube(x, y, size, rot) {
    turtle.penup();
    turtle.goto(x, y);
    turtle.setheading(rot);
    turtle.pendown();

    // Outer distorted square with curvature
    for (let i = 0; i < 4; i++) {
        let step = size / 8;
        for (let j = 0; j < 8; j++) {
            turtle.forward(step + Math.random() * 2 - 1);
            turtle.right(5 + Math.random() * 2);
        }
        turtle.right(90 + Math.random() * 10 - 5);
    }

    // Random noise lines
    for (let n = 0; n < 3; n++) {
        turtle.penup();
        turtle.goto(x + (Math.random() - 0.5) * size, y + (Math.random() - 0.5) * size);
        turtle.pendown();
        for (let k = 0; k < 5; k++) {
            turtle.forward(Math.random() * size / 3);
            turtle.right(60 + Math.random() * 30);
        }
    }

    // Random triangles
    for (let t = 0; t < 2; t++) {
        turtle.penup();
        turtle.goto(x + (Math.random() - 0.5) * size, y + (Math.random() - 0.5) * size);
        turtle.setheading(Math.random() * 360);
        turtle.pendown();
        let triSize = size / 2 + Math.random() * size / 3;
        for (let s = 0; s < 3; s++) {
            turtle.forward(triSize);
            turtle.right(120);
        }
    }
}