Adjustable polygons

Polygon code: Rotating shapes
Base code: Willmott squares

Log in to post a comment.

Canvas.setpenopacity(1);

let num_sides = 4; // min=2, max=25, step=1
let shapes_per_size = 40; //min=10, max=100, step=5

let base_shift = 0; // min=0, max=360, step=10
let cos_scalar = 100; // min=0, max=360, step=10
let freq_scalar = 10; // min=0, max=360, step=10
// You probably want to use 1, 2, or 100 for this. IE L1, L2, and approx Linfinity
let norm = 2; // min=0, max=100, step=2


// Global code will be evaluated once.
const turtle = new Turtle();
turtle.radians();
turtle.penup();
turtle.goto(-50,-20);
turtle.pendown();

const width=195;
const height=195;


const shape_spacing=width/(shapes_per_size);
const shape_size=width/(shapes_per_size);

const minX=-(width)/2 ;
const minY=-(height)/2;

function draw_poly(x,y,t, c, r, a) {
    const side = 2*Math.sin(Math.PI/c) * r;
    
    t.penup();
    t.goto(x,y);
    t.setheading(a);
    t.forward(r);
    t.setheading(a+Math.PI/2);
    t.pendown();
    
    t.right(Math.PI/c);
    for (let i=0; i<c; i++) {
        t.forward(side);
        t.right(Math.PI*2/c);
    }
}

// The walk function will be called until it returns false.

function walk(i) {
    for(let y=0;y<shapes_per_size;++y) {
        for(x=0;x<shapes_per_size;++x) {
            
            x_coord = minX+x*shape_spacing+shape_spacing/2
            y_coord = minY+y*shape_spacing+shape_spacing/2
            
            x_norm = Math.pow(x_coord, norm)
            y_norm = Math.pow(y_coord, norm)
            
            // Between 0-1 of how far away it is
            coord_norm = Math.pow(x_norm+y_norm, 1/norm)/200
            
            angle = base_shift+cos_scalar*Math.cos(coord_norm*freq_scalar)
            angle = 2*Math.PI*(angle/360)
 
            
            draw_poly(x_coord, y_coord, turtle, num_sides, shape_size/1.5, angle)
        }
    }
    return false;
}