Dave's Creature
-
after this tweet:
https://twitter.com/beesandbombs/status/1021746882362728448
and this processing code:
https://gist.github.com/beesandbombs/6f3e6fb723f50b080916816ae8e561e3I made a DrawBot/Python translation:
import math n = 720 l = 350 twm = math.pi/20 def mapValue(value, start1, stop1, start2, stop2): p = 1.0*(value-start1) / (stop1 - start1) return start2 + p*(stop2 - start2) def spiral(q, R, nt): path = BezierPath() origin = width()*.5, height()*.5 path.moveTo(origin) for i in range(n): qq = 1.0*i/(n-1) r = mapValue(math.cos(2*math.pi*qq), 1, -1, 0, R)*math.sqrt(qq) th = nt*2*math.pi*qq - 4*2*math.pi*t - q x = r*math.cos(th) y = -l*qq + r*math.sin(th) tw = twm*math.sin(2*math.pi*t - math.pi*qq) xx = x*math.cos(tw) + y*math.sin(tw) yy = y*math.cos(tw) - x*math.sin(tw) path.lineTo((origin[0]+xx, origin[1]+yy)) path.endPath() drawPath(path) N = 9 frames = 60 for f in range(frames): newPage(1000, 1000) frameDuration(1/30) fill(1) rect(0, 0, width(), height()) t = 1.0*f/frames for i in range(N): R = 42 m = mapValue(math.sin(2*math.pi*t), -1, 1, 0, 1) nt = 6+6*m save() stroke(.5) fill(None) strokeWidth(1) rotate(360.0*i/N, (width()*.5, height()*.5)) spiral(2*math.pi*i/N, R, nt); restore() saveImage('davesCreature.gif')
One might find mapValue an interesting function featured natively in processing:
https://processing.org/reference/map_.html