Bram's page

It turns out this curve was already known, but I think it looks neat so I'm leaving this page up.

I call it the Puff the Magic Dragon curve, because it's first iteration looks like a dragon.

draw_on_left and draw_on_right draw the same curve but in the opposite direction.

def draw_on_left(segment_length, remaining_iterations) :
    if remaining_iterations == 0 :
        turtle.forward(segment_length)
    else :
        nsl = segment_length / 5
        nri = remaining_iterations - 1
        turtle.left(90)
        draw_on_right(nsl, nri)
        draw_on_right(nsl, nri)
        turtle.right(90)
        draw_on_left(nsl, nri)
        turtle.right(90)
        draw_on_left(nsl, nri)
        turtle.left(90)
        draw_on_right(nsl, nri)
        turtle.left(90)
        draw_on_right(nsl, nri)
        draw_on_left(nsl, nri)
        turtle.left(90)
        draw_on_right(nsl, nri)
        turtle.right(90)
        draw_on_left(nsl, nri)
        draw_on_left(nsl, nri)
        turtle.right(90)
        draw_on_right(nsl, nri)
        turtle.right(90)
        draw_on_left(nsl, nri)
        turtle.left(90)
        draw_on_right(nsl, nri)
        draw_on_left(nsl, nri)
        draw_on_left(nsl, nri)
        turtle.right(90)
        draw_on_right(nsl, nri)
        turtle.right(90)
        draw_on_left(nsl, nri)
        draw_on_right(nsl, nri)
        turtle.left(90)
        draw_on_right(nsl, nri)
        turtle.left(90)
        draw_on_left(nsl, nri)
        turtle.right(90)
        draw_on_left(nsl, nri)
        turtle.right(90)
        draw_on_right(nsl, nri)
        turtle.left(90)
        draw_on_right(nsl, nri)
        turtle.left(90)
        draw_on_left(nsl, nri)
        draw_on_left(nsl, nri)

def draw_on_right(segment_length, remaining_iterations) :
    if remaining_iterations == 0 :
        turtle.forward(segment_length)
    else :
        nsl = segment_length / 5
        nri = remaining_iterations - 1
        draw_on_right(nsl, nri)
        draw_on_right(nsl, nri)
        turtle.right(90)
        draw_on_left(nsl, nri)
        turtle.right(90)
        draw_on_left(nsl, nri)
        turtle.left(90)
        draw_on_right(nsl, nri)
        turtle.left(90)
        draw_on_right(nsl, nri)
        turtle.right(90)
        draw_on_left(nsl, nri)
        turtle.right(90)
        draw_on_left(nsl, nri)
        draw_on_right(nsl, nri)
        turtle.left(90)
        draw_on_left(nsl, nri)
        turtle.left(90)
        draw_on_right(nsl, nri)
        draw_on_right(nsl, nri)
        draw_on_left(nsl, nri)
        turtle.right(90)
        draw_on_right(nsl, nri)
        turtle.left(90)
        draw_on_left(nsl, nri)
        turtle.left(90)
        draw_on_right(nsl, nri)
        draw_on_right(nsl, nri)
        turtle.left(90)
        draw_on_left(nsl, nri)
        turtle.right(90)
        draw_on_right(nsl, nri)
        draw_on_left(nsl, nri)
        turtle.right(90)
        draw_on_left(nsl, nri)
        turtle.right(90)
        draw_on_right(nsl, nri)
        turtle.left(90)
        draw_on_right(nsl, nri)
        turtle.left(90)
        draw_on_left(nsl, nri)
        draw_on_left(nsl, nri)
        turtle.right(90)
by Bram Cohen May 2000