Mathématice, intégration des Tice dans l'enseignement des mathématiques  

Les fractals de Sierpinski
Programmation dynamique avec macro et récursivité
Moteur de recherche
Mis en ligne le 7 décembre 2018, par Patrice Debrabant

On va construire les fractals de Sierpinski dynamiques de différentes façons en utilisant la programmation dynamique, les macros et la géométrie de la tortue.

Plan

I) Le triangle de Sierpinski

   A) Méthodes classiques

      a) Avec une macro et sans tortue

      b) En géométrie de la tortue

   B) Comme limite de carrés

   C) Comme limite des courbes du triangle de Sierpinski

II) Le tapis de Sierpinski

   a) Avec une macro et sans tortue

   b) En géométrie de la tortue

III) La fractale de Dürer

   a) Avec une macro et sans tortue

   b) En géométrie de la tortue

IV) Les fractals de Sierpinski

   a) Avec une macro

   b) En géométrie de la tortue

V) Fractals 3D

   A) Le tétraèdre de Sierpinski

   B) L’éponge de Menger (le parallélépipède de Sierpinski)


Waclaw Sierpiński(1882-1969) est un mathématicien polonais spécialisé en théorie des ensembles et en théorie des nombres.
Il a également été précurseur de la découverte des premiers objets fractals [1] qu’étudiera plus en détail Benoît Mandelbrot, mathématicien français. Ce sont ces travaux particuliers que l’on va illustrer ici.

On va s’intéresser en particulier à la construction de ces fractals dans un contexte de géométrie dynamique, en créant des figures dynamiques en plusieurs points.
L’objectif est de présenter des algorithmes généraux bien conçus et de permettre aux lecteurs de s’approprier les méthodes employées, qui pourront être réinvesties dans d’autres domaines.
Ces méthodes tirent profit de différents outils que l’on pourrait potentiellement trouver dans différents logiciels de géométrie dynamique mais qui, à ce jour, n’existent que dans le logiciel CaRMetal. On peut regretter en particulier leur absence (ExécuterMacro, tortue dynamique) dans GeoGebra, qui est est le logiciel de géométrie dynamique le plus répandu actuellement. Dans une moindre mesure, on peut également regretter que la gestion des macros ait été immolée sur l’autel de l’interface dans DGPad, qui est le logiciel de géométrie dynamique le plus innovant. [2]

Il est fortement recommandé de réaliser les TP, qui permettent une appropriation plus intime des méthodes présentées.

I) Le triangle de Sierpinski

Le triangle de Sierpinski est une fractale. Il peut être obtenu en évidant de plus en plus un triangle selon le processus suivant :

A chaque étape l’aire de la partie grisée diminue d’un quart. La fractale est obtenue après un nombre infini d’itérations.

Le processus peut être appliqué à n’importe quel triangle. On va s’intéresser à la construction de cette fractale en maintenant un lien dynamique avec les trois sommets du triangle (autrement dit, les trois sommets du triangle seront des points libres que l’on pourra déplacer et l’ensemble de la figure suivra, comme dans la figure ci-dessous).

Figure dynamique réalisée avec DGPad

   A) Méthode classique (ou qui devrait l’être)

      a) Avec une macro et sans tortue

Le processus est récursif :
On part de 3 sommets d’un triangle :
si on est arrivé à la bonne profondeur de récursion on construit le triangle
sinon on recommence sur chacun des trois petits triangles au sommet.

On va programmer ce processus avec CaRMetal, en mode pseudo-code pour avoir une portée plus générale.
Pour passer en mode pseudo-code on écrit pseudo-code au début du script.
Observons un peu la syntaxe.

On part d’une figure avec cinq points libres A, B, C, D, E.

Voici un script syntaxiquement correct :

Observer attentivement sa syntaxe : dans le script, les points (et les droites, etc) de la figure sont désignés entre guillemets.
Ligne 2 : le script crée la demi-droite [AB) . On a laissé CaRMetal nommer la demi-droite. Ce nom n’a pas été récupéré dans une variable Javascript
Ligne 4 : On met le nom "C" dans une variable x, ce qui permet alors d’utiliser celle-ci à la place du nom "C".
Ligne 7 : le script crée la droite (AB) . On a laissé CaRMetal nommer la droite. Ce nom a été récupéré dans une variable Javascript d. On peut alors utiliser cette variable à la place du nom dans la ligne 8.

TP 01
Lancer CaRMetal.
Créer via l’interface cinq points libres appelés A, B, C, D, E.
Créer un script (menu Javascript) et le renseigner comme ci-dessus.
(Pour obtenir la flèche gauche, on tape < suivi de – et l’éditeur transforme automatiquement en ← )
Lancer le script (feu vert).

Résultat

On doit obtenir cette figure :

Les éléments construits sont dynamiques par rapport à A, B, C, D, E. Autrement dit, il y a un lien dynamique entre A, B, C, D, E et les objets construits (ces objets dépendent dynamiquement de A, B, C, D, E).

–------- fin TP

Pour construire les fractals de Sierpinski, il est commode d’utiliser la récursivité.
La récursivité est un paradigme de programmation. Voici par exemple comment on peut programmer la fonction factorielle selon le paradigme de récursivité :

TP 02 récursivité : programmer la fonction factorielle
Lancer CaRMetal.
Créer un script (menu Javascript) et le renseigner comme ci-dessus.
(Pour obtenir le signe x , on tape * et l’éditeur transforme automatiquement en x.
L’indentation est de 3 espaces, l’éditeur transforme automatiquement les tabulations en 3 espaces.)
Lancer le script (feu vert).

–------- fin TP

On peut également proposer une variante du script précédent :

Dans cette variante, la fonction ne renvoie rien et l’effet de la fonction (l’affichage du produit) est ce que l’on appelle un « effet de bord ». On est proche de ce qui se passe avec CaRMetal (et avec la plupart des logiciels de géométrie dynamique) :
si l’on remplace Afficher Prod
par
Point(Prod,1)
on obtient quelque chose de comparable :

TP 03 récursivité 02 : programmer la variante
Lancer CaRMetal.
Créer un script (menu Javascript) et le renseigner comme ci-dessus (avec Afficher puis avec Point).
Lancer le script (feu vert).

–------- fin TP

On va passer aux choses sérieuses…

TP 04 : programmer/construire le triangle de Sierpinski

- Selon le paradigme de la récursivité.
- Avec les CaRCommandes Milieu et Triangle.

Lancer CaRMetal.
Créer via l’interface trois points A, B C.
Créer un script (menu Javascript) et commencer le script par pseudo-code.
...

Remarque : définir l’aspect par défaut des points et des polygones avant de lancer le script (on sélectionne l’outil Point dans la palette Construction et on sélectionne des options dans la palette Aspect&couleur; idem avec l’outil Polygone)

Solution

Ce script est une solution possible :

Mais il a défaut important : les milieux sont créés deux fois.
Le script suivant est plus recommandé.

Dans la construction du triangle de Sierpinski, la récursion s’applique aux milieux, qui peuvent être construits par la CaRCommande Milieu.
Dans d’autre cas, la récursion s’applique à des objets (souvent des points) qui sont plus difficiles à créer que de simples milieux. Et leur création est plus simple à réaliser via l’interface que par script. D’où l’idée de la création d’une macro dont le rôle sera de créer les points de la récursion d’après les points initiaux. Cette macro sera traduite en CaRCommande en utilisant la CaRCommande ExécuterMacro ou ExécuterMacroCommeDéfinie (cette dernière renvoie les finaux dans le même ordre que lors de la création de la macro).

Une macro est un outil personnalisé. Elle est caractérisée par la liste de ses objets initiaux et par la liste de ses objets finaux.
Une fois qu’elle est créée, pour l’appliquer via l’interface on sélectionne la macro puis on désigne dans l’ordre les différents initiaux. La macro construit alors tous les finaux.

Pour l’appliquer par script, on utilise la CaRCommande ExécuterMacro ou ExécuterMacroCommeDéfinie. Il y a alors une différence importante de syntaxe avec les CaRCommande usuelles. Imaginons par exemple que l’on ait créé une CaRCommande macroMilieu qui aurait exactement le même effet que l’outil milieu.
A la place de Milieu("A", "B") on doit écrire ExécuterMacro("macroMilieu", "A,B") .
Dans ExécuterMacro, les paramètres de la macro sont toujours entrés sous forme d’une liste d’objets séparés par une virgule. Contrairement à la CaRCommande Milieu par exemple, pour laquelle les paramètres sont entrés l’un après l’autre. Mais comme pour la CaRCommande Polygone, par exemple (en fait, dès que l’on ne peut pas prédire le nombre d’arguments).

Que deviendrait le script précédent si l’on utilisait une macro macroMilieu au lieu de la CaRCommande Milieu ?

Il faut remplacer
Var mAB ← Milieu(A,B)
par un appel de ExécuterMacro("macroMilieu",.) appliqué à … une liste de deux points séparés par une virgule. Le premier point est dans A et le deuxième point est dans B. Il faut donc écrire
Var mAB ← ExécuterMacro("macroMilieu",A+","+B)

TP 05 : A vous de jouer ! Réécrire le script précédent en utilisant une macro macroMilieu ayant le même effet que le milieu.

Solution

Ce script est une solution possible :

mAB, mBC, et mCA sont des variables locales. Ne pas oublier le var.
Dans le script précédent, on a utilisé trois fois de suite ExécuterMacro. La méthode générale consiste à utiliser une seule macro qui renvoie tous les finaux (trois ici).
Si la macro a plusieurs finaux, ExécuterMacro renvoie un tableau des différents finaux. Si on utilise ExécuterMacroCommeDéfinie l’ordre dans ce tableau est celui que l’on a choisi lors de la construction de la macro.

Une fois que ces précisions sont comprises, on peut créer le triangle de Sierpinski selon un schème général que l’on utilisera tout au long de l’article.

1) On construit une macro d’initiaux les trois sommets d’un triangle et de finaux les trois milieux des côtés [3].

Par exemple, à partir de la figure dynamique ci-dessus, on désigne comme initiaux A , B, C et comme finaux D, E, F (on retient l’ordre). On peut appeler cette macro reducTriangle. [4]

La macro étant construite, on peut effacer toute la figure et repartir de trois points libres A, B, C.

Le script est le suivant :

t est une variable locale à la fonction. Ne pas oublier le var t.
Le deuxième argument de la fonction ExécuterMacroCommeDéfinie est la chaîne de caractères A+ "," + B + "," +C.

Remarque : l’expression A+ "," +B+ "," +C peut troubler. Une notation a été inventée dans CaRMetal pour l’éviter, il s’agit de la notation underscore (trait bas).
Dans beaucoup de situations, on peut écrire "_A,_B, _C" à la place de A+ "," + B + "," +C.
Cette notation indique plus explicitement que l’on a créé une liste séparée par une virgule avec le contenu des variables.
Mais cette notation ne fonctionne pas avec les arguments d’une fonction. Lors de l’analyse syntaxique, le compilateur envoie une erreur.

Avec les bons choix d’aspect par défaut des points et des polygones, on obtient cette approximation de profondeur 6 de la fractale, dynamique en A, B et C.

CarMetal - 2.4 ko
figure CaRMetal avec script

      b) En géométrie de la tortue

Pour un triangle équilatéral, le script est le suivant :

Dans CaRMetal, la tortue est un outil que l’on utilise dans un script.
Pour pouvoir utiliser la tortue, on doit commencer par attacher la tortue à un point (ligne 20).
Des boutons de l’assistant de script permettent de générer automatiquement des CaRCommandes que l’on peut ensuite ajuster.

Ces boutons sont contextuels. Si l’on est en mode pseudo-code, le code sera généré selon la syntaxe du pseudo-code.
Détaillons le code :

Ligne 20 : on attache la tortue en A.
Ligne 21 : on oriente la tortue vers B.
Ligne 22 : on lève le stylo. La tortue ne laissera aucune trace.

Ligne 2 : la fonction triangleEqui(k) est une fonction qui construit un triangle équilatéral quand la tortue est activée. Elle construit ce triangle selon l’orientation de la tortue au moment où la fonction est appliquée. Le triangle est construit « main gauche » (ou patte avant gauche) et le côté est k x AB.
Si k vaut par exemple 2, alors "d(A,B)*"+k vaut la chaîne de caractères "d(A,B)*2"
Avancer("d(A,B)*"+k) fait donc avancer la tortue d’une distance dynamique par rapport à A et B.
s1 ← Avancer("d(A,B)*"+k) permet de récupérer le nom du point créé par la tortue.
Ce nom de point est utile pour créer le triangle.
Ligne 9 : on pourrait remplacer par Polygone("_s1,_s2,_s3") ou par Polygone(s1+ ","+s2+ ","+s3) avec la même syntaxe que pour ExécuterMacro.

Ligne 11 : fonction sierpinski. La récursion s’opère en mode tortue.

On obtient cette figure, dynamique en A et B :

CarMetal - 2.8 ko
figure CaRMetal avec script

Pour un triangle quelconque, on « déplie » certaines parties du script pour les ajuster. C’est plus compliqué, il y a des permutations circulaires sur les arguments et on utilise les angles du triangle. On peut ignorer ce passage en première lecture.

On obtient cette figure dynamique en A, B, C :

CarMetal - 3 ko
figure CaRMetal avec script

   B) Comme limite de carrés

Y a contrôle !

TP 06
On a appris beaucoup de choses importantes dans la partie précédente. On propose d’évaluer si elles ont été comprises (et si l’on a expliqué correctement).
On lance au lecteur le défi suivant : réaliser de façon autonome une construction alternative du triangle de Sierpinski équilatéral comme limite de carrés.
Le choix est laissé de le faire soit avec une macro (à plusieurs finaux) (voir A a)) soit en géométrie de la tortue (voir A b)).

Voici le processus de construction :

Indications :

On part de deux points libres A et B créés via l’interface.

Méthode avec des macros :
On peut construire une macro macroCarré d’initiaux les points A, B et de final le carré de côté [AB]. Cette macro sera appliquée pour construire les carrés.
On peut construire une autre macro reducCarré à plusieurs finaux. Cette macro ancrera la récursion.

Solution

a) Méthode avec les macros :



b) Géométrie de la tortue :

CarMetal - 5.1 ko
CarMetal - 2.7 ko
fichier solution par macro
fichier solution par géométrie de la tortue

   C) Comme limite des courbes du triangle de Sierpinski

On démontre que le triangle de Sierpinski peut aussi être obtenu comme limite d’une suite de courbes dites courbes du triangle de Sierpinski :

Ces courbes peuvent être construites en appliquant récursivement une déformation à un segment.

La difficulté consiste à maintenir le dynamisme par rapport aux sommets.

On utilise la même macro que précédemment. Voici un script possible :

En fait, c’est le même script que précédemment, à ceci près que l’on termine par un segment et pas par un triangle !

On obtient cette figure dynamique :

CarMetal - 2.4 ko
figure CaRMetal avec script

II) Tapis de Sierpinski

L’objet de départ est un carré plein. On évide le carré du centre (3 fois plus petit). On recommence la manip sur les 8 carrés de la couronne.

   a) Avec une macro et sans tortue

TP 07
Exercice laissé au lecteur (généralisation du triangle équilatéral). La figure doit être dynamique en deux sommets du carré.

   b) En géométrie de la tortue

TP 08
Exercice laissé au lecteur (généralisation du triangle équilatéral). La figure doit être dynamique en deux sommets du carré.

III) Fractale pentagonale de Dürer

Cette fractale, pressentie par Dürer, est présentée sur cette page.

Cette fois, on part d’un pentagone régulier, et on met en évidence 6 pentagones (dont un au centre). On évide la partie restante et on recommence la manip sur les 6 pentagones.
C’est quasiment le fractal de Sierpinski pentagonal (voir plus loin).

   a) Avec une macro et sans tortue (mais en utilisant éventuellement la tortue pour construire la macro !)

Les petits pentagones sont dans un rapport $\dfrac{1}{\phi^2} \approx 0,4$ par rapport au pentagone initial. $\phi$ est le nombre d’or, égal à $\dfrac{1+\sqrt{5}}{2}$

En effet, soit u le côté du petit pentagone. $72° = \dfrac{2\pi}{5} rad$. On va plutôt exprimer les angles en radians.
Pour obtenir un recollement sans chevauchement, on doit avoir :

$u+2.u.cos(2\pi/5)+u = AB$

$2u(1+cos(2\pi/5))=AB$

D’où $u=\dfrac{AB}{2(1+cos(2\pi/5))}=\dfrac{AB}{4.cos^2(\pi/5)}=\dfrac{AB}{\phi^2}$   (car $cos(\pi/5)=\dfrac{\phi}{2}$)

Donc $k=\dfrac{1}{\phi^2}$

Pour construire la macro, on part de deux points libres A et B (sommets consécutifs du pentagone initial) et il faut atteindre les sommets du petit pentagone central.

On commence par tester ce script :

On voit comment construire le pentagone intérieur, et on peut donc annuler ce script pour lancer le suivant :

CarMetal - 1 ko

La figure obtenue permet de construire la macro durer :

On désigne comme initiaux A et B, comme finaux les cinq points du pentagone intérieur.

On termine comme précédemment (voir « Méthode classique : avec une macro et sans tortue »). A ceci près que l’on peut utiliser la tortue dynamique pour construire le pentagone régulier. C’est ce que l’on a fait pour montrer le côté « mutant » de la tortue de CaRMetal.
Le script est le suivant :

On obtient de jolies figures qui inspirèrent Dürer en son temps.

CarMetal - 8.4 ko
figure CaRMetal avec script

On peut aussi construire les pentagones en utilisant une macro d’initiaux A et B et de final le pentagone correspondant, comme on l’a fait au début de l’article.
Le script est alors celui-ci :

On obtient bien entendu les mêmes figues dynamiques.
Pour accélérer le script, on a aussi construit une macro reducPenta2 (ayant le même effet que la macro reducPenta) avec les outils virtuels plutôt qu’avec la tortue, autrement dit selon le schéme général donné en début d’article. Le script ne change pas.

On voit qu’il y a différentes options cohérentes pour arriver au même résultat final.

CarMetal - 7.5 ko
CarMetal - 10.9 ko
figure CaRMetal avec script (reducPenta)
figure CaRMetal avec script (reducPenta2)

   b) En géométrie de la tortue

Le script est analogue à celui du triangle de Sierpinski équilatéral. On l’a fait plus loin pour le pentagone de Serpinski

IV) Fractals de Sierpinski

Le principe est toujours le même : on décompose le polygone régulier en polygones homothétiques par rapport aux sommets. Le rapport des homothéties est choisi pour que les petits polygones soient accolés sans se chevaucher.

Pour le pentagone, on l’a vu plus haut, le rapport des homothéties est $\dfrac{1}{\phi^2}$.
Pour l’hexagone, le rapport est $\dfrac{1}{3}$.
Pour l’octogone, le rapport est $\dfrac{1}{2+\sqrt{2}}$ (car si u est le côté du petit octogone, on a : $u+\sqrt{2}u+u = AB$).

Un petit mot sur la dimension fractale D d’un objet géométrique :

Le concept de dimension a été généralisé en s’appuyant sur cette observation :
si D est la dimension d’un objet, alors la mesure (qui est une longueur si on est en dim 1, une aire si on est en dim 2 et un volume si on est en dim 3) de cet objet est multipliée par $a^D$ lorsque la taille de cet objet est multipliée par $a$.
Par exemple, dans un agrandissement de rapport $a$ :

  • les longueurs (sous-entendu des objets de dim 1) sont multipliées par $a$
  • les aires (sous-entendu des objets de dim 2) sont multipliées par $a^2$.
  • les volumes (sous-entendu des objets de dim 3) sont multipliés par $a^3$.

Pour les fractals de Sierpinski, l’aire est multipliée par n (nombre de côtés du polygone) lorsque la taille de l’objet est multipliée par $a=\dfrac{1}{k}$. ($\dfrac{1}{k}$ est le rapport d’agrandissement)

Donc $(1/k)^D = n$

$-D. ln(k) = ln(n)$

$D = -ln(n)/ln(k)$

Pour le triangle de Sierpinski :   $k=\dfrac{1}{2}$   et   $D = \dfrac{ln(3)}{ln(2)} \approx 1,58$

Pour le pentagone de Sierpinski :   $k=\dfrac{1}{\phi^2}$   et   $D = \dfrac{ln(5)}{2.ln(\phi)} \approx 1,67$

Pour l’hexagone de Sierpinski :   $k=\dfrac{1}{3}$   et   $D = \dfrac{ln(6)}{ln(3)} \approx 1,63$

Pour l’octogone de Sierpinski :   $k=\dfrac{1}{2+\sqrt{2}}$   et   $D = \dfrac{ln(8)}{ln(2+\sqrt{2})} \approx 1,69$

   a) Avec une macro

Le script est identique à celui qui construit la fractale de Dürer, mais sans retenir le pentagone central. Il suffit donc de supprimer (ou de passer en commentaire) une ligne du script :

On obtient ces figures dynamiques :



CarMetal - 10.9 ko
figure CaRMetal avec script

Pour le même prix, on peut construire des étoiles (pentagrammes) plutôt que des pentagones réguliers.
On construit une macro intitulée pentagramme que l’on utilise en lieu et place de la macro pentaR. A ceci près, le script ne change pas.


CarMetal - 13.8 ko
figure CaRMetal avec script

Pour l’hexagone, on construit les macro hexaR et reducHexa comme précédemment.
Les finaux de reducHexa sont les 12 points intérieurs qui permettent de poursuivre la récursion.
Le script est du même type que précédemment :

On obtient ces figures dynamiques :


La partie centrale est un flocon de Koch et les 6 côtés sont des courbes de Koch.

L’octogone est obtenu en suivant le même processus. Rien de nouveau dans le script :

On obtient ces jolies figures dynamiques :


CarMetal - 16.5 ko
CarMetal - 24.7 ko
figure CaRMetal avec script
figure CaRMetal avec script

   b) En géométrie de la tortue

On adapte le script du triangle de Sierpinski équilatéral.


CarMetal - 2.8 ko
figure CaRMetal avec script

V) Fractals 3D

   A) Le tétraèdre de Sierpinski

Pour finir, on va appliquer la méthode en 3D et construire le tétraèdre de Sierpinski.
Comme on va le voir, il y a peu de différence.

* On commence par créer une nouvelle figure 3D (menu Fichier / Nouvelle figure 3D).

* On crée quatre points libres A, B, C, D qui seront les sommets du tétraèdre initial.
Dans CaRMetal, les points 3D peuvent être créés en manipulation directe (en cliquant sur la fenêtre graphique, comme en 2D). Par défaut les points sont libres et peuvent être déplacés par cliquer-glisser (dans un plan frontal).

* On crée les milieux des arêtes :

E est le milieu de [AB].
F est le milieu de [AC].
G est le milieu de [AD].
H est le milieu de [BD].
I est le milieu de [BC].
J est le milieu de [CD].

* On crée la macro reducTetra.
En 3D, tous les points 3D dépendent de O, X, Y, Z. Toutes les macro 3D ont au moins O, X, Y, Z pour initiaux et s’appliquent avec ces points.
On crée une nouvelle macro.
On désigne comme initiaux O, X, Y, Z, A, B, C, D.
On désigne comme finaux E, F, G, H, I, J.
On nomme cette macro reducTetra.

* On crée le script avec une fonction récursive :

Pour construire les faces du tetraèdre, on utilise la CaRCommande Polygone3D qui gère le placement sur des calques différents (superposition).
Il faut faire preuve d’un peu d’attention pour donner la même couleur aux faces parallèles (ce que l’on a fait ici).

On choisit les préfèrences avant de lancer le script (en particulier l’absence de transparence des polygones).

Préférences par défaut pour les points : points invisibles !

Préférences par défaut pour les polygones :

On obtient cette figure dynamique en A, B, C, D :

CarMetal - 23.3 ko
figure 3D CaRMetal avec script

   B) L’éponge de Menger

L’éponge de Menger est la version 3D du tapis de Sierpinski. Elle a été décrite la première fois par le mathématicien autrichien Karl Menger. On pourrait dire qu’il s’agit du cube de Sierpinski.

On a construit l’éponge de Menger dans cet article sur carmetal.org. Mais on l’a fait alors en utilisant les coordonnées et sans avoir recours à des macros. Intrinsèquement, c’est moins intéressant que la méthode que l’on a utilisé ici pour construire les différents fractals.
On se propose pour finir de construire l’éponge de Menger selon la méthode emblématique du présent article.

NB : cette partie est difficile est peut être ignorée en première lecture.

En fait, on va même construire un objet plus général, à savoir le « parallélépipède de Sierpinski », dont l’éponge de Menger sera un cas particulier. Ce parallélépipède de Sierpinski sera dynamique par rapport à quatre points.

On part de quatre points libres A, B, C D.

On complète le parallélépidède avec l’outil translation 3D. C’est à ce parallélépidède que l’on appliquera le processus d’évidement.


Reprenons le script du tétraèdre de Sierpinski :

On commence par construire la fonction parallelepipede.

Reste à s’occuper de la récursion et en particulier de la macro reducParallelepipede.
On a besoin non pas du milieu des arêtes, mais des trilieux des arêtes. On va créer une macro pour obtenir rapidement ces trilieux.
On pourrait le faire avec les coordonnées 3D, mais on va plutôt le faire avec la tortue, ce qui est plus inattendu. On commence par créer le nouveau script suivant :

Après avoir lancé ce script, on peut construire la macro trilieux d’initiaux O, X, Y, Z, A, B et de finaux les deux points trilieux.

On peut annuler le script, la macro trilieux est conservée.
Ensuite on peut fixer O, X, Y, Z dans la macro trilieux pour pouvoir l’utiliser plus commodément. On déplie le panneau de gauche puis on accède aux propriétés de la macro.

On fixe les quatre premiers initiaux.

On peut alors construire les (nombreux) trilieux des arêtes dont on a besoin pour la récursion à l’aide de la macro trilieux.


Le tout, c’est de ne pas avoir froid aux yeux...
On peut ensuite créer la macro reducParallelepipede . Cette macro a 60 finaux, et on les désigne dans cet ordre :




On adapte la fonction récusive sierpinski.

On fixe les préférences comme précédemment et on lance le script.
On obtient cette figure dynamique en A, B,C, D :

CarMetal - 108.1 ko
figure 3D CaRMetal avec script

Prolongement possible :

Construire d’autres figures fractales par récursivité : voir cet article sur MathémaTICE dont les scripts pourraient être formulés selon la syntaxe que l’on a utilisée ici.

Construire la courbe de Gosper : voir cet article sur carmetal.org

Construire la fractale du Bibendum : voir cet article sur carmetal.org


notes

[1On doit à Benoît Mandelbrot le qualificatif fractal en 1975 (du latin frangere = briser). Au masculin pluriel, on utilise l’adjectif fractals (selon un néologisme de Mandelbrot lui-même) et non pas fractaux.

[2Quant à l’entêtement à programmer en Logo, on a tout lieu de penser qu’il s’agit d’une scorie de l’ancien monde et que c’est une fixation régressive.

[3Remarque : les segments sont inutiles, le milieu est le milieu d’un bipoint (et non d’un segment) dans CaRMetal.

[4Cette macro correspond à une homothétie de centre le centre de gravité du triangle ABC et de rapport -1/2, homothétie que l’on appliquerait à trois points.

Réagir à cet article
Vous souhaitez compléter cet article pour un numéro futur, réagir à son contenu, demander des précisions à l'auteur ou au comité de rédaction...
À lire aussi ici
MathémaTICE est un projet
en collaboration avec
Suivre la vie du site Flux RSS 2.0  |  Espace de rédaction  |  Nous contacter  |  Site réalisé avec: SPIP  |  N° ISSN 2109-9197