Vidéo 19 : Boucle for : dessiner une frise¶
Dessiner une frise¶
Cet exercice est corrigé en vidéo.
Ecrire une fonction
motif(x, y, e)
qui trace sous Turtle la ligne polygonale ci-dessousen sorte que l’extrémité en bas à gauche de la ligne soit le point de coordonnées \(\mathtt{(x,y)}\) et qui sera le point de départ de la tortue.
On supposera que tout écart entre deux segments parallèles voisins est constant, stocké dans la variable \(\mathtt{e}\). La largeur totale est donc de \(\mathtt{5e}\) et la hauteur totale de \(\mathtt{4e}\).
En déduire un programme de tracé de \(n\) frises comme ci-dessous où \(n=6\) :
Solution
On peut déterminer les coordonnées de tous les points de la ligne polygonale en fonction de \(\mathtt{x}\) et \(\mathtt{y}\) et utiliser la fonction goto
. On peut aussi remarquer que la tortue se déplace suivant des directions parallèles aux axes ce qui ne nécessite à chaque mouvement qu’un seul changement de coordonnées. C’est cette méthode qui est utilisée ci-dessous :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | from turtle import *
hideturtle()
e=50
x = y = 0
goto(x,y)
y = y + 4*e
goto(x,y)
x = x + 4*e
goto(x,y)
y = y - 3*e
goto(x,y)
x = x - 2*e
goto(x,y)
y = y + 1*e
goto(x,y)
x = x + 1*e
goto(x,y)
y = y + 1*e
goto(x,y)
x = x - 2*e
goto(x,y)
y = y - 3*e
goto(x,y)
x = x + 4*e
goto(x,y)
exitonclick()
|
Pour tracer la frise, il suffit de répéter le motif. Comme dans le tracé du motif précédent, le déplacement de la tortue s’effectue toujours avec la même commande goto(x,y)
, il suffit de recopier le code précédent dans une boucle :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | from turtle import *
hideturtle()
n=6
x=y=0
e=10
for i in range(n):
# le code de la question précédente
# est repris verbatim
goto(x,y)
y = y + 4*e
goto(x,y)
x = x + 4*e
goto(x,y)
y = y - 3*e
goto(x,y)
x = x - 2*e
goto(x,y)
y = y + 1*e
goto(x,y)
x = x + 1*e
goto(x,y)
y = y + 1*e
goto(x,y)
x = x - 2*e
goto(x,y)
y = y - 3*e
goto(x,y)
x = x + 4*e
goto(x,y)
exitonclick()
|