An alternating pattern of fans
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=40, step=1
// Number of segments in each fan
const segments = 10; // min=2, max=20, step=1
// Position of inner band
const inner = 0.5; // min=0, max=2, step=0.1
// Position of outer band
const outer = 1.0; // min=0, max=2, step=0.1
// Length of ribs
const ribs = 1.0; // min=0, max=2, step=0.1
// Size of each box in the grid
const box_size = canvas_size / size;
let shape_orientations = [
{ dx: 0, dy:0, heading:0 },
{ dx: box_size, dy: box_size, heading:180 },
];
// The walk function will be called until it returns false.
function walk(i) {
let x = parseInt(i % size, 10);
let y = parseInt(i / size, 10);
let shape_orientation = shape_orientations[0];
// Checkboard pattern
if (x % 2 != y % 2) {
shape_orientation = shape_orientations[1];
}
// Move to the appropriate corner and heading in the grid box
turtle.jump(x * box_size - canvas_size / 2 + shape_orientation.dx,
y * box_size - canvas_size / 2 + shape_orientation.dy);
turtle.setheading(shape_orientation.heading)
// Draw a fan
draw_fan();
// Check if this is the last grid box
return i < (size * size) - 1;
}
function draw_fan() {
let pos = turtle.pos();
let heading = turtle.heading();
// Draw inner fan curve
turtle.penup();
turtle.forward(box_size * inner)
turtle.right(90);
turtle.pendown();
turtle.circle(box_size * inner, 90)
// Reset
turtle.penup();
turtle.goto(pos)
turtle.setheading(heading)
turtle.pendown();
// Draw outer fan curve
turtle.penup();
turtle.forward(box_size * outer);
turtle.right(90);
turtle.pendown();
turtle.circle(box_size * outer, 90)
// Reset
turtle.penup();
turtle.goto(pos)
turtle.setheading(heading)
turtle.pendown();
// Draw fan ribs
for (i=0; i<=segments; i++) {
turtle.forward(box_size * ribs);
turtle.penup();
turtle.goto(pos);
turtle.right(90 / segments);
turtle.pendown();
}
}