TP - Fractales☘
Dans le dossier [NSI]
, créez le dossier [D03-Recursivite]
.
Dans ce dossier, enregistrez vos fichiers avec le nom donné à l'exercice
(TPD03.11.py
, TPD03.12.py
, ...).
Important
- Dans chaque fonction à programmer, remplacez le mot-clef
pass
par les instructions nécessaires. - Pour gagner du temps, on ne lèvera pas les erreurs sur les types de
données entrées par l'utilisateur. On considèrera que si la spécification
indique un type
int
, alors ce sera bien un typeint
qui sera saisi.
Les TP avec une étoile peuvent être traités dans un deuxième temps...
TPD03.11 - La courbe de Von Koch☘
Ce premier TP a pour but de vous faire tracer une fractale appelée courbe de Von Koch.
Téléchargez le fichier « à trous » TPD03.11.py
(clic droit -> [Enregistrer sous]) et enregistrez-le dans le dossier
[D03-Recursivite]
.
Le processus de base☘
On part d'un segment (étape 0) :
puis on transforme ce segment ainsi (étape 1) :
Dans cette figure transformée, chaque segment a une longueur égale au tiers de la longueur du segment de l'étape 0 et la base de la pointe a aussi cette longueur (on a donc un triangle équilatéral).
Complétez le code de la fonction etape()
. Vous utiliserez uniquement les
instructions left()
,
right()
et
forward()
.
1 2 3 4 5 6 7 |
|
Testez ensuite cette fonction en effectuant un appel dans le Programme principal.
Conseil
Réalisez un dessin à la main avant de vous lancer dans la programmation pour bien identifier les angles de rotation.
La répétition☘
On réitère ensuite le processus précédent.
- Etape 2 :
- Etape 3 :
- ...
En vous inspirant du travail réalisé dans la question précédente,
complétez le code de la fonction récursive courbeVonKoch()
qui permet de
réaliser ces figures.
Attention, il ne faut pas faire appel à la fonction etape()
, il faut s'inspirer de sa structure.
1 2 3 4 5 6 7 8 |
|
Une piste
Exprimer courbeVonKoch(stylo, n, cote)
en fonction de courbeVonKoch(stylo, n-1, cote//3)
:
Exemple d'appel
L'appel courbeVonKoch(sophie, 4, 400)
permet de tracer l'image ci-dessous :
On change l'étape de base☘
On part d'un segment :
et maintenant on le tranforme comme suit :
Proposez un code de répétition de ce processus comme vous l'avez fait pour la courbe de Von Koch.
1 2 3 4 5 6 7 8 |
|
Exemple d'appel
L'appel courbeCarreeVonKoch(sophie, 3, 200)
permet de tracer l'image
ci-dessous :
TPD03.12 - Le triangle de Sierpinsky☘
Ce deuxième TP a pour but de vous faire tracer une fractale appelée triangle de Sierpinsky.
Téléchargez le fichier « à trous » TPD03.12.py
(clic droit -> [Enregistrer sous]) et enregistrez-le dans le dossier
[D03-Recursivite]
.
Le processus de base☘
Le triangle de Sierpinski est défini de la manière suivante :
-
On part d'un triangle équilatéral colorié (étape 0) :
-
puis on enlève le triangle central (étape 1) : Dans cette figure transformée, l'aire coloriée vaut trois fois l'aire non coloriée.
-
Complétez le code de la fonction
dessine_triangle()
qui trace un triangle équilatéral de longueur de côtécote
.3 4 5 6 7 8 9
def dessine_triangle(stylo, cote): """ stylo - une tortue cote, int, entier strictement positif, longueur d'un côté du triangle Sortie: None - La tortue trace un triangle équilatéral de longueur de côté cote """ pass
-
Complétez la définition de la fonction
etape()
qui permet de représenter la figure de l'étape n°1.12 13 14 15 16 17 18
def etape(stylo, cote): """ stylo - une tortue cote - int, entier strictement positif, longueur du segment initial Sortie: None - La tortue trace une étape du triangle de Sierpinsky """ pass
La répétition☘
On réitère ensuite le processus précédent.
-
Etape 2 :
-
Etape 3 :
-
etc...
En vous inspirant du travail réalisé dans la question précédente, complétez
la définition récursive de la fonction Sierpinski()
qui permet de réaliser
ces figures.
Attention, il ne faut pas faire appel à la fonction etape()
, il faut s'inspirer de sa structure.
21 22 23 24 25 26 27 28 |
|
Exemple d'appel
L'appel Sierpinski(sophie, 4, 400)
permet de tracer l'image ci-dessous :
TPD01.53 - La courbe du dragon☘
Auteurs
L'idée originale de ce TP provient de Messieurs LACPATIA, RUEL et SOLEILLANT, enseignants de l'académie de Lyon.
Ce dernier TP a pour but de vous faire tracer une fractale appelée courbe du Dragon.
Téléchargez le fichier « à trous » TPD03.13.py
(clic droit -> [Enregistrer sous]) et enregistrez-le dans le dossier
[D03-Recursivite]
.
Toutefois, il faut commencer par répondre à quelques questions sur son cahier...
Présentation de cette courbe☘
-
On plie une bande de papier en deux, et on la déplie, le motif obtenu est le suivant :
-
On plie une bande de papier en deux, puis à nouveau en deux (dans le même sens, arbitrairement à gauche), et on la déplie, le motif obtenu est le suivant :
-
On plie une bande de papier en deux, puis à nouveau en deux (dans le même sens, arbitrairement à gauche) et encore une troisième fois en deux, et on la déplie, le motif obtenu est le suivant :
-
On répète les pliages 4 fois de suite, on déplie la figure, on obtient le motif suivant :
-
On répète les pliages 5 fois, toujours dans le même sens et ensuite on déplie la bande de papier, on obtient le motif suivant :
Nous sommes rapidement limités au moment du 6ème ou du 7ème pliage alors même qu'il est possible d'appréhender la suite des figures ainsi obtenues :
Modélisation de la situation☘
On cherche à connaitre les différents pliages, quel que soit le numéro de l'étape, afin de pouvoir tracer le motif dessiné au bout d'un grand nombre d'itérations.
-
A l'étape 1, à l'issue du dépliage, on obtient un « coude » orienté vers la droite.
La figure ainsi obtenue sera notée D. -
A l'étape 2, à l'issue du dépliage, on obtient trois « coudes » orientés successivement vers la droite, encore vers la droite puis vers la gauche.
La figure ainsi obtenue sera notée D - D - G -
A l'étape 3, à l'issue du dépliage, on obtient sept « coudes ».
La figure ainsi obtenue sera noté D - D - G - D - D - G - G -
etc...
Cette partie a pour but d'identifier comment passer d'une étape à la suivante à partir de ces modélisations. On peut déjà constater que le nombre de lettres est impaire dans chaque notation.
-
Quelle est la lettre « centrale » dans chaque notation ? Pourquoi ?
-
On a réécrit ci-contre la notation de l'étape 2 : , et celle de l'étape 3 : .
A l'aide des indications de couleur, essayez d'identifier ce que sera la notation de l'étape 4. -
En déduire l'algorithme permettant de passer d'une étape à l'autre.
-
Appelez l'enseignant pour vérifier vos réponses.
Programmation et visualisation☘
-
Complétez la définition de la fonction
inverse()
qui prend comme argument une chaine de caractères constituée de'D'
et de'G'
et qui renvoie une chaine de caractères de même longueur dans laquelle les'D'
et les'G'
ont été échangés par rapport à la chaine initiale. De plus, cette deuxième chaîne est « renversée » par rapport à la première.3 4 5 6 7 8 9
def inverse(chaine): """ chaine - str, chaîne de caractères constituée de D et de G Sortie: str, chaîne de caractères de même longueur dans laquelle les D sont devenus des G et vice-versa, et l'ordre des lettres a été renversé """ pass
Exemple de tests
>>> inverse('DDGDDGG') 'DDGGDGG' >>> inverse('DDGDDGGDDDGGDGG') 'DDGDDGGGDDGGDGG'
-
Complétez la définition récursive de la fonction
dragon()
qui renvoie la notation de lan
-ième étape sous la forme d'une chaîne de caractères constituée de'D'
et de'G'
.13 14 15 16 17 18
def dragon(n): """ n - int, entier strictement positif Sortie: str, chaîne de caractères constituée de D et de G correspondant à la suite des pliages à l'étape n """ pass
Exemple de tests
>>> dragon(1) 'D' >>> dragon(3) 'DDGDDGG' >>> dragon(6) 'DDGDDGGDDDGGDGGDDDGDDGGGDDGGDGGDDDGDDGGDDDGGDGGGDDGDDGGGDDGGDGG'
-
En déduire la définition de la fonction
dessin()
qui permet de tracer la courbe du dragon avecturtle
à l'étapen
.22 23 24 25 26 27 28
def dessin(stylo, n, dist): """ stylo, une tortue n, dist - int, entiers strictement positifs Sortie: None, la tortue trace l'étape n de la courbe du dragon, avec des segments de longueur dist """ pass
Exemple
L'appel
dessin(sophie, 10, 10)
renvoie la figure suivante :