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