Chap. 07 — Quelques dessins simples avec une tortue

Chap. 07 — Quelques dessins simples avec une tortuePrésentation de la « tortue graphique »Premiers mouvements dans la consoleDéfinition des premières fonctions graphiquesExercice 1Exercice 2Liste des commandes permettant de guider la tortueInstructions pour commander un déplacementModification ou accès à l'état de la tortue graphiqueQuelques commandes supplémentairesExercicesExercice 3Exercice 4Exercice 5Exercice 6Exercice 7Exercice 8Exercice 9Exercice 10


Présentation de la « tortue graphique »

La « tortue graphique » a été inventée à la fin des années 60 par Seymour Papert et ses collègues du MIT (célèbre université américaine) pour permettre de rendre l'apprentissage de la programmation plus ludique. Elle faisait alors partie du langage Logo, spécifiquement développé pour être utilisé par de jeunes enfants.

Le nom « tortue graphique » suggère la façon dont les figures géométriques vont être dessinées à l'écran.

On imagine une tortue capable de se déplacer sur une surface horizontale recouverte de sable et très à l'écoute de la personne qui la nourrit. Lorsque cette tortue se déplace, à la demande de sa (ou son) propriétaire, sa queue laisse une trace sur le sable. Parallèlement, cette tortue peut aussi se déplacer en gardant sa queue en l'air, de façon à ne laisser aucune trace à l'écran.

Les consignes passées à cette tortue permettent donc de tracer des figures géométriques simples mais aussi d'autres relativement complexes.

Premiers mouvements dans la console

  1. Lancer le programme Thonny.

  2. Dans l'interpréteur interactif, entrez l'instruction : import turtle Une flèche doit apparaitre à l'écran.

  3. Entrez l'instruction : tortue_1 = turtle.Turtle() Quel est l'effet de cette commande ?

  4. Entrez l'instruction : tortue_1.shape("turtle") Quel est l'effet de cette commande ?

  5. Entrez l'instruction : tortue_1.forward(25)

    1. Que venez-vous de demander de faire à la tortue ? Notez l'effet de cette commande.
    2. Que représente le nombre compris entre les deux parenthèses ? Dans quelle unité est-il exprimé ?
  6. Entrez la commande : tortue_1.left(30)

    1. Que venez-vous de demander de faire à la tortue ? Notez l'effet de cette commande.
    2. Que représente le nombre compris entre les deux parenthèses ? Dans quelle unité est-il exprimé ?
  7. Vous devez aussi absolument connaître deux instructions supplémentaires : tortue_1.backward() et tortue_1.right(). Expérimentez ces deux commandes et notez leurs effets. Utilisez différents arguments entiers.

Remarque 1. Si vous souhaitez réinitialiser l'écran, ce qui aura pour effet de repositionner la tortue à sa position de départ, utilisez l'instruction : tortue_1.reset()

Remarque 2. Si vous souhaitez seulement annuler les effets de la dernière instruction, utilisez l'instruction : tortue_1.undo()

Définition des premières fonctions graphiques

Exercice 1

Le programme suivant permet de tracer à l'écran un rectangle. Écrire les instructions du corps de la fonction permettant d'effectuer ce tracé.

Vous veillerez à utiliser le moins d'instructions possible. (Le nombre de lignes avec des pointillets correspond généralement au nombre d'instructions à écrire)


Solution

Exercice 2

Modifier le programme suivant de façon à ce qu'il trace à l'écran les trois carrés de la figure ci-dessous :

carres


Solution

Remarque. Consultez l'adresse suivante pour découvrir les couleurs utilisables : http://www.tcl.tk/man/tcl8.5/TkCmd/colors.htm](http://www.tcl.tk/man/tcl8.5/TkCmd/colors.htm).

Liste des commandes permettant de guider la tortue

Instructions pour commander un déplacement

Nom de la méthodeDescription
tortue.forward(distance)Avance la tortue de la distance passée en argument dans la direction selon laquelle la tortue est orientée. Le résultat de cette action dépend donc de l'état de la tortue.
tortue.backward(distance)Recule la tortue de la distance passée en argument dans la direction selon laquelle la tortue est orientée. Le résultat de cette action dépend donc de l'état de la tortue.
tortue.right(angle)Tourne la tortue d'un angle angle (exprimé en degrés) dans le sens opposé au sens trigonométrique à partir de la direction de la tortue. Le résultat de cette action dépend donc de l'état de la tortue.
tortue.left(angle)Tourne la tortue d'un angle angle (exprimé en degrés) dans le sens trigonométrique à partir de la direction de la tortue. Le résultat de cette action dépend donc de l'état de la tortue.
tortue.setposition(x, y)Déplace la tortue au point de coordonnées passées en argument. Ne modifie pas l'orientation de la tortue. Le résultat de cette action ne dépend donc pas de l'état de la tortue.
tortue.setx(x)Donne à l'abscisse de la position de la tortue la valeur x. Ne modifie pas la valeur de l'ordonnée . Le résultat de cette action ne dépend donc pas de l'état de la tortue.
tortue.sety(y)Donne à l'ordonnée de la position de la tortue la valeur y. Ne modifie pas la valeur de l'abscisse . Le résultat de cette action ne dépend donc pas de l'état de la tortue.
tortue.setheading(angle)Donne à l'angle (exprimé en degrés) entre la droite sur laquelle la tortue s'appuie et l'axe horizontal la valeur angle. Les valeurs remarquables sont : 0° ou Est, 90° ou Nord, 180° ou Ouest, 270° ou Sud. Le résultat de cette action ne dépend donc pas de l'état de la tortue.
tortue.home()Transporte la tortue au centre de l'écran, origine des coordonnées.
tortue.dot(size, color)Dessine un point de diamètre size, de couleur color. Les arguments sont optionnels.
tortue.circle(radius)Dessine un cercle de rayon radius pixels à partir de la position de la tortue. Le centre du cercle est radius pixels à gauche de la position de la tortue, perpendiculairement à sa direction.
tortue.undo()Annule la dernière action réalisée par la tortue.

Modification ou accès à l'état de la tortue graphique

Nom de la méthodeDescription
tortue.position()Retourne les coordonnées (En fait il s'agit d'un vecteur de type Vec2D) de la position de la tortue.
tortue.speed(speed)Retourne ou modifie la valeur de la vitesse de déplacement de la tortue. Si aucun argument n'est fourni, la valeur de la vitesse est retourneé. Pour modifier la valeur de la vitesse, l'argument doit être un entier compris entre 0 (le plus rapide) et 1 (le plus lent).
tortue.towards(x, y)Retourne l'angle que fait la direction selon laquelle est orientée la tortue et la droite qui relie la tortue au point de coordonnées passé en argument. Cette valeur dépend donc de la direction de la tortue.
tortue.xcor()Retourne la coordonnée de la position de la tortue.
tortue.ycor()Retourne la coordonnée de la position de la tortue.
tortue.heading()Retourne l'angle que fait la direction selon laquelle est orientée la tortue et l'axe horizontal, origine des angles.
tortue.distance(x, y)Retourne la distance entre la position de la tortue et le vecteur passé en argument. Comme la position d'une tortue est un vecteur de type Vec2D, l'argument peut être une tortue. La méthode retourne alors la distance entre les deux tortues.
tortue.pendown()La queue de la tortue traine au sol ; une marque apparait à l'écran lors de ses déplacements.
tortue.penup()La queue de la tortue est relevée ; aucune marque n'apparait à l'écran lors de ses déplacements.
tortue.pensize(width)Positionne la largeur du trait à la valeur width, un entier (10 est déjà un trait épais).
tortue.isdown()Retourne True si la queue est baissée, False sinon.
tortue.hideturtle()N'affiche pas la tortue (ou la marque qui représente la tortue) à l'écran.
tortue.show()Affiche la tortue (ou la marque qui représente la tortue) à l'écran.
tortue.isvisible() Retourne True si la tortue (ou la marque qui la représente) est visible à l'écran, False sinon.
tortue.shape(name)Permet de choisir la forme de la marque qui représente la tortue. Les formes pré-exsistantes sont : "arrow", "turtle", "circle", "square", "triangle", "classic".

Quelques commandes supplémentaires

Nom de la méthodeDescription
tortue.reset()Réinitialise le dessin : la tortue est repositionnée au centre de l'écran, ses attributs sont effacés et toute marque à l'écran supprimée.
tortue.clear()Supprime le dessin mais ne modifie ni la position de la tortue, ni son état.
tortue.write(text)Écrit le texte text à l'écran.

Exercices

Exercice 3

Écrire un programme commandant à la tortue de tracer à l'écran la figure ci-dessous composée de 30 cercles de rayons 100 pixels ayant tous en commun le point .

cercles


Solution

Exercice 4

Le programme ci-dessous, une fois complété, doit tracer 200 points à l'écran dont la position et la taille varient de façon aléatoire entre les valeurs indiquées dans la première partie du code. Compléter les instructions qui manquent.

points_aleatoires


Solution

Exercice 5

Sur le modèle de l'exercice précédent, écrire un programme qui trave à l'écran 200 carrés dont la position du coin inférieur gauche est aléatoire, tout comme l'orientation et la largeur.


Solution

Exercice 6

Compléter le code ci-dessous de façon à ce qu'il trace à l'écran une figure identique à celle présentée ci-dessous.

points


Solution

Exercice 7

Compléter le code ci-dessous de façon à ce qu'il trace à l'écran une figure identique à celle présentée ci-dessous.

carres_concentriques


Solution

Exercice 8

Sur le modèle de l'exercice précédent, compléter le code ci-dessous de façon à ce qu'il trace à l'écran des cercles concentriques, comme illustré sur la figure ci-dessous.

cercles_concentriques


Solution

Exercice 9

Dans cet exercice on souhaite créer une première animation, c'est à dire une succession d'images à l'écran. L'objectif est de faire traverser un rectangle à l'écran.

L'animation est-elle fluide ? Le carré s'affiche-t-il en un seul bloc ?


Solution


Solution

L'animation est-elle maintenant fluide ? Quel problème persiste ?


Solution

Exercice 10

Dans cet exercice on va programmer le mouvement d'une balle dans une boite à deux dimensions.


Solution


Solution