Mi-101           Mathematica	          2004-2005
Deux versions du triangle de Sierpinski

Le triangle de Sierpinksi est une figure fractale qui peut être obtenue en itérant la construction suivante :
- se donner une triangle et un point différent des trois sommets
- choisir un sommet du triangle au hasard et calculer le milieu du segment défini par celui-ci et le point précédent
- itérer en calculant le milieu du segment défini par le nouveau point et un sommet du triangle pris au hasard...

Ce petit TD vous propose deux constructions similaires utilisant les points complexes et les commandes NestList et FoldList.

Outils préliminaires

1) Créer une fonction CtoR listable qui à un point d'affixe complexe associe ses coordonnées réelles

CtoR[z_] := {Re[z], Im[z]}
Attributes[CtoR] = {Listable};

2) Créer une liste de trois points complexes qui forment un triangle non-dégénéré. On nomme triangle cette liste.

triangle = {-I - 1, 1 - I, I};

3) Créer une fonction afficher qui permette d'afficher une liste de points complexes (on utilisera CtoR ainsi que Map).

afficher[ptsComplex_] := 
      Show[Graphics[Map[Point, CtoR[ptsComplex]]]]

Première construction

1)  Création de la fonction clef
	a) Comment tirer au hasard un nombre entier entre 1 et 3 ?
	b) Comment obtenir le milieu de deux points d'affixes complexes ?
	c) En déduire une fonction milAlea qui à une liste de 3 points complexes et un point renvoie le milieu de ce point et d'un des 3 points de la liste pris au hasard (on formatera la fonction comme suit milAlea[liste][pont])

milAlea[tr_][pt_] := (tr[[Random[Integer, {1, 3}]]] + pt)/
        2

2) En utilisant NestList ainsi que les fonctions précédentes, en déduire le triangle de Sierpinski.

afficher[NestList[milAlea[triangle], 1 + 2*I, 10000]];

Seconde construction

1) Créer une fonction milEval qui à deux points associe leur milieu (on la formatera comme suit milAlea[a,b]).
Utiliser Evaluate afin de forcer l'évaluation du calcul.

milEval[a_, b_] := Evaluate[(a + b)/2]

2) Créer une fonction listAlea qui renvoie une liste de n points aléatoires choisis parmi une liste tr de 3 points complexes.

listAlea[tr_, n_] := 
      Table[tr[[Random[Integer, {1, 3}]]], {i, 1, n}]

3) En utilisant FoldList ainsi que les fonctions précédentes, en déduire une nouvelle construction du triangle de Sierpinski.

afficher[
        FoldList[milEval, 0, listAlea[triangle, 10000]]];