#!/usr/bin/env python

from PIL import Image, ImageDraw
import math

PI = math.pi
SQRT2 = math.sqrt(2)
xpos = 0
ypos = 0


def dragon(draw, order, length, angle, sign):
    if not order:
        global xpos, ypos
        gx = xpos + length * math.cos(angle)
        gy = ypos + length * math.sin(angle)
        draw.line([(xpos, ypos), (gx, gy)], fill=0)
        xpos = gx
        ypos = gy
    else:
        dragon(draw, order - 1, length / SQRT2, angle - sign * PI / 4, -1.0)
        dragon(draw, order - 1, length / SQRT2, angle + sign * PI / 4, 1.0)


if __name__ == "__main__":
    im = Image.new("L", (300, 300), 255)
    draw = ImageDraw.Draw(im)
    xpos = 100
    ypos = 175
    dragon(draw, order=21, length=100, angle=0, sign=1)
    im.show()
im.save("dragon.png", "PNG")
