Vidéo 19 : Boucle for : dessiner une frise

\(\newcommand{\ds}{\displaystyle}\) \(\newcommand{\Frac}{\ds\frac}\) \(\renewcommand{\r}{\mathbb{ R}}\) \(\newcommand{\C}{\mathbb{ C}}\) \(\newcommand{\n}{\mathbb{ N}}\) \(\newcommand{\z}{\mathbb{ Z}}\) \(\newcommand{\Q}{\mathbb{ Q}}\) \(\newcommand{\N}{\mathbb{ N}}\) \(\newcommand{\n}{\mathbb{ N}}\) \(\newcommand{\ol}{\overline}\) \(\newcommand{\abs}[1]{\left| \,{#1} \right|}\) \(\newcommand{\pv}{\;;\;}\) \(\newcommand{\ens}[1]{\left\{ {#1} \right\}}\) \(\newcommand{\mens}[1]{\setminus\left\{ {#1} \right\}}\) \(\newcommand{\Par}[1]{\left({#1}\right)}\)

Vidéo 19 : Boucle for : dessiner une frise

Dessiner une frise

Cet exercice est corrigé en vidéo.

  1. Ecrire une fonction motif(x, y, e) qui trace sous Turtle la ligne polygonale ci-dessous

    ../../../_images/modele.png

    en 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}\).

  2. En déduire un programme de tracé de \(n\) frises comme ci-dessous où \(n=6\) :

    ../../../_images/frise.png

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