Comprendre les coordonnées
Une image numérique est constituée de pixels, chaque pixel ayant des coordonnées : une abscisse et une ordonnée, notées respectivement x et y dans la suite.
Attention
-
On commence la numérotation à partir de 0, ainsi le pixel en haut à gauche de l’image a pour coordonnées \((0 ; 0)\).
-
L’axe des ordonnées est dirigé vers le bas !
Exemple
On suppose ici que l’on dispose d’une fonction colorier(x, y) qui permet de colorier le pixel de coordonnées (x, y) (en gris).
Voici un exemple d'utilisation pour comprendre le rôle de la fonction colorier :
creer_image(9, 9) # ligne obligatoire en début de chaque programme pour créer l'image
colorier(3, 7) # on colorie un pixel
Votre figure
Question 1
creer_image(9,9)
colorier(4, 2)
colorier(4, 3)
colorier(4, 5)
colorier(4, 6)
colorier(2, 4)
colorier(3, 4)
colorier(4, 4)
colorier(5, 4)
colorier(6, 4)
Votre figure
Question 2
Vous devez écrire le code nécessaire pour obtenir l'image souhaitée.
Votre figure
Votre figure
Couleurs
Il est possible de passer un troisième argument à la fonction colorier afin de spécifier la couleur du pixel.
On dispose des couleurs suivantes : BLANC, NOIR, VERT, ROUGE, BLEU, ROSE, BLEU, JAUNE.
Dans la suite de l'exercice, on souhaite créer le dessin suivant :
Votre figure
Nous allons pour ceci procéder par étape en répondant aux questions suivantes.
Question 3
# image de 3 lignes de 11 colonnes
creer_image(11, 3)
# ligne 0 :
colorier(2, 0, VERT)
colorier(8, 0, VERT)
# ligne 1 :
colorier(0, 1, VERT)
colorier(3, 1, VERT)
colorier(7, 1, VERT)
colorier(10, 1, VERT)
# ligne 2 :
colorier(0, 2, VERT)
colorier(2, 2, VERT)
colorier(3, 2, VERT)
colorier(4, 2, VERT)
colorier(5, 2, VERT)
colorier(6, 2, VERT)
colorier(7, 2, VERT)
colorier(8, 2, VERT)
colorier(10, 2, VERT)
Votre figure
Répétitions
On peut constater que le coloriage de la troisième ligne (d'odonnée \(2\)) est très répétitif, alors que seule la cordonnées en x change d'une ligne à l'autre. Ainsi, on aurait pu écrire cette même ligne avec le code suivant :
for x in [0, 2, 3, 4, 5, 6, 7, 8, 10]:
colorier(x, 2, VERT)
Question 4
Vous devez écrire le code nécessaire pour obtenir les lignes aux ordonnées \(3\) et \(4\) de l'image souhaitée.
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Votre figure
Répétitions
Le code précédent se concentre sur les pixels à colorier.
En pratique, une ligne de l'image est stockée par une liste de couleurs.
ligne_2 = [VERT, BLANC, VERT, VERT, VERT, VERT, VERT, VERT, VERT, BLANC, VERT]
ligne_2[0] donne la couleur du pixel situé à l'abscisse \(0\). De manière plus générale, l'expression ligne_2[x] donne la couleur du pixel situé à l'abscisse x.
On peut parcourir l'ensemble des valeurs du tableau pour colorier la ligne entière :
for x in range(NB_COLONNES):
colorier(x, 2, ligne_2[x])
Question 5
cliquer sur les pixels à colorier en vert :
NB_COLONNES = 11
ligne_5 = [BLANC, BLANC, VERT, VERT, VERT, VERT, VERT, VERT, VERT, BLANC, BLANC]
for x in range(NB_COLONNES):
colorier(x, 0, ligne_5[x])
Votre figure
Question 6
Vous devez écrire le code nécessaire pour obtenir les lignes aux ordonnées \(6\) et \(7\) de l'image souhaitée.
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Votre figure
Répétitions de boucle
On constate qu'il y a toujours des répétitions, puisque la construction de chaque ligne de l'image nécessite une boucle, alors que seuls l'ordonnée et le tableau de couleurs changent.
On peut alors regrouper l'ensemble des lignes dans un tableau :
image = [ligne_0, ligne_1, ligne_2, ligne_3, ligne_4, ligne_5, ligne_6, ligne_7]
image[3] donne la ligne située à l'ordonnée \(3\). De manière plus générale, l'expression image[y] donne la ligne située à l'ordonnée y.
On peut alors parcourir l'ensemble des lignes de l'images :
for y in range(NB_LIGNES):
ligne = image[y]
for x in range(NB_COLONNES):
colorier(x, y, ligne[x])
Question 7
Cliquer sur les pixels à colorier en bleu :
NB_LIGNES = 6
NB_COLONNES = 9
image = [[BLANC, BLANC, BLANC, BLEU, BLANC, BLEU, BLANC, BLANC, BLANC],
[BLEU, BLANC, BLEU, BLEU, BLEU, BLEU, BLEU, BLANC, BLEU],
[BLEU, BLEU, BLEU, BLANC, BLEU, BLANC, BLEU, BLEU, BLEU],
[BLANC, BLEU, BLEU, BLEU, BLEU, BLEU, BLEU, BLEU, BLANC],
[BLANC, BLEU, BLANC, BLEU, BLANC, BLEU, BLANC, BLEU, BLANC],
[BLEU, BLEU, BLANC, BLANC, BLANC, BLANC, BLANC, BLEU, BLEU]
]
for y in range(NB_LIGNES):
ligne = image[y]
for x in range(NB_COLONNES):
colorier(x, y, ligne[x])
Votre figure
Question 8
Vous devez écrire le code nécessaire pour obtenir l'image souhaitée.
Votre figure
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Votre figure
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)