Schotter by Georg Nees, also known as Cubic Disarray.
Based on the ALGOL version of the artwork
Log in to post a comment.
// You can find the Turtle API reference here: https://turtletoy.net/syntax Canvas.setpenopacity(1); const PI2 = Math.PI * 0.5; const PI4 = Math.PI * 0.25; const SQRT2 = Math.sqrt(2) const STARTX = -100 const STARTY = -100 var marginx = 0 var marginy = 0 var iter = 0; const cols = 12 // min=8, max=100, step=1 const rows = 22 // min=8, max=100, step=1 const side = 6; // min=2, max=20, step=1 var r = side * SQRT2; // Global code will be evaluated once. const turtle = new Turtle(); turtle.penup(); turtle.goto(-100,-100); // The walk function will be called until it returns false. function walk(i) { marginx = (200 - cols*r)/2 if (marginx<0) marginx=0 for (row = 1; row <= rows; row++) { for (col = 1; col <= cols; col++) { drawQuad(col, row); } } return false } function drawQuad(p, q) { step = iter / 264; d = {min:-side * step, max: side * step}; a = { min: PI4 * (1 - step), max: PI4 * (1 + step) }; psi = map(Math.random(), 0,1, a.min, a.max) x = STARTX + marginx + p*r + map(Math.random(),0,1,d.min, d.max) y = STARTX + marginy + q*r + map(Math.random(),0,1,d.min, d.max) for (s = 0; s <= 4; s++) { if (s==0) turtle.penup() else turtle.pendown() psi += PI2; turtle.goto(x+side * Math.cos(psi), y+side * Math.sin(psi)); } turtle.penup() iter += 1; } function map(number, inMin, inMax, outMin, outMax) { return (number - inMin) * (outMax - outMin) / (inMax - inMin) + outMin; }