import matplotlib.pyplot as plt
from cmath import rect, pi

### Code fourni pour l'exercice 4 (Triangle Sierpinski)
from matplotlib.patches import Polygon

def xy(A):
    """
    Entrée
    ------
      L'affixe d'un point.

    Sortie
    ------
      Les coordonnées du point
      (paire de flottants).
    """
    return (A.real, A.imag)

def initialise_figure():
    """
    Démarre une nouvelle figure, qui sera remplie
    par des appels à la fonction triangle.
    """
    global ax
    ax = plt.figure().add_subplot()

def triangle(A, B, C, couleur, reset=False):
    """
    Entrées
    -------
    - A, B et C : affixes de trois points.
    - couleur : chaîne de caractères représentant une couleur
      pour matplotlib. Par exemple 'black' ou 'white'.
    - reset : booléen, paramètre optionnel
      Est-ce qu'il faut démarrer une nouvelle figure ?

    Sortie
    ------
      Aucune

    Effet de bord
    -------------
      Trace le triangle ABC dans la couleur demandée.
    """
    if not 'ax' in globals() or reset:
        initialise_figure()
    ax.add_patch(Polygon([xy(A), xy(B), xy(C)],
                 color = couleur, fill = True, linewidth = 0.2))

### Code à remplir
def sierpi_aux(A, B, C, n):
    if n > 0:
        I = ...
        J = ...
        K = ...
        triangle(... , ...., ...., 'white')
        sierpi_aux(.... , ....., ....., n - 1)
        sierpi_aux(....., ....., ......, .....)
        sierpi_aux(....., ....., ......, .....)
    else:
        triangle(...., ......, ......., 'black')

def sierpi(n):
    A = .....
    B = .....
    C = .....
    initialise_figure()
    sierpi_aux(A, B, C, n)
    plt.axis('equal')
    plt.show()
