A grid of simple geometric shapes
Log in to post a comment.
// You can find the Turtle API reference here: https://turtletoy.net/syntax // Setup Canvas.setpenopacity(1); const turtle = new Turtle(); // Canvas is 200x200 const canvas_size = 200; // Number of rows/columns in the grid const size = 6; // min=1, max=12, step=1 // Size of each box in the grid const box_size = canvas_size / size; // Border surrounding each shape within each box const border = 2; // min=0, max=8, step=1 // Size of each shape accounting for borders const shape_size = box_size - border * 2; // Array of shape drawing functions let shape_functions = [ circle_large, circle_small, circle_donut, square_large, square_small, square_donut, triangle, hourglass, curve, two_curves, three_bars, plus ]; // Array of offsets and headings to allow for randomizing shape orientations let shape_orientations = [ { dx: 0, dy:0, heading:0 }, { dx: shape_size, dy: 0, heading:90 }, { dx: shape_size, dy: shape_size, heading:180 }, { dx: 0, dy: shape_size, heading:270 } ]; // Walk the grid, drawing each shape function walk(i) { let x = parseInt(i / size, 10); let y = parseInt(i % size, 10); let shape_orientation = random_array_item(shape_orientations); // Move to adjuseted "top left" of the shape area of the grid box turtle.jump(x * box_size - canvas_size / 2 + border + shape_orientation.dx, y * box_size - canvas_size / 2 + border + shape_orientation.dy) turtle.setheading(shape_orientation.heading) // Pick a random shape and draw it let shape_func = random_array_item(shape_functions); shape_func(shape_size); // Check if this is the last grid box return i < (size * size) - 1; } // Pick a random item from an array function random_array_item(array) { return array[parseInt(Math.random() * array.length, 10)]; } function draw_box(length, width) { turtle.forward(length) turtle.right(90) turtle.forward(width) turtle.right(90) turtle.forward(length) turtle.right(90) turtle.forward(width) turtle.right(90) } function square_large(size) { draw_box(size, size) } function square_small(size) { turtle.penup() turtle.forward(size / 3) turtle.right(90) turtle.forward(size / 3) turtle.left(90) turtle.pendown() draw_box(size / 3, size / 3) } function square_donut(size) { square_large(size); square_small(size); } function circle_large(size) { turtle.penup() turtle.forward(size / 2) turtle.pendown() turtle.circle(size / 2) turtle.penup() turtle.backward(size / 2) turtle.pendown() } function circle_small(size) { turtle.penup() turtle.forward(size / 2) turtle.right(90) turtle.forward(size / 4) turtle.left(90) turtle.pendown() turtle.circle(size / 4) } function circle_donut(size) { circle_large(size) circle_small(size) } function triangle(size) { let pos = turtle.pos() turtle.forward(size) turtle.right(90) turtle.forward(size) turtle.goto(pos) } function hourglass(size) { let diagonal = Math.sqrt(size * size * 2) turtle.forward(size) turtle.right(135) turtle.forward(diagonal) turtle.left(135) turtle.forward(size) turtle.left(135) turtle.forward(diagonal) } function curve(size) { turtle.circle(size, 90) turtle.right(90) turtle.forward(size) turtle.right(90) turtle.forward(size) } function two_curves(size) { turtle.circle(size / 2, 180) turtle.right(90) turtle.forward(size) turtle.penup() turtle.right(90) turtle.forward(size) turtle.right(90) turtle.pendown() turtle.forward(size) turtle.right(90) turtle.circle(size / 2, 180) } function three_bars(size) { draw_box(size, size / 5) turtle.right(90) turtle.penup() turtle.forward(size / 5 * 2) turtle.left(90) turtle.pendown() draw_box(size, size / 5) turtle.right(90) turtle.penup() turtle.forward(size / 5 * 2) turtle.left(90) turtle.pendown() draw_box(size, size / 5) } function plus(size) { let len = size / 3; turtle.penup(); turtle.forward(len); turtle.pendown(); for (i = 0; i<4; i++) { turtle.forward(len) turtle.right(90) turtle.forward(len) turtle.left(90) turtle.forward(len) turtle.right(90) } }