のんびり読書日記

日々の記録をつらつらと

フラクタルを書いてみる

アルゴリズムC++を読んでいて、再帰の章でフラクタルが載ってたので、Python + PILで実際に図形を書いてみた。

  • 全部同じ色


  • 階層毎に色分け


#!/usr/bin/env python
# -*- coding:utf-8 -*-

import Image
import ImageDraw

def fractal(draw, x, y, r):
    if (x >= 0 and y >= 0 and r > 0):
        fractal(draw, x-r/2, y-r/2, r/2);
        fractal(draw, x-r/2, y+r/2, r/2);
        fractal(draw, x+r/2, y-r/2, r/2);
        fractal(draw, x+r/2, y+r/2, r/2);
        box(draw, x, y, r);

def box(draw, x, y, r):
    # random color
    #import random
    #draw.rectangle([x-r/2, y-r/2, x+r/2, y+r/2], fill=random.randint(0, 256))

    # hierarchical color
    draw.rectangle([x-r/2, y-r/2, x+r/2, y+r/2], fill=r % 256)

    # same color
    #draw.rectangle([x-r/2, y-r/2, x+r/2, y+r/2], fill=128)

if __name__ == '__main__':
    image_size = 400
    im = Image.new('RGB', (image_size, image_size), '#ffffff')
    draw = ImageDraw.Draw(im)
    fractal(draw, image_size/2, image_size/2, image_size/2)
    im.show()