Article épinglé

mardi 7 décembre 2021

JO, 2024, SNT et turtle - "Dessine moi le drapeau des JO!"

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)

Résultat

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 ;)