## Set up the turtle t.name("braille-ca.gcode") t.setup(x=100, y=100) t.rate(FEEDRATE) t.set_density(EXT_DENSITY) ca = [0] * NUM_SIDES ca[0] = 1 on_states = [1, 2, 3, 4] # Wolfram's "Rule 30" for l in range(LAYERS): for k in range(NUM_SIDES): t.right(dtheta) t.forward(dx) if ca[k] == 1: t.left(BUMP_ANGLE) t.forward(BUMPLENGTH) t.forward(-BUMPLENGTH) t.right(BUMP_ANGLE) t.lift(LAYER_HEIGHT / NUM_SIDES) ## Update cellular automaton if l % 3 == 2: new_ca = [0] * NUM_SIDES for i in range(NUM_SIDES): state_num = ca[(i - 1) % NUM_SIDES] * 4 + ca[i] * 2 + ca[(i + 1) % NUM_SIDES] if state_num in on_states: new_ca[i] = 1 ca = new_ca ## Save to a GCODE file
from extruder_turtle import ExtruderTurtle import math t = ExtruderTurtle() t.name("stretchy-line.gcode") t.setup(x=100, y=100) t.rate(900) t.set_density(0.05) for l in range(10): t.forward(20) t.right(math.pi / 2) t.forward(5) t.left(math.pi / 2) t.forward(2) t.left(math.pi / 2) t.forward(10) t.right(math.pi / 2) t.forward(2) t.right(math.pi / 2) t.forward(5) t.left(math.pi / 2) t.forward(20) t.right(math.pi) t.lift(0.3) t.finish()
t = ExtruderTurtle() t.name("square-string-art.gcode") t.setup(x=100, y=100) t.rate(500) t.set_density(0.06) for l in range(50): x = 5 * (l % 10) y = 5 * (l % 10) theta = math.atan(y / (50 - x)) r = math.sqrt((50 - x)**2 + y**2) for i in range(3): t.forward(50) t.left(math.pi / 2) t.forward(50) t.left(math.pi * 3 / 4) t.forward(50 * math.sqrt(2)) t.left(math.pi * 3 / 4) t.lift(0.3) t.lift(-0.2) t.set_density(0.03) t.forward(x) t.left(theta) t.forward(r) t.forward(-r) t.right(theta) t.forward(-x) t.lift(0.2) t.set_density(0.06)
SIDELENGTH = 25 NUM_SIDES = 5 LAYERS = 100 dx = SIDELENGTH/(NUM_HAIRS+1) t = ExtruderTurtle() ## Set up the turtle t.name("furry-prism.gcode") t.setup(x=100, y=100) t.rate(FEEDRATE) t.set_density(EXT_DENSITY) for l in range(LAYERS): ## Draw a pentagon for k in range(NUM_SIDES): t.move(dx) for n in range(NUM_HAIRS): t.left(HAIR_ANGLE) t.move(HAIRLENGTH) t.move(-HAIRLENGTH) t.right(HAIR_ANGLE) t.move(dx) t.right(2*math.pi/NUM_SIDES) ## Move to the next layer t.lift(LAYER_HEIGHT) ## Save to a GCODE file t.finish()
dx = RADIUS * dtheta dr = -0.5 / N MAX_HEIGHT = 6 t = ExtruderTurtle() t.name("nonplanar-bump.gcode") t.setup(x=100, y=100) t.set_density(0.05) t.rate(1000) for l in range(10): radius = RADIUS prop = l / 10 while radius > 0: t.move_lift( dx, prop * radius * 2 * MAX_HEIGHT / (-RADIUS**2 / dr - RADIUS)) t.right(dtheta) radius += dr dx = radius * dtheta t.lift(0.15) while radius < RADIUS: radius += -dr dx = radius * dtheta t.left(dtheta) t.move_lift( -dx, -prop * radius * 2 * MAX_HEIGHT / (-RADIUS**2 / dr - RADIUS)) t.lift(0.15) t.finish()