# LCCRMY: a recursive random walker v2021_04_30 - Alexandre B A Villares # Drag the mouse to rotate. Press SPACE to generate a new one. from random import choice elements = [] r = 0 def setup(): size(800, 800, P3D) generate() def generate(n=500): pegs = (-20, -10, 0, 0, 10, 20) elements[:] = [(choice('LCCRMY'), (choice(pegs), choice(pegs)), choice((1, 3)),) for _ in range(n)] def draw(): background(240, 240, 220) # for Processing Python mode, use this: # translate(width / 2, height / 2, -400) translate(0, 0, -400) # this for pyp5js rotateY(r) draw_e(elements) def draw_e(els): for i, e in enumerate(els): stroke(0) t, v, w = e strokeWeight(w) if t == 'Y': if i % 2: rotateX(QUARTER_PI) else: rotateY(QUARTER_PI) if t == 'L': line_e(v) if t == 'C': line_e(v, c=w) if t == 'M' and i > 1: for _ in range(3): line_e(v) pushMatrix() scale(.5) draw_e(els[i - 5:i]) popMatrix() if t == 'R' and i > 1: for _ in range(3): line_e(v) line_e((v[1] / 2, -v[0] / 2)) draw_e([els[i - 1]]) def line_e(v, c=None): x, y = v line(0, 0, x, y) if c is not None: d = sqrt(x * x + y * y) if c != 1: fill(0) square(0, 0, d / 9) else: fill(255, 0, 0) circle(0, 0, d) translate(x, y) def mouseDragged(): global r r += (mouseX - pmouseX) / 200.0 def keyReleased(): if key == ' ': generate()