Le jeu du Chaos

Le jeu du Chaos

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
     
          
 
 

Commentaires:

  1. 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()
     
 
 

Commentaires

  1. On utilise la bibliothèque random pour simuler un lancer de dé
  2. On insiste encore une fois x_T = (x_T + x_A)/2 n'est pas une égalité mathématique mais une instruction dans laquelle (lire de la droite vers la gauche) on prend le contenu de x_A et celui de x_T pour calculer la moyenne qui est affecté à x_T
  3. Attention! le = est le symbole d'affectation et le == est le symbole d'égalité
  4. Pour afficher plus rapidement le dessin encadrer la boucle for par tracer(0,0) et update()
  5. Faire varier l'épaisseur du point en changeant la variable EPAISSEUR
  6. Changer les couleurs

Variantes du test

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 = ....

Variantes du jeu

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

Exercices

Quelle est la valeur de x à la fin de l'algorithme ?
  1. 
    x <- 20
    Répéter 5 fois
        si x est pair
            x <- x/2
        sinon
            x <- 3*x +1
    
    
  2. Même question avec x <- 32
  3. 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

  4. Faire un programme python qui simule le lancer d'un dé à quatre faces et qui en fonction du résultat fait les actions suivantes: si le nombre 1 est sorti avancer la position d'un pion de une unité, si le nombre 2 est sorti afficher à l'écran "PERDU", si le nombre 3 est sorti reculer la position d'un pion de une unité, si le nombre 4 est sorti le pion retourne à la case départ.
  5. S'inspirer du dessin suivant pour faire une variante du jeu du Chaos

Que retenir ?

  1. Un test permet en fonction de la valeur de vérité d'une expression d'effectuer telle ou telle instruction
  2. Pour aller un peu plus loin dans le chaos voir ici