Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
cours:prog_scratch_3 [2025/06/12 19:39] mrcjl [Éléments de solution] |
— (Version actuelle) | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ======Dessin de polygones réguliers [TP 3ème]====== | ||
| - | Cette activité est un bilan de plusieurs connaissances et compétences de cycle 4 et une ouverture à la programmation Python qui sera utilisée au lycée. | ||
| - | |||
| - | Après avoir découvert [[cours: | ||
| - | |||
| - | =====Problème à résoudre===== | ||
| - | Nous voulons dessiner des polygones réguliers ayant un nombre de cotés x choisi par l' | ||
| - | {{ : | ||
| - | |||
| - | =====1- Recherche de l' | ||
| - | ====Éléments de solution==== | ||
| - | Nous savons que la somme des angles d'une figure fermée correspond à celle d'un cercle 360°. Pour la dessiner, il suffit donc de calculer l' | ||
| - | Il faut bien sur demander le nombre de coté voulu et leur longueur avant de vérifier si les réponses données sont cohérentes. | ||
| - | |||
| - | **Le 1er problème** est de centrer la figure dans l’écran en utilisant des formules mathématiques ([[wpfr> | ||
| - | On remarque, sur les dessins ci dessus, que les cotés des figures correspondent aux cordes d'un cercle et qu'au moins un coté est horizontal. On détermine donc le point de départ du tracé (dans un repère, l’écran, l' | ||
| - | |||
| - | **Le 2ème problème** consiste à déterminer la taille maximum du coté d'une figure. En effet, la taille de l' | ||
| - | Une fois que la longueur du coté/corde choisi par l' | ||
| - | |||
| - | **Pour information** : | ||
| - | * la demi hauteur de l' | ||
| - | * Scratch et Codabloc ne possèdent pas de fonction pour dessiner des cercles, d'où l' | ||
| - | |||
| - | ====Écriture de l' | ||
| - | Écrivez VOTRE algorithme en utilisant correctement les indentations. N' | ||
| - | |||
| - | Vous pouvez, lorsque vous avez terminé, le comparer à la solution type ci jointe. \\ | ||
| - | <wrap em> | ||
| - | La solution type, qui fonctionne, doit être parfaitement comprise avant d' | ||
| - | |||
| - | Les commentaires (lignes débutants par # vous aident à comprendre l' | ||
| - | ++++Solution type| | ||
| - | < | ||
| - | # Initialisation | ||
| - | Définir le rayon maximal (rmax) | ||
| - | Demander et noter le nombre de coté (3 < cote <= infini) | ||
| - | Si cote incorrect | ||
| - | Signaler l' | ||
| - | sinon | ||
| - | Calculer l' | ||
| - | Calculer la corde maxi (corde_max = 2 * rmax * sin(angle / 2) | ||
| - | Demander et noter la corde (10 < corde < corde_max) | ||
| - | Si corde incorrect | ||
| - | Signaler l' | ||
| - | sinon | ||
| - | Calculer le rayon de la corde choisie (rayon = corde / 2 / sin(angle / 2)) | ||
| - | Calculer le point x (x = - corde / 2) | ||
| - | Calculer le point y (y = rayon * cos(angle /2) | ||
| - | # Tracé du polygone | ||
| - | Se placer au point (x, y) | ||
| - | Poser le stylo sur la fenêtre | ||
| - | Répéter tant que cote > 0 | ||
| - | Avancer de corde | ||
| - | Tourner vers la droite de angle | ||
| - | Diminuer cote de 1 (cote = cote – 1) | ||
| - | # Tracé du cercle, uniquement en Python | ||
| - | Relever le stylo | ||
| - | Se positionner pour tracer le cercle englobant | ||
| - | Changer de couleur de stylo | ||
| - | Poser le stylo | ||
| - | Tracer le cercle | ||
| - | </ | ||
| - | ++++ | ||
| - | |||
| - | =====2- Traduction en Scratch ou Codabloc===== | ||
| - | ====Prérequis==== | ||
| - | {{ : | ||
| - | L' | ||
| - | |||
| - | Parmi les opérateurs Scratch et Codabloc, le dernier de la liste donne accès aux fonctions mathématiques. En bloc, l' | ||
| - | |||
| - | Pour réaliser des dessins, le module Stylo est inclus dans Codabloc. (Pour l' | ||
| - | Par défaut, le stylo est en position relevée. Le poser pour dessiner. | ||
| - | |||
| - | Scratch possède un rayon maximum de 160 pixels pour calcul de la corde maximum. | ||
| - | |||
| - | ====Utilisation du module stylo==== | ||
| - | Le stylo doit être relevé pour se déplacer sans écrire, posé sinon. Le couleur et la taille du trait peut être modifiée. | ||
| - | |||
| - | Aller vers la droite correspond à s' | ||
| - | |||
| - | Le stylo n'est pas capable de tracer des figures géométrique, | ||
| - | |||
| - | ====Traduction du programme==== | ||
| - | Traduisez votre algorithme et testez le. Si le programme fonctionne vous avez réussi. Sinon, vous pouvez essayer de trouver votre erreur en regardant la solution type ci dessous. | ||
| - | |||
| - | ++++Solution type| | ||
| - | {{ : | ||
| - | ++++ | ||
| - | |||
| - | =====3- Traduction en Python===== | ||
| - | Le module Turtle que nous allons utiliser est une **initiation à la programmation objet**. En effet, le module correspond à une **classe** d' | ||
| - | |||
| - | ====Connaissances à acquérir==== | ||
| - | Nous avons acquis les connaissances de bases (créer et utiliser des variables, entrer et sortir des informations, | ||
| - | |||
| - | Les langages de programmation sont tellement riches en possibilité qu'il n'est pas possible, pour des raison de place, de mettre toutes leurs possibilités disponibles en permanence. Nous venons de le voir en SCRATCH avec le module " | ||
| - | |||
| - | En Python, un module optionnel s' | ||
| - | ===Le module math=== | ||
| - | Il ne contient que des simples fonctions mathématiques. [[https:// | ||
| - | |||
| - | Les angles doivent être en radian. Pour convertir des degrés en radian utiliser la fonction : math.radians(angle_degrés). | ||
| - | < | ||
| - | # Calculer le rayon d'un cercle dont on connaît la corde et l' | ||
| - | import math | ||
| - | rayon = corde / 2 / math.sin(math.radians(angle/ | ||
| - | </ | ||
| - | |||
| - | ===Le module turtle=== | ||
| - | Python, contrairement à Scratch est un langage objet. En effet, en Python, nous pouvons réaliser 2 dessins indépendants en même temps. Cela se passe comme si nous avions 2 **objets** (tortues) indépendantes qui possèdent des **propriétés** propres (position, couleur, épaisseurs …) et des **opérations**/ | ||
| - | |||
| - | Pour pouvoir utiliser notre objet, il est nécessaire de l' | ||
| - | |||
| - | Une explication, | ||
| - | |||
| - | Certaines fonctions possèdent plusieurs noms (nom raccourcis). | ||
| - | * Liste à pucePour déplacer la tortue : forward(dist), | ||
| - | * Liste à pucePour modifier le stylo : pendown(), penup(), color(" | ||
| - | * pour montrer/ | ||
| - | * Sur Capytale, pour que le dessin soit visible, il faut terminer par turtle.done(). | ||
| - | * Par défaut, le stylo est en position d' | ||
| - | < | ||
| - | import turtle | ||
| - | t1 = turtle.Turtle() | ||
| - | t2 = turtle.Turtle() | ||
| - | t1.color(" | ||
| - | t1.forward(100) | ||
| - | t2.color(" | ||
| - | t2.pensize(3) | ||
| - | t2.right(90) | ||
| - | t2.forward(100) | ||
| - | turtle.done() | ||
| - | </ | ||
| - | |||
| - | Le module turtle possède une fonction " | ||
| - | < | ||
| - | t.left(360 - t.heading()) | ||
| - | t.goto(0, -rayon) | ||
| - | t.circle(rayon) | ||
| - | </ | ||
| - | |||
| - | ====Traduction de l' | ||
| - | Vous en connaissez maintenant suffisamment pour traduire l' | ||
| - | |||
| - | ++++Solution type| | ||
| - | <code python> | ||
| - | import turtle | ||
| - | import math | ||
| - | t = turtle.Turtle() | ||
| - | bord = 480 | ||
| - | # Initialisation | ||
| - | cote = int(input(" | ||
| - | if cote < 3 : | ||
| - | print ("Il faut plus de 3 cotés !") | ||
| - | else : | ||
| - | angle = 360/cote | ||
| - | cmax = int(bord * math.sin(math.radians(angle/ | ||
| - | corde = int(input(f" | ||
| - | if (corde < 10) or (corde > cmax) : | ||
| - | print (" | ||
| - | else : | ||
| - | r = corde / 2 / math.sin(math.radians(angle/ | ||
| - | x = corde / 2 | ||
| - | y = r * math.cos(math.radians(angle/ | ||
| - | # Tracé figure | ||
| - | t.penup() | ||
| - | t.goto(- x, y) | ||
| - | t.pendown() | ||
| - | while cote > 0: | ||
| - | t.forward(corde) | ||
| - | t.right(angle) | ||
| - | cote = cote – 1 | ||
| - | # Tracé cercle englobant | ||
| - | t.penup() | ||
| - | t.goto(0, -r) | ||
| - | t.color(" | ||
| - | t.pendown() | ||
| - | t.circle(r) | ||
| - | turtle.done() | ||
| - | </ | ||
| - | ++++ | ||