En 2024, entre deux vagues, il y aura peut-être les Jeux Olympiques de Paris. Alors l'éducation nationale nous propose ceci:
Mettre en place un projet pédagogique sur les Jeux olympiques et paralympiques.
Sur une idée de ma collègue de SNT, dans la catégorie "Entrer par les autres disciplines", nous concourons pour la médaille d'honneur agricole dite "le poireau" ou l'ordre du mérite agricole sur le thème "Dessine moi un drapeau en python".
Evidemment, il doit ressembler de loin à cela:
Pour entrer dans l'aventure lisez la suite...
Dessiner un cadre
Idée
Utiliser turtle et 2 fonctions
Script
#Dessiner rectangle
from turtle import *
fd(600)
left(90)
fd(400)
left(90)
fd(600)
left(90)
fd(400)
left(90)
Rq
Facile, on devrait même faire une boucle
Amélioration
Centrer le cadre, c'est mieux
Dessiner un cadre centré
Idée
Diviser la largeur et la hauteur par 2 et se décaler
Script
#Dessiner rectangle centré
from turtle import *
penup()
goto(-600/2,-400/2)
pendown()
fd(600)
left(90)
fd(400)
left(90)
fd(600)
left(90)
fd(400)
left(90)
Rq
Vous devriez faire une boucle et sortir du brouillon
Notez le penup et pendown (pour éviter de gribouiller)
Amélioration
Pour visualiser les centres des cercles, je me dis qu'un quadrillage peut m'aider. Choix de la maille de la grille au pif, disons 50
Dessiner le quadrillage
Idée
Un goto et une boucle tant que car je ne suis fort en maths.
Script
#Dessiner rectangle centré
from turtle import *
penup()
goto(-600/2,-400/2)
pendown()
fd(600)
left(90)
fd(400)
left(90)
fd(600)
left(90)
fd(400)
left(90)
# quadrillage verticale
penup()
goto(-600/2,-400/2)
pendown()
l=0
while l<600:
l=l+50
fd(l)
left(90)
fd(400)
left(-90)
penup()
goto(-600/2,-400/2)
pendown()
# quadrillage horizontal
penup()
goto(-600/2,-400/2)
pendown()
l=0
left(90)
while l<400:
l=l+50
fd(l)
right(90)
fd(600)
right(-90)
penup()
goto(-600/2,-400/2)
pendown()
left(-90)
Rq
Pour le quadrillage horizontal la première fois ça ne marchait pas, un problème de logique avec le left
Amélioration
Maintenant que j'ai ma grille, je peux choisir mes centres pour les cercles
Et si je plaçais des points (dot)?
Les centres de mes futurs cercles
Idée
Attention aux coordonnées relatives (fd) et absolues (goto)
Vous noterez que j'ai supprimé la grille puisque j'ai choisi mes centres
Script
#Dessiner rectangle centré
from turtle import *
penup()
goto(-600/2,-400/2)
pendown()
fd(600)
left(90)
fd(400)
left(90)
fd(600)
left(90)
fd(400)
left(90)
# les centres
penup()
goto(-600/2,-400/2)
pendown()
# les 3 centres du haut
for i in range (3):
penup()
goto(-600/2+i*2*50+4*50,-400/2+5*50)
pendown()
dot()
# les 2 centres du bas
for i in range (2):
penup()
goto(-600/2+i*2*50+5*50,-400/2+3*50)
pendown()
dot()
Amélioration
Je me verrai bien enregistrer les coordonnées de mes centres dans une liste
Centres des cercles et liste
Idée
Dans mes boucles se trouvent les coordonnées, alors une liste vide puis la méthode .append dans mes boucles devraient suffire
Script
#Dessiner rectangle centré
from turtle import *
penup()
goto(-600/2,-400/2)
pendown()
fd(600)
left(90)
fd(400)
left(90)
fd(600)
left(90)
fd(400)
left(90)
# les centres avec coord dans liste
coordcentre=[]
penup()
goto(-600/2,-400/2)
pendown()
for i in range (3):# les 3 centres du haut
penup()
goto(-600/2+i*2*50+4*50,-400/2+5*50)
coordcentre.append([-600/2+i*2*50+4*50,-400/2+5*50])
pendown()
dot()
for i in range (2):# les 2 centres du bas
penup()
goto(-600/2+i*2*50+5*50,-400/2+3*50)
coordcentre.append([-600/2+i*2*50+5*50,-400/2+3*50])
pendown()
dot()
Rq
J'obtient donc une liste contenant
>>> coordcentre
[[-100.0, 50.0], [0.0, 50.0], [100.0, 50.0], [-50.0, -50.0], [50.0, -50.0]]
Mes 5 cercles
Idée
Utiliser circle( rayon) et se rappeler qu'il commence le cercle dans la direction de la tortue et tourne dans le sens trigo
Script
#Dessiner rectangle centré
from turtle import *
penup()
goto(-600/2,-400/2)
pendown()
fd(600)
left(90)
fd(400)
left(90)
fd(600)
left(90)
fd(400)
left(90)
# les centres avec coord dans liste
coordcentre=[]
penup()
goto(-600/2,-400/2)
pendown()
for i in range (3):# les 3 centres du haut
coordcentre.append([-600/2+i*2*50+4*50,-400/2+5*50])
for i in range (2):# les 2 centres du bas
coordcentre.append([-600/2+i*2*50+5*50,-400/2+3*50])
# les cercles
for i in range (5):
penup()
goto(coordcentre[0+i][0],coordcentre[0+i][1]-50)
pendown()
pensize(10)
pencolor("blue")
circle(75)
Rq
Notez le décalage de 50 verticalement
Amélioration
Créer une autre liste pour les couleurs afin de les appeler dans une boucle
The flag
Script
#Dessiner rectangle centré
from turtle import *
penup()
goto(-600/2,-400/2)
pendown()
fd(600)
left(90)
fd(400)
left(90)
fd(600)
left(90)
fd(400)
left(90)
# les centres avec coord dans liste
coordcentre=[]
penup()
goto(-600/2,-400/2)
pendown()
for i in range (3):# les 3 centres du haut
coordcentre.append([-600/2+i*2*50+4*50,-400/2+5*50])
for i in range (2):# les 2 centres du bas
coordcentre.append([-600/2+i*2*50+5*50,-400/2+3*50])
couleur=["blue","black","red","yellow","green"]
# les cercles
for i in range (5):
penup()
goto(coordcentre[0+i][0],coordcentre[0+i][1]-50)
pendown()
pensize(10)
pencolor(couleur[i])
circle(75)
Vous noterez que mon résultat n'est pas solidaire... puisque les anneaux son simplement superposés et non enchaînés... Il ne me nous reste plus Dominique qu'a retourner au potager car c'est le seul moyen d'avoir un poireau ;)
Aucun commentaire:
Enregistrer un commentaire
Tout commentaire nous engage ;)