Construire une image numérique

Phot 02
Bien démarrer

Pour réaliser la plupart des activités suivantes, il faut:

  • ouvrir le lycée connecté,
  • ouvrir l’application Capytale,
  • accéder à l’activité 21e2-4046568

1. Algorithme et langage de programmation

À retenir

Pour créer un algorithme, il est nécessaire (et suffisant) d’utiliser des constructions élémentaires:

  • variable,
  • structure conditionnelle,
  • boucle.

Par exemple, un professeur peut vouloir écrire un algorithme qui calcule la moyenne des trois notes trimestrielles et affiche un message en fonction du résultat:

- récupérer la note 1
- récupérer la note 2
- récupérer la note 3
- additionner les 3 notes
- diviser le résultat par 3
- Si la moyenne est plus grande que 12:
    - afficher "C'est bien"
- Sinon:
    - afficher "Peut mieux faire"
À retenir

Un langage de programmation permet de communiquer avec l’ordinateur. Il propose une syntaxe pour chaque construction élémentaire

Par exemple, l’algorithme précédent peut s’écrire ainsi dans le langage Python:

print("Entrer la note")
note1 = float(input())
print("Entrer la note")
note2 = float(input())
print("Entrer la note")
note3 = float(input())
somme = note1 + note2 + note3
moyenne = somme/3
if moyenne > 12:
    print("C'est bien")
else:
    print("Peut mieux faire")

Dans le langage C, cela donnerait:

#include <stdio.h>

int main() {
    float note1, note2, note3, somme, moyenne;

    printf("Entrer la note 1: ");
    scanf("%f", &note1);

    printf("Entrer la note 2: ");
    scanf("%f", &note2);

    printf("Entrer la note 3: ");
    scanf("%f", &note3);

    somme = note1 + note2 + note3;
    moyenne = somme / 3;

    if (moyenne > 12) {
        printf("C'est bien\n");
    } else {
        printf("Peut mieux faire\n");
    }

    return 0;
}
Remarque

Ces deux codes sont donnés à titre d’exemple. Il ne faut pas savoir les refaire.

  1. En Python, pour récupérer une valeur donnée par l’utilisateur, on utilise la commande input. Quelle est son équivalent en C?

    • en Python: input
    • en C: scanf

  2. Quelles sont les commandes pour afficher un texte, dans les deux langages?

    • en Python: print
    • en C: printf

2. Fonction informatique

À retenir

En informatique, une fonction est un bloc de code qui réalise une tâche. Une fonction:

  • a un nom,
  • a besoin d’informations: les paramètres
  1. Ouvrir l’activité 21e2-4046568 dans Capytale.

fonction creer_image_vide

La fonction creer_image_vide construit une image de longueur 800 pixels et largeur 600 pixels. Pour colorer le fond, elle demande 3 paramètres:

  • la quantité de rouge,
  • la quantité de vert,
  • la quantité de bleu
4. Modifier la ligne 5 du code pour construire une image avec un fond rouge.
Consigne

Après chaque modification du code, il faudra appuyer sur le bouton exécuter exécuter exécuter

creer_image_vide(255, 0, 0)
5. Créer une deuxième image avec un fond jaune.
creer_image_vide(255, 0, 0)
creer_image_vide(255, 255, 0)

Remarque

On remarque qu’une seule image s’affiche!

3. Variable

images images Quand on écrit les 2 instructions suivantes, 2 images sont créées dans la mémoire.

creer_image_vide(255, 0, 0)
creer_image_vide(255, 255, 0)
À retenir

Capytale (Python) n’affiche que le résultat de la dernière instruction; il ne sait plus où est stocké l’autre image.

À retenir

Pour repérer les images dans la mémoire, il faut les référencer avec des variables.

images images La variable image1 référence l’image rouge.

À retenir

Pour créer une variable en Python, on utilise le signe =

image1 = creer_image_vide(255, 0, 0)
image2 = creer_image_vide(255, 255, 0)
  1. Modifier le code comme ci-dessus.
  2. Pour afficher les images, il faut utiliser la fonction afficher
    fonction afficher

    La fonction afficher affiche une image. Elle demande 1 paramètre:

    • le nom de l’image à afficher.
    Modifier le code pour afficher les 2 images.
    image1 = creer_image_vide(255, 0, 0)
    image2 = creer_image_vide(255, 255, 0)
    
    afficher(image1)
    afficher(image2)

4. Appeler des fonctions

fonction placer_pixel

La fonction placer_pixel positionne un pixel noir. Elle demande 3 paramètres:

  • l’image qui sera modifiée,
  • l’abscisse du pixel,
  • l’ordonnée du pixel.
  1. Modifier le code pour ajouter un pixel noir au centre de l’image 1.

    image1 = creer_image_vide(255, 0, 0)
    image2 = creer_image_vide(255, 255, 0)
    
    placer_pixel(image1, 400, 300)
    
    afficher(image1)
    afficher(image2)
    À retenir

    Les instructions sont interprétées par Python dans l’ordre où elles sont écrites dans le programme. Il faut donc placer le pixel avant d’afficher l’image.

  2. Pour la question précédente, des élèves ont donné les réponses suivantes. Repérer les erreurs.

placer_pixel(image1, 300)
placer_pixel(400, 300, image1)
placer_pixel(image1, 1000, 2000)
placer_pixel(image1, 300)

La fonction demande 3 paramètres.

placer_pixel(400, 300, image1)

Il faut donner les paramètres dans l’ordre.

placer_pixel(image1, 1000, 2000)
  • L’image a une taille 800×600.
  • La longueur doit être comprise entre 0 et 799.
  • La largeur doit être comprise entre 0 et 599.
À retenir

En informatique, la numérotation commence très souvent à 0. Entre 0 et 799, il y a donc bien 800 pixels.

Coordonnées

En informatique, l’axe des ordonnées est inversé par rapport à la représentation mathématique usuelle.

coordonnées coordonnées

fonction trait_horizontal

La fonction trait_horizontal trace un trait horizontal. Elle demande 5 paramètres:

  • l’image qui sera modifiée,
  • l’ordonnée du trait,
  • l’abscisse du pixel de départ.
  • l’abscisse du pixel de fin,
  • la couleur au format (R, V, B); les parenthèses sont obligatoires.
  1. Tracer un trait rouge, dans la partie haute de l’image 2, de 100 pixels de long.
    image1 = creer_image_vide(255, 0, 0)
    image2 = creer_image_vide(255, 255, 0)
    
    trait_horizontal(image2, 50, 400, 500, (255, 0, 0))
    
    afficher(image1)
    afficher(image2)
fonction trait_vertical

La fonction trait_vertical trace un trait vertical. Elle demande 5 paramètres:

  • l’image qui sera modifiée,
  • l’abscisse du trait,
  • l’ordonnée du pixel de départ.
  • l’ordonnée du pixel de fin,
  • la couleur au format (R, V, B); les parenthèses sont obligatoires.
  1. Sur l’image 1, tracer un quadrillage. Chaque trait sera espacé de 100 pixels et d’une couleur différente.
trait_horizontal(image1, 100, 0, 799, (255, 0, 0))
trait_horizontal(image1, 200, 0, 799, (255, 123, 0))
trait_horizontal(image1, 300, 0, 799, (255, 23, 75))
trait_horizontal(image1, 400, 0, 799, (0, 234, 0))
trait_horizontal(image1, 500, 0, 799, (12, 47, 30))

trait_vertical(image1, 100, 0, 599, (0, 255, 0))
trait_vertical(image1, 200, 0, 599, (255, 0, 255))
trait_vertical(image1, 300, 0, 599, (20, 34, 170))
trait_vertical(image1, 400, 0, 599, (255, 0, 0))
trait_vertical(image1, 500, 0, 599, (0, 0, 26))
trait_vertical(image1, 600, 0, 599, (0, 0, 250))
trait_vertical(image1, 700, 0, 599, (255, 0, 50))
fonction donner_couleur

La fonction donner_couleur renvoie un triplet de trois nombres aléatoires entre 0 et 255. Par exemple: (132, 42, 240)

La fonction n’a besoin d’aucun paramètre.

  1. Modifier le code précédent en utilisant la fonction donner_couleur.
trait_horizontal(image1, 100, 0, 799, donner_couleur())
trait_horizontal(image1, 200, 0, 799, donner_couleur())
trait_horizontal(image1, 300, 0, 799, donner_couleur())
trait_horizontal(image1, 400, 0, 799, donner_couleur())
trait_horizontal(image1, 500, 0, 799, donner_couleur())

trait_vertical(image1, 100, 0, 599, donner_couleur())
trait_vertical(image1, 200, 0, 599, donner_couleur())
trait_vertical(image1, 300, 0, 599, donner_couleur())
trait_vertical(image1, 400, 0, 599, donner_couleur())
trait_vertical(image1, 500, 0, 599, donner_couleur())
trait_vertical(image1, 600, 0, 599, donner_couleur())
trait_vertical(image1, 700, 0, 599, donner_couleur())
À retenir

Même si la fonction ne demande pas de paramètre, il faut mettre les parenthèses.

5. Boucle

Le code précédent contient de nombreuses répétitions. En informatique, on peut créer une boucle pour répéter du code.

for valeur in range(50, 150, 1):
    placer_pixel(image2, valeur, 350)

L’exemple ci-dessus place 100 pixels:

  • sur l’image 2
  • entre l’abscisse 50 et 149
  • à l’ordonnée 350
  1. Tester le code.
  2. Modifier le code comme ci-dessous:
for valeur in range(50, 150, 5):
    placer_pixel(image2, valeur, 350)

Quel est le rôle du 5?

Dans le code suivant, la variable valeur augmente de 1 à chaque tour de boucle: 50, 51, 52, 53…

for valeur in range(50, 150, 1):
    placer_pixel(image2, valeur, 350)

Dans le code suivant, la variable valeur augmente de 5 à chaque tour de boucle: 50, 55, 60, 65…

for valeur in range(50, 150, 5):
    placer_pixel(image2, valeur, 350)
À retenir

La fonction range(début, fin, pas) demande 3 paramètres:

  • début: la valeur de départ
  • fin: la valeur de fin; attention le compteur s’arrêt juste avant cette valeur.
  • pas: l’augmentation à chaque tour de boucle.
  1. Tracer un trait vertical de 200 pixels de long, en utilisant la fonction placer_pixel et à l’abscisse 100.
for valeur in range(100, 200, 1):
    placer_pixel(image2, 100, valeur)
  1. Tracer un trait diagonal de 200 pixels de long, en utilisant la fonction placer_pixel.
for valeur in range(50, 150, 1):
    placer_pixel(image2, valeur, valeur)
  1. Tracer le quadrillage de la question 12, en utilisant des boucles.
for valeur in range(100, 600, 100):
    trait_horizontal(image1, valeur, 0, 799, donner_couleur())

for valeur in range(100, 800, 100):
    trait_vertical(image1, valeur, 0, 599, donner_couleur())