from idorudraw import line_from, line_to import math M = math def cell(x1, y1, x3, y3): vect = [(x3-x1), (y3-y1)] norm = [-vect[1], vect[0]] x2 = x1 + (vect[0])/2.0 + norm[0]*(M.sqrt(3.0)/6.0) y2 = y1 + (vect[1])/2.0 + norm[1]*(M.sqrt(3.0)/6.0) return [x1, y1, x2, y2, x3, y3] def curve(x1, y1, x2, y2, n = 4, l=1): line_from(x1, y1, 0.0, l) s = cell(x1, y1, x2, y2) for i in range(1, n+1): r = s s = [] t = 2.0**i for j in range(0, t): s.extend(cell(r[j*2], r[j*2+1], r[j*2+2], r[j*2+3])) if(j < (t-1)): s.pop(); s.pop() for i in range(1, 2**(n+1) + 1): u = 2*i v = (2*i) + 1 line_to(s[u], s[v]) def flake(n = 4, d = 65.0, l=1): curve(-d*0.5, d*M.sqrt(3.0)/6.0, d*0.5, d*M.sqrt(3.0)/6.0, n, l) curve(d*0.5, d*M.sqrt(3.0)/6.0, 0.0, -d*M.sqrt(3)/3.0, n, l) curve(0.0, -d*M.sqrt(3)/3.0, -d*0.5, d*M.sqrt(3.0)/6.0, n, l)