Polygon code: Rotating shapes
Base code: Willmott squares

```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.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.forward(r);
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;
}```