14. Ordonner - tuple 2D
¶
Comment représenter des formes complexes, mais réguliers, tels que :
les pixels d’une image PixelArt
les couleurs d’un cube de Rubik
l’état des pièces d’un échéqier
une image composé de polygones
la grille d’un sudoku
les lettres d’un scrabble ?
La réponse est un tuple multi-dimensionnel, donc un tuple de tuple.
14.1. Tuple 2D¶
Voici une image minimaliste de Sonic créée avec seulement 4x4 pixels.
Nous pouvons représenter cette information avec un tuple 2D de 4 lignes, chaque ligne ayant 4 couleurs.
Avec un
indexage simple
sonic[0]
nous pouvons accéder à une ligne.indexage double
sonic[2][2]
nous pouvons accéder à la couleur d’un pixel
14.2. Parcourir en 2D¶
Nous pouvons parcourir de 2D en deux niveaux.
avec
for line in sonic:
ligne par ligneavec
for c in c:
les couleurs de chaque ligne
14.3. Palette de couleurs¶
Au lieu d’écrire les couleurs à chaque fois, nous pouvons les coder avec une palette. Ceci a deux aventages.
la table 2D des pixels est plus compacte
on peux facilement échanger les couleurs
14.4. Dessiner des pixels¶
Nous utilisons le parcours ligne par ligne, pixel par pixel pour dessiner les pixels
14.5. Pixelart¶
Nous pouvons utiliser la fonction rectangle()
pour dessiner du Pixelart.
Pour ceci nous utilisons deux tuples:
palette
– un tuple 1D contenant les couleurs (la palette des couleurs)table
– un tuple 2D avec les indices des couleurs, ligne par ligne
Les paramètres suivants sont passés à la fonction rectangle()
:
d
– la taille du pixel (20
)w
– épaisseur de ligne (1
)pen
– couleur de ligne ('black'
)
Les points de départ sont marqués avec un point (dot) et les coordonnées y sont affichées.
14.6. Rubik¶
Pour dessiner les 3 faces d’un cube de Rubik, nous pouvons utiliser la même méthode:
une palette pour les 6 couleurs
un tuple 3D pour les 3x3x3 couleurs visibles
Exercice 1
Ajoutez la 3e surface qui manque encore en indiquant les indices des couleurs.
Dans la palette, changez les couleurs rouge en 'pink'
, bleu en 'lightblue'
et vert en 'lightgreen'
.
14.7. Tetris¶
Nous représentons chaque tétronimo comme un tuple d’angles.
Cet angle est l’angle à tourner après chaque segment de longeur d
.
90
tourner à gauche,0
continue tout droit,-90
tourner à droite.
Exercice 2
Ajoutez les deux derniers angles dans le tuple T
pour fermer la forme du T.
Forme¶
Nous marquons le point d’origine avec un point (dot).
Exercice 3
Trouvez les tuples d’angles pour représenter les tétronimos O, J et S.
Couleur¶
En plus de la définition des angles, nous pouvons aussi ajouter la couleur.
Chaque type de tétronimo est donc défini par un tuple de la forme (couleur, angles)
.
Exercice 4
Ajoutez les couleurs des tétronimos J, L, S et Z.
Position et orientation¶
Pour positionner des tétronimos dans un arrangement spécifique, nous devons spécifier les coordonnées de sa position d’origine (marquée avec un point) et son orientation. Nous allons reprendre l’arrangement du chapitre 3.
Chaque tétronimo peut être écrite sous forme de
type
t
de tétronimoposition
p
orientation
h
(heading)
Exercice 5
Ajoutez les tétronimos qui manquent.
14.8. Tangram¶
Le tangram, « sept planches de la ruse », ou jeu des sept pièces, est une sorte de puzzle chinois. C’est une dissection du carré en sept pièces élémentaires. Des dissections plus générales, de formes différentes, sont également appelées tangrams.
Nous traitons le carré de base comme ayant 4x4 unités. Ceci nous les 5 formes de base :
2 triangles avec hypoténuse 4
1 triangle avec hypoténuse 2.82
1 triangles avec hypoténuse 2
1 carré avec côté 1.41
1 paraléllipiède de coté 2 et 1.41
Formes¶
Cette fois nous allons représenter les formes avec des tuples(d, a)
, distance-angle. Le grand triangle est décrit avec ce tuple.
De la même façons nous procédons a décrire toutes les formes.
Positions et orientation¶
Pour désigner une forme spécifique, nous utilisons un tuple avec 7 éléments qui contient un deuxième tuple (piece, p, h)
piece
position
orientation
Voici le puzzle de base:
14.9. Sudoku¶
14.10. Scrabble¶
Le Scrabble est un jeu de société et un jeu de lettres où l’objectif est de cumuler des points, sur la base de tirages aléatoires de lettres, en créant des mots sur une grille carrée. Le jeu a été conçu par l’architecte new-yorkais Alfred Mosher Butts pendant la crise de 1929, et publié en 1931.
Dessiner une case¶
Chaque lettre doit être placée au centre d’une case.
Avec x, y = pos()
nous mémorisons d’abord la position de départ dans deux variables locales. Ceci nous permet de placer la tortue au centre pour écrire la lettre, et à la fin, d’avancer à la prochaine case.
Exercice 6
Positionnez la lettre pour qu’elle apparaisse au milieu de la case.
Il faudra modifier la commande goto(x+d/2, y)
.
Dessiner le plateau¶
Pour représenter le plateau des 15x15 cases, nous utilisons un tuple scrabble
avec 15 chaines de caractères de longueur 15.
Nous parcourons les lettre de chaque ligne pour afficher les cases vides et remplies.
Essayons de reproduire cet état à l’aide du tuple scrabble
.
Exercice 7
Ajoutez les 3 dernière lignes qui manquent dans la définition de scrabble
.
14.11. Multiples polygones¶
Pour transformer une image en multiples polygones, nous pouvons placer une grille sur l’image ou imprimer l’image sur du papier carré.
L’image origami de l’oiseau est composé de:
18 points (de 0 à 17)
7 polygones (de 0 à 6)
Nous repérons d’abord toutes les coordonnées des points dans une liste points
. Avec un indexage du tuple tel que point[0]
on peut accéder ou point 0.
Les 7 polygones sont tout simplement des tuples avec les indices des points.
Pour dessiner multiples polygones, nous devons parcourir la liste des polygones. Pour chaque polygone nous parcourons ses points.
Avec les deux tuples pos
et size
nous pouvons choisir la position et la taille des polygones.
goto(pos[0] + size[0] * p[0], pos[1] + size[1] * p[1])
Pour fermer le polygone, nous revenons sur le premier point de la liste.
p = points[poly[0]]
goto(pos[0] + size[0] * p[0], pos[1] + size[1] * p[1])
14.12. Exercices¶
Pixelart¶
Choisissez un animal et produisez une image avec 8x8 pixels.
Tetris¶
Utilisez un tuple pour décrire type, position et orientation de chaque tétronimo.