From "Turtle Geometry" by Harold Abelson, 1980
Variations from the book:
"THING1": THING (variation)
"THING2": THING (variation)
"THING3": THING (variation)
Log in to post a comment.
const right = -54; // min=-60, max=60, step=1 const forward = 40; // min=0, max=100, step=5 const repeat = 15; // min=1, max=64, step=1 const scale = 0.6; // min=0.1, max=1.0, step=0.05 const center = 1; // min=0, max=1, step=1 (No, Yes) const t = new Turtle(); if (center) { // Compensate for offset by calculating center of regular polygon. // At full scale, each step travels (125, 25). // Add forward to x. // Interior angle is 90 + right. t.penup(); t.radians(); const d2r = deg => deg / 180 * Math.PI; const [x, y] = [(125+forward)*scale, 25*scale]; const sidelength = Math.sqrt(x**2 + y**2); const interior_angle = d2r(90 + right); const angle_offset = Math.atan2(y, x); const circumradius = sidelength / 2 / Math.cos(interior_angle/2); console.debug({x, y, sidelength, interior_angle, angle_offset, circumradius}); t.right(angle_offset); t.left(interior_angle/2); t.backward(circumradius); console.debug("Offset by", t.pos()); t.setheading(0); t.degrees(); t.pendown(); } function thing() { t.forward(scale*100); t.right(90); t.forward(scale*100); t.right(90); t.forward(scale*50); t.right(90); t.forward(scale*50); t.right(90); t.forward(scale*100); t.right(90); t.forward(scale*25); t.right(90); t.forward(scale*25); t.right(90); t.forward(scale*50); } function walk(i) { t.forward(scale*forward); // move forward first to make center calculations simpler thing(); t.right(right); return i+1 < repeat; }