Relativement à trois points A,B et C de coordonnées A(-200,-200), B(200,-200) et C(0,200) la tortue va se déplacer un "grand nombre de fois" à l'intérieur du triangle ABC de la manière suivante
x_A <- -200
y_A <- -200
x_B <- 200
y_B <- -200
x_C <- 0
y_C <- 200
x_T <- 0
y_T <- 0
répéter un grand nombre de fois
de <- un nombre entier au hasard entre 1 et 3 inclus
si de = 1
#on calcule les coordonnées de la nouvelle position de la tortue
#au milieu de la précédente position et du point A
x_T <- (x_T + x_A)/2
y_T <- (y_T + y_A)/2
fin de si
si de = 2
#on calcule les coordonnées de la nouvelle position de la tortue
#au milieu de la précédente position et du point B
x_T <- (x_T + x_B)/2
y_T <- (y_T + y_B)/2
fin de si
si de = 3
#on calcule les coordonnées de la nouvelle position de la tortue
#au milieu de la précédente position et du point C
x_T <- (x_T + x_C)/2
y_T <- (y_T + y_C)/2
fin de si
placer la tortue en (x_T,y_T)
marquer le point
fin de répéter
Nous découvrons un nouveau type d'instructions, le test si ....alors ....
Si l'expression de = 1 est vraie alors on va mettre à jour les coordonnées de la tortue par rapport au point A
De même si l'expression de = 2 est vraie alors on va mettre à jour les coordonnées de la tortue par rapport au point B
On traduit en python le jeu du Chaos (à complétez et exécutez)
from turtle import *
from random import *
GRAND_NOMBRE = 1000
EPAISSEUR = 3
COULEUR_A = "red"
COULEUR_B = "green"
COULEUR_C = "blue"
x_A = -200
y_A = -200
x_B = 200
y_B = -200
x_C = 0
y_C = 200
x_T = 0
y_T = 0
speed(0)
hideturtle()
penup()
for i in range(GRAND_NOMBRE):
de = randint(1,3)
if de == 1:
#formule du milieu, la nouvelle position de la tortue
#est au milieu de l'ancienne et de la position du point A
x_T = (x_T + x_A)/2
y_T = (y_T + y_A)/2
pencolor(COULEUR_A)
if de == 2:
x_T = .....
y_T = .....
pencolor(COULEUR_B)
if de == 3:
x_T = ....
y_T = ....
pencolor(COULEUR_C)
goto(x_T,y_T)
pendown()
dot(EPAISSEUR)
penup()
On peut simplifier le test ci-dessus car imaginons par exemple que la valeur de de est égale à 1, pourquoi alors tester si le de vaut 2 puis si le de vaut 3, c'est inutile
#si de vaut 1
if de == 1:
#formule du milieu, la nouvelle position de la tortue
#est au milieu de l'ancienne et de la position du point A
x_T = (x_T + x_A)/2
y_T = (y_T + y_A)/2
#sinon
else:
#si de vaut 2
if de == 2:
x_T = .....
y_T = .....
#sinon
else:
x_T = ....
y_T = ....
Le langage python permet encore de simplifier de la manière suivante:
#si de vaut 1
if de == 1:
#formule du milieu, la nouvelle position de la tortue
#est au milieu de l'ancienne et de la position du point A
x_T = (x_T + x_A)/2
y_T = (y_T + y_A)/2
#sinon si de vaut 2
elif de == 2:
x_T = .....
y_T = .....
#sinon
else:
x_T = ....
y_T = ....
La figure obtenue pour le jeu du Chaos s'appelle le triangle de Sierpinski
Une autre façon de l'obtenir est en partant d'un triangle, de diviser celui-ci en 4 triangles égaux, puis d'enlever le triangle central et de recommencer ce processus un grand nombre de fois sur chaque triangle plus petit
Comment diviser un triangle en 4 triangles "égaux" ?
Construire les images du triangle par des homothéties de centre les sommets et de rapport $\dfrac{1}{2}$ (L'observer avec Geogebra)
Ce qui explique pourquoi à chaque fois dans le jeu du Chaos on prend le milieu du segment reliant la position de la tortue et un sommet du triangle
Comment étendre ce processus à un carré?
On va diviser un carré en 9 carrés égaux puis enlever le carré central puis recommencer...
Comment diviser un carré en 9 carrés "égaux" ?
Construire les images du carré par des homothéties de centre les sommets et les milieux des côtés de rapport $\dfrac{1}{3}$ (L'observer avec Geogebra)
Comment adapter les règles du jeu du Chaos ?
Voici le résultat
x <- 20
Répéter 5 fois
si x est pair
x <- x/2
sinon
x <- 3*x +1
Exécutez l'algorithme suivant en faisant un tableau pour les variables x_T et de
On suppose que de a pris les valeurs 0,1 et 0
x_A <- -200
x_B <- 200
x_T <- 0
Répéter 3 fois
de <- entier au hasard entre 0 et 1
si de = 0
x_T <- (x_T + x_A)/2
sinon
x_T <- (x_T + x_B)/2
fin de si
fin de répéter
Modifier l'algorithme pour compter le nombre de fois où 0 apparaît en introduisant une variable nb_zeros qui mémorise le nombre de zéros
S'inspirer du dessin suivant pour faire une variante du jeu du Chaos