TP : 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".

Le flocon de von Koch se construit de manière récursive : on part d'un triangle équilatéral F1 de côté de longueur l. Pour tout entier n, pour passer d'un flocon Fn au flocon suivant, on partage chaque segment de Fn 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 :

Construction du flocon de von Koch

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.

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

Principe de base d'une ligne de von Koch
Remarques mathématiques :

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. Cette suite diverge donc vers +∞, la longueur de la figure est 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. Découverte du module turtle.

On utilisera la structure suivante, qui devrait éviter des plantages à répétition avec Pyzo :

import turtle
#debut du programme principal
turtle.speed(0)
# ...
# fin du programme principal
turtle.done()

Vous connaissez sans doute déjà certaines de ces fonctions, appelez-les pour vous rafraîchir la mémoire (et découvrir les autres) :

turtle.forward(100)   # avance de 100 pixels
turtle.backward(100)  # recule de 100 pixels
turtle.left(90)       # tourne vers la gauche de 90°
turtle.right(90)      # tourne vers la droite de 90°
turtle.penup()        # lève le stylo (les déplacements ne dessinent plus rien)
turtle.pendown()      # repose le stylo (les déplacements dessinent à nouveau)

2. Une ligne de von Koch, récursivement.

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

  1. Quel est le cas de base ? Que fait-on "simplement" dans ce cas ?
  2. Observez le "principe de base" donné ci-dessus : combien de segments obtient-on à partir d'un seul, et avec quels virages entre eux ? (On rappelle que dans un triangle équilatéral, chaque angle mesure 60°.) Faites un dessin à la main pour retrouver les angles exacts des virages.
    Attention : vérifiez bien qu'une fois les 4 sous-segments tracés, la tortue se retrouve réorientée exactement dans son cap d'origine.
  3. Écrire la fonction récursive koch(l, n) qui prend en paramètres l la longueur initiale du segment et n la profondeur, et qui trace une ligne de von Koch.
    Rappel : à chaque niveau de récursion, la longueur transmise aux sous-segments est l / 3.

3. Le flocon complet.

Écrire la fonction flocon(l, n) qui utilise koch() pour tracer le flocon de von Koch complet (3 lignes de von Koch formant un triangle).

Astuces

4. Pour aller encore plus loin : variantes.

  1. L'anti-flocon : au lieu de tracer les triangles équilatéraux vers l'extérieur de la figure, tracez-les vers l'intérieur. Attention : la fonction obtenue doit s'appeler elle-même à chaque niveau de récursion (et non pas la fonction koch() normale), sinon seul le premier niveau sera inversé.
  2. Flocon carré : au lieu de se baser sur un triangle équilatéral (3 côtés, virages de 120°), basez-vous sur un carré (4 côtés, virages de 90°).
Remarque : il existe de nombreuses courbes obtenues sur le même principe en modifiant l'initiateur (la figure de départ) et le générateur (la transformation appliquée à chaque segment). En voici quelques exemples :
Autres courbes construites sur le même principe que von Koch