Draws iterated functions fractals.
nb is the number of pixels drawn.
Draw a tree: m=350 w.append([[0,0],[0,.5]]); b.append([[0],[0]]); p.append(.05) w.append([[.42,-.42],[.42,.42]]); b.append([[0],[.2]]); p.append(p[-1]+.4) w.append([[.42,.42],[-.42,.42]]); b.append([[0],[.2]]); p.append(p[-1]+.4) w.append([[.1,0],[0,.1]]); b.append([[0],[.2]]); p.append(1)
def ifs(nb): from random import random import kandinsky def vecprod(M,V): nlM=len(M) return [[sum([l[j]*V[j][0] for j in range(nlM)])] for l in M] def vecadd(v1,v2): return [[v1[i][0]+v2[i][0]] for i in range(len(v1))] w=[];b=[];p=[] # Fougere m=15 w+=[[[0,0],[0,.16]]];b+=[[[0],[0]]]; p+=[.01] w+=[[[.85,.04],[-.04,.85]]]; b+=[[[0],[2]]]; p+=[p[-1]+.85] w+=[[[.2,-.26],[.23,.22]]]; b+=[[[0],[1]]]; p+=[p[-1]+(1-p[-1])/2] w+=[[[-.15,.28],[.26,.24]]]; b+=[[[0],[.9]]]; p+=[1] n=len(w) def choix(x): h=random() i=0 while True: if h<=p[i]: return vecadd(b[i],vecprod(w[i],x)) i+=1 x=[[0],[0]] for _ in range(nb): x=choix(x) kandinsky.set_pixel(160+int(m*x[0][0]),220-int(m*x[1][0]),(0,0,0))