import math

# This recursive (that is, self-calling) function draws
# a line with a detour. Each detour is also drawn with
# this function, meaning that there can be detours on
# detours. This creates a "snowflake" shape known as
# the Koch Snowflake or Koch Curve.
def koch(coords, direction, length, detours):
    if detours > 0:
        # We have detours left to take; we'll draw four sides.
        # Each koch() call returns its end-point; we save that
        # value and use it as the start point for the next side.
        a = koch(coords, direction,     length / 3, detours-1)
        b = koch(a,      direction - 1, length / 3, detours-1)
        c = koch(b,      direction + 1, length / 3, detours-1)
        d = koch(c,      direction,     length / 3, detours-1)
        return d
    else:
        # No detours left; just draw a straight line.
        end = (
            coords[0] + length * math.cos(direction * math.pi / 3),
            coords[1] + length * math.sin(direction * math.pi / 3)
        )
        Line([coords, end], color='white')
        return end

# a nice background
Rectangle(color='#004')
# This is where we draw the actual Koch Snowflake.
# Try altering the last argument (the 2) to another
# number from 0 to 3,  and see what happens!
a = koch((10, 27), 0, 80, 2)
a = koch(a,        2, 80, 2)
a = koch(a,        4, 80, 2)

Recursion: Koch Snowflake

by snild

Created 3 months, 3 weeks ago.