Les scripts et les figures du flocon
L'annexe Python prête à copier, les figures en haute résolution et le tracé animé du flocon.
La dernière page du DM promettait le tracé animé du flocon et les figures en haute résolution : les voici, accompagnés des programmes de l’annexe Python (Q31 à Q34), prêts à copier dans votre éditeur. Une règle du jeu, avant tout : les pointillés ... du document restent des pointillés ici. Les compléter, c’est l’exercice, et le DM n’a pas de corrigé. Seules les réponses du sommet (partie IV) sont publiées, sur leur page dédiée.
Le tracé animé
Les étapes à s’enchaînent en boucle, par fondu : le triangle, l’étoile, puis le bord qui se replie. L’animation est du CSS pur à l’intérieur du SVG, sans une ligne de JavaScript ; chaque étape reste affichée un peu moins de deux secondes, et le cycle complet dure dix secondes.
Regardez ce que l’animation montre et que la partie I démontrait : la figure ne grandit pas, elle reste enfermée dans le même hexagone (Q26). C’est son bord qui se replie de plus en plus finement, et c’est lui qui emporte le périmètre vers l’infini.
Les figures en haute résolution
Ces figures sont vectorielles : vous pouvez zoomer sans perte, aussi loin que votre écran le permet. Elles ont été engendrées par le programme de Q31, une fois complété, et leurs coordonnées ont été vérifiées par le calcul : à chaque rang , la longueur de la ligne obtenue sur un côté vaut , soit pour le flocon entier, et l’aire du polygone, calculée par la formule du lacet, redonne exactement la formule de Q12 : .
Étape 0. Le triangle de départ, de côté : périmètre , aire .
Étape 1. L’étoile : chaque côté a été remplacé par quatre côtés trois fois plus courts ; périmètre .
Étape 2. Périmètre : le bord commence à se replier.
Étape 3. Périmètre ; les côtés mesurent et l’œil commence à décrocher.
Étape 4. Périmètre . Le périmètre ne fait que commencer sa course ; l’aire, elle, s’est déjà presque immobilisée : c’est tout le paradoxe des parties I et II réuni dans une seule image.
Les programmes de l’annexe, prêts à copier
Les blocs ci-dessous sont fidèles au document, au caractère près. Dans toute l’annexe, on prend et , c’est-à-dire .
Q31 · Tracer le monstre
Trois passages en pointillés à compléter : le point , et deux des quatre appels récursifs.
from math import cos, sin, pi
def koch(A, B, n):
if n == 0:
return [A]
(ax, ay), (bx, by) = A, B
dx, dy = (bx - ax)/3, (by - ay)/3
P1 = (ax + dx, ay + dy)
P3 = ...
c, s = cos(-pi/3), sin(-pi/3)
P2 = (P1[0] + dx*c - dy*s, P1[1] + dx*s + dy*c)
return koch(A, P1, n-1) + ... + koch(P2, P3, n-1) + ...
Les repères de contrôle, déjà donnés par l’énoncé : le niveau doit renvoyer points (et le point n’y figure jamais, à vous d’expliquer pourquoi) ; après avoir ajouté à la liste, la longueur de la ligne brisée doit valoir . C’est la validation par la théorie : votre programme et votre partie I doivent tomber d’accord. Nos figures ci-dessus ont passé exactement ce test.
Q32 · Le seuil
Pas de squelette pour celle-ci : la fonction seuil(cible), qui renvoie le plus petit entier tel que pour mètre, est à écrire entièrement. Vos réponses à la question Q6 vous fournissent ses valeurs de contrôle.
Q33 · L’encadrement à quatorze chiffres
Deux pointillés à compléter, et uniquement des entiers en jeu.
def encadrement(qmax):
bas, haut = 0, 2
for q in range(1, qmax + 1):
for p in range(q, 2*q + 1):
if 3**p < 4**q and p/q > bas:
bas = ...
if 3**p > 4**q and p/q < haut:
haut = ...
return bas, haut
En chemin, Python manipule de façon exacte et , deux entiers à quatorze chiffres, recalculés et confirmés ici même. C’est toute la question Q33.b) : des entiers exacts, aussi grands soient-ils, prouvent ; des décimaux arrondis ne prouvent rien.
Q34 · Mesurer une dimension, vraiment
La fonction de comptage est fournie complète par le document :
def comptage(points, k):
return len({(int(x*k), int(y*k)) for (x, y) in points})
Deux rappels de l’énoncé pour l’utiliser sans se piéger : la courbe de niveau doit être complétée par le point , comme en Q31.b), sans quoi le premier rapport est faux d’une unité entière ; et les cinq rapports obtenus pour sont voisins de ; ; ; et . Nous avons ré-exécuté le comptage : ces cinq valeurs sont exactes telles quelles. Expliquer pourquoi elles ne valent pas toutes , en revanche, reste votre question b).
Sources
- DM1 A1, « Le monstre de 1904 », annexe « le laboratoire Python » : questions Q31 à Q34, dont les blocs de code ci-dessus sont la copie conforme.
- Les figures et l’animation de cette page ont été engendrées par programme, puis vérifiées : longueur et aire retrouvées à chaque étape, en accord avec les parties I et II du DM.