TP : Fractales¶

Le flocon de von Koch¶

En 1904, le mathématicien Helge von Koch (1870-1924 - Suède) publie l'article : "Sur une courbe continue sans tangente, obtenue par une construction géométrique élémentaire" qui décrit la suite de polygones infinie actuellement connue sous le nom de "flocon de von Koch".

La courbe originale de von Koch, aussi appelée courbe du flocon de neige, s'obtient comme la limite infinie d'un contour polygonal et voici comment construire cette suite de polygones :

Le flocon de von Koch se construit de manière récursive (quelle surprise…) :

On part d'un triangle équilatéral $F_1$ de côté de longueur l.

Pour tout entier n, pour passer d’un flocon $F_n$ au flocon suivant, on partage chaque segment de $F_n$ en trois segments égaux et on remplace le segment central par deux nouveaux segments, en formant un triangle équilatéral tourné vers l’extérieur (voir les figures suivantes) :

Le flocon de von Koch est l'objet fractal obtenu en recommençant le procédé à l'infini.

Vous pouvez observer une animation des premières itérations du flocon de von Koch : anime_von_Koch_curve

La construction de flocon de von Koch repose donc sur le principe de base ci-dessous :

Remarques mathématiques :

La construction originale de von Koch part d'un triangle équilatéral. En continuant suffisamment longtemps, on arrive à une figure très "torturée". En pratique, la courbe affichée sur un écran ne varie plus quand le segment élémentaire a une longueur inférieure à distance entre deux pixels, et on peut arrêter alors le processus, mais dans la définition mathématique, on continue indéfiniment (autrement dit n tend vers +∞).

Si on note L la longueur du triangle équilatéral initial, à chaque étape, la longueur de la figure est donc multipliée par 4/3. Ainsi la longueur totale de la figure obtenue suit donc une suite géométrique de raison 4/3.

On voit en mathématiques qu'une telle suite diverge vers +∞ (quand n tend vers +∞), la longueur de la figure est donc infinie. On arrive alors à ce qui a longtemps été considéré comme une "horreur mathématique" : une courbe de longueur infinie mais d'aire finie puisqu'elle est contenue dans un domaine fini du plan (on peut même prouver assez facilement que son aire est égale à 8/5 de l'aire du triangle initial).

1. Un peu de tortue…¶

a. Charger le module turtle. On utilisera la structure suivante qui devrait éviter des plantages à répétition avec Pyzo :

In [ ]:
import turtle
#debut du programme principal
turtle.speed(0)
# ...
# fin du programme principal
turtle.done()

b. Appeler les fonctions suivantes pour comprendre leur utilisation :

turtle.forward(200), turtle.left(90),  turtle.width(10), turtle.color('green'), turtle.forward(-300), turtle.right(120), turtle.up(), turtle.forward(200),  turtle.down(), turtle.forward(200)

c. À l'aide de fonctions bien choisies du module turtle, écrire une fonction qui dessine un triangle équilatéral de côté cote ("pointé vers le bas") puis une fonction qui dessine un carré de côté cote (pour accélérer l'affichage, on utilisera turtle.speed(0) en début de programme).

2. Les choses sérieuses : un algorithme récursif.¶

On commence par chercher à construire une seule ligne du flocon (ligne de von Koch) de profondeur n.

a. Quel est le cas de base ? Que fait-on "simplement" dans ce cas (en utilisant turtle) ?

b. Combien d'étapes sont nécessaires pour passer d'un segment de profondeur n-1 au suivant (observez le "principe de base donné au début) ? Décrire de façon récursive ces étapes (on pourra commencer par faire un dessin à la main et nommer des points pour s'aider).

c. Écrire la fonction récursive koch() qui prend 2 paramètres : cote la longueur initiale du segment et n la profondeur et qui trace (à l'aide de turtle) une ligne de von Koch.

3. Le flocon.¶

Écrire la fonction flocon qui prend en paramètre cote et n et qui utilise la fonction koch() pour tracer le flocon de von Koch de profondeur n (et pour la longueur cote de côté du triangle équilatéral).

Astuce : Pour que l'affichage soit presque instantané, ajoutez turtle.tracer(0) avant d'appeler la fonction flocon et turtle.update() après qu'elle se soit exécutée.

Variantes/compléments :

  1. L'anti-flocon de von Koch : au lieu de tracer les triangles équilatéraux vers l'extérieur de la figure, on les trace à l'intérieur... On obtient alors un autre objet fractal.

  2. Au lieu de se baser sur un triangle équilatéral, on se base sur un carré (initiateur carré).

Remarques : Il existe de nombreuses courbes obtenues sur le même principe en modifiant l'initiateur (la figure de base, celle de l'étape 1 de la courbe de von Koch) et le générateur (ce qui transforme la figure, comme la figure de l'étape 2 de la courbe de von Koch). On peut alors obtenir :

Un arbre fractal.¶

Le but est de construire l'arbre suivant :

arbre_fractal.jpg

Cet arbre peut être défini de façon récursive :

arbre_recursif.jpg

Pour tout entier n strictement positif et pour tout entier longueur strictement positif, un arbre de profondeur n et de longueur longueur est formé de 2 sous-arbres de profondeur n-1 et de longueur longueur*2/3 obtenus comme sur les figures précédentes (sur les figures précédentes : angle vers la gauche = angle vers la droite = 20° par rapport au tronc précédent).