# -*- coding: utf-8 -*-

from math import sin, cos, pi
import matplotlib.pyplot as plt
import matplotlib


def kochSnowFlake(l, n):
    x_vertex1 = 0
    y_vertex1 = 0

    x_vertex2 = l * cos(2 * pi / 3)
    y_vertex2 = l * sin(2 * pi / 3)

    x_vertex3 = l * cos(pi / 3)
    y_vertex3 = l * sin(pi / 3)

    kochCurve(x_vertex1, y_vertex1, x_vertex2, y_vertex2, n)
    kochCurve(x_vertex2, y_vertex2, x_vertex3, y_vertex3, n)
    kochCurve(x_vertex3, y_vertex3, x_vertex1, y_vertex1, n)

    return


def kochCurve(xi, yi, xf, yf, n):
    if n == 0:
        plt.plot([xi, xf], [yi, yf])

    elif n > 0:
        x1 = xi + (xf - xi) / 3.0
        y1 = yi + (yf - yi) / 3.0

        x3 = xf - (xf - xi) / 3.0
        y3 = yf - (yf - yi) / 3.0

        x2 = (x1 + x3) * cos(pi / 3) - (y3 - y1) * sin(pi / 3)
        y2 = (y1 + y3) * cos(pi / 3) + (x3 - x1) * sin(pi / 3)

        kochCurve(xi, yi, x1, y1, n - 1)
        kochCurve(x1, y1, x2, y2, n - 1)
        kochCurve(x2, y2, x3, y3, n - 1)
        kochCurve(x3, y3, xf, yf, n - 1)

    return


plt.figure("Koch snowflack")
kochSnowFlake(200, 4)  # range 1 -6
plt.show()


# https://es.wikipedia.org/wiki/Copo_de_nieve_de_Koch
