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.

../_images/sonic.png

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 ligne

  • avec 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

pavage

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.

tétrominos

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.

tetris

Chaque tétronimo peut être écrite sous forme de

  • type t de tétronimo

  • position 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.

tangram

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.

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é.

bird

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.

Pour fermer le polygone, nous revenons sur le premier point de la liste.

14.12. Exercices

Pixelart

Choisissez un animal et produisez une image avec 8x8 pixels.

pixelart

Tetris

Utilisez un tuple pour décrire type, position et orientation de chaque tétronimo.

tetris