making fractals in python

Ernst Noch enoch at gmx.net
Mon Dec 12 15:00:36 EST 2005


evil_daffid wrote:
> hi,
> Im reseaching fractals, and how to make them in python using recursion.
> I've written a bit of code to make the   koch isalnd   but something isn't
> right, I have the basic shape but there's something wrong with the
> recursion i've used, could someone help me.
> 
> Here is the code im using:
> 
[Code snipped]

Is this a homework assignment or something?

Anyway, this is a little bit more pythonic and flexible, though my 
python has gotten a little bit rusty. It uses L-Systems for state storage.
Recursion is only left in because you asked for it.
Iterate() should get more sophisticated for more complex string 
substitutions.

import turtle
turtle.clear

class fractal(object):

     def __init__(self, lstring, rule, line_length, angle, 
shrink_factor):
         self.lstring = lstring
         self.rule = rule
         self.line_length = line_length
         self.angle = angle
         self.shrink_factor=shrink_factor

     def draw(self):
         drawingdict = {'F': lambda: turtle.forward(self.line_length),
                        '-':lambda: turtle.right(self.angle),
                        '+':lambda: turtle.left(self.angle),}
         for rule in self.lstring:
             drawingdict[rule]()

     def iterate(self):
         self.lstring = self.lstring.replace(rule[0],rule[1])
         self.line_length=self.line_length/self.shrink_factor

def recurse(f,smallest):
     if f.line_length>=smallest:
         turtle.reset()
         f.iterate()
         f.draw()
         recurse(f,smallest)

if __name__=='__main__':
     start = 'F+F+F+F'
     rule = ('F','F+F-F-FF+F+F-F')
     f = fractal(start,rule,50,90,2)
     recurse(f,10)



More information about the Python-list mailing list