[Edu-sig] Just for Fun: Another Fractal (ASCII output)

Kirby Urner kurner at oreillyschool.com
Sun Mar 2 07:47:28 CET 2014


"""
Just for Fun:

Simple Fractal (ASCII art)

(cc) Kirby Urner, MIT license
4dsolutions.net
"""

class M:
    """
    Plant an M-Seed and call it, in each cell of the Garden
    """
    depth = 7

    def __init__(self, x, y):
        self.c = complex(x,y)

    def __call__(self):
        z = 0+0j
        for _ in range(M.depth):
            z = z**2 + self.c
        return z



class Fractal(dict):
    """
    This is the Garden, a complex plane planted with M-Seeds
    Inherit from dict to store complex numbers in key (x,y)
    """

    def __init__(self, left_x, top_y, right_x, bottom_y):
        """Top Left, Top, Far Right, Bottom"""
        super().__init__()
        self.left_x = left_x
        y = self.top_y = top_y
        self.right_x, self.bottom_y = right_x, bottom_y
        while y >= bottom_y:
            x = left_x
            while x < right_x:
                self[(x,y)] = M(x,y)() # plant seed and call it
                x += 0.02
            y -= 0.05


    def __str__(self):
        """
        Reap the harvest
        """
        rows = ""
        y = self.top_y
        while y >= self.bottom_y:
            row=""
            x = self.left_x
            while x <= self.right_x:
                v = abs(self[(x,y)])
                # calibrate by magnitude of stored value
                if v >= 2:
                    row += "."
                elif 2 > v >= 1.5:
                    row += "^"
                elif 1.5 > v >= 1.3:
                    row += "+"
                elif 1.3 > y >= 1.0:
                    row += "@"
                else:
                    row += "@"
                x += 0.02
            rows += row + "\n"
            y -= 0.05
        return rows

if __name__ == "__main__":
    # run me and open the file in a text editor to see 'fractal'
    f = Fractal(-2.2, 1.4, 0.8, -1.4)
    with open("mandelbrot.txt","w") as mandelbrot:
        print(f, file = mandelbrot)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/edu-sig/attachments/20140301/7c0c9f6f/attachment.html>


More information about the Edu-sig mailing list