Outils pour utilisateurs

Outils du site


nsi:tds:hitomezashi

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Hitomezashi

Qu'est ce que c'est ?

On choisit une taille de grille. Par exemple la grille suivante :

Ce sont surtout les lignes de la grille qui nous intéressent. On veut noircir certains segments de la grille pour former un motif.

À tire d'exemple, supposons que l'on place soit 1, soit 0 en tête d'une ligne verticale.

Quand c'est un 1, on noircit le premier segment de la ligne, puis alternativement un sur deux. Quand c'est 0, le premier segment n'est pas noirci.

Voici un exemple complet pour lequel on a indiquer 1 ou 0 pour toutes les lignes verticales ou horizontales.

Gardez en tête qu'on ne veut pas de la grille orange. Le tracé final ne doit comporter que la partie en noir. On voudrait donc tracer ce motif automatiquement.

Quoi faire ?

Vous devez réaliser une fonction hitomezashi qui reçoit deux mots vertical et horizontal et qui produit l'image correspondante. On donnera aussi le nom du fichier image.

L'exemple précédent est ce que l'on aurait obtenu si on avait appelé hitomezashi("test.png", "1001", "1011") et serait ici placé dans le fichier image test.png.

Vous êtes libre d'imposer que les deux mots aient la même taille (donc grille carrée) ou pas (possiblement rectangulaire).

On pourra utiliser la constante TAILLE = 10 indiquant que le carré de base de la grille fait 10 pixels.

Avec ces réglages, notre dessin précédent qui faut 5×5 cases aurait une taille de 50×50 pixels.

D'autres options

Libre à vous d'aller plus loin en proposant la création de motifs aléatoires.

Vous pourriez aussi envisager un motif avec des carrés remplis. On pourra toujours remplir le motif en n'utilisant que 2 couleurs de façon que deux zones de même couleur ne se touchent jamais. Voici le résultat en rouge et blanc pour la grille précédente :

Manipulation de l'image

Pour produire l'image, il vous faut quelques informations sur la manipulation des images.

Je vous propose d'utiliser matplotlib et numpy.

import matplotlib.image as mpimg
import numpy as np

Pour créer une image 50x50toute blanche :

img = np.full((50, 50), 255, np.uint8)

Changer un pixel est rapide :

# mettre en noir le pixel en ligne 35 et colonne 12 :
img[35,12] = 0

Changer de couleur toute une zone :

# mettre en noir une zone allant de la ligne 3 à 5  (non comrpis) et de la colonne 10 à 20 (non comprise)
img[3:5,10:20] = 0
# mettre en noir la toute la ligne 4
img[4,:] = 0

Enfin, pour sauvegarder cette image :

mpimg.imsave('le_nom_que_l_on_veut.png', img, cmap="gray")

Notez l'option cmap permettant d'obtenir une image en niveaux de gris.

Un peu de couleur

Les commandes précédents étaient en noir et blanc. Si on veut ajouter de la couleur, il faut 3 canaux de couleur.

img = np.full((62, 62, 3), 255, np.uint8)

Une couleur est un triplet d'octets pour RGB. Par exemple (252, 148, 3) est un orange.

# pixel en ligne 12, colonne 52 en orange :
img[12, 52] = (252, 148, 3)

Dans ce cas, on ne précise pas cmap pour l'enregistrement :

mpimg.imsave('test.png', img)
nsi/tds/hitomezashi.txt · Dernière modification : de goupillwiki