Tapis de Sierpinsky en Python

Tapis de Sierpinsky en Python

Le tapis de Sierpinsky, que je vous propose de faire en Python, est une image fractale obtenue à partir d’un carré, dans lequel on met d’autres carrés… Bon, dit comme ça, ça ne parle pas beaucoup alors autant mettre une image :

tapis de sierpinsky
Un exemple de tapis de Sierpinsky

Le principe mathématique

On part donc d’un carré vide, que l’on s’empresse de découper en 9 cases identiques, puis on remplit le carré central:

triangle de sierpinsky : étape 1
Étape 1

Ensuite, dans chaque carré vide, on fait la même chose que dans le carré initial : on le découpe en 9 cases identiques et on remplit le carré central:

tapis de sierpinsky : étape 2
Étape 2

On recommence avec les nouveaux carrés vides:

tapis de sierpinsky : étape 3
Étape 3

Et on fait cela à l’infini. Le résultat final donne le tapis de Sierpinsky.

Le tapis de Sierpinsky : code Python

Le principe est simple, mais l’application beaucoup moins. En effet, il faut d’abord se demander avec quelle solution graphique on va construire le tapis : turtle ? Bof… Bien trop long ! Allez ! On part sur pygame, qui permet de faire de belles choses graphiques (voir par exemple cet article sur l’ensemble de Mandelbrot), et ceci très rapidement.

Ensuite, comme je n’aime pas le monochrome, je veux un tapis vivant ! Avec des couleurs ! Je vais donc faire intervenir le module random pour choisir des couleurs au hasard.

J’obtiens alors:

Le fichier source Python est disponible sur cette page pour les abonné.e.s. de mathweb.fr.

On trouve pas mal de codes pour construire le triangle de Sierpinsky, mais franchement, c’est moche et long : c’est avec turtle ! En plus, le triangle est à mes yeux moins beau que le tapis. Mais ça… ce n’est qu’une histoire de goût personnel !

Le tapis de Sierpinsky en \(\LaTeX\)

Allez ! Un petit bonus ! C’est moins joli qu’en Python, mais on peut obtenir un PDF directement:

\documentclass{standalone}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[scale=5]
\draw (0,0) rectangle +(1,1);
\fill (1/3,1/3) rectangle +(1/3,1/3);
\foreach \n in {1,2,...,4}
{
	\pgfmathparse{1/3^(\n+1)}\let\a\pgfmathresult
	\pgfmathparse{\a+1/3^\n}\let\b\pgfmathresult
	\pgfmathparse{1-\a}\let\f\pgfmathresult
	\foreach\x in {\a,\b,...,\f} 
	{
		\foreach\y in {\a,\b,...,\f}
		{
			\fill (\x,\y) rectangle +(\a,\a);
		}
	}
}
\end{tikzpicture}
\end{document}
tapis de sierpinsky en LaTeX
Tapis de Sierpinsky obtenu en \(\LaTeX\)
Stéphane Pasquet
Stéphane Pasquet

Laissez votre message