9 Graphique
Ces exercices sont à faire avec DrScheme
Les images sont des rectangles dont les points sont repérés par une
abscisse et une ordonnée variant entre -1 et 1. Par défaut les carrés
créés par line et filled-triangle font 100 pixels de
côté (la valeur de la variable default-image-size.
Rappel des primitives graphiques de DrScheme:
- (line x0 y0 x1 y1)
rend une image carrée blanche avec une ligne noire tracée de (x0,y0)
vers (x1,y1).
- (quarter-turn-right image) rend une nouvelle image
tournée de 90 degrés (dans le sens des aiguilles d'une montre).
- (mirror-image image) rend une nouvelle image mémoire
reflétée (par rapport à l'axe des ordonnées).
- (invert image) rend une nouvelle image dont les
couleurs des pixels sont inversées.
- (overlay image image) superpose deux images, les pixels
blancs devenant transparents.
- (resize-image image sizex sizey) rend une nouvelle image
homothétique avec les nouvelles tailles indiquées.
- (stack image1 image2) rend une image correspondant aux
deux images collées verticalement.
- (filled-triangle x0 y0 x1 y1 x2 y2) créé une image
blanche avec un triangle noir défini par les coordonnées des trois points.
Exercice 85 : Construire une image ayant une forme de croix latine.
Solution de l'exercice 85 :
(define croix
(let* ((inf (filled-triangle -1 -1/3 -1 1/3 1 -1/3))
(sup (filled-triangle -1 +1/3 +1 1/3 1 -1/3))
(barreh (overlay inf sup))
(barrev (quarter-turn-right barreh)) )
(overlay barreh barrev) ) )
Exercice 86 : Écrire une fonction coller prenant une liste d'images et les
collant ensemble horizontalement. Par exemple: (coller (list
croix croix)) conduit à:
Solution de l'exercice 86 :
(define (coller images)
(define (colle images)
(if (pair? images)
(if (pair? (cdr images))
(stack (car images)
(colle (cdr images)) )
(car images) )
(error 'coller "pas d'image" images) ) )
(quarter-turn-right (colle images)) )
Exercice 87 : Écrire une fonction hachures creant une image remplie de 2n+1
hachures diagonales comme par exemple (hachures 4):
Solution de l'exercice 87 :
;;;
(define (hachures n)
(let ((delta (/ 2 (+ n 1))))
(let hachurer ((image (line -1 1 1 -1))
(i 1) )
(if (> i n)
(let ((complement (quarter-turn-right
(quarter-turn-right image) )))
(overlay complement image) )
(hachurer (overlay image (line -1 (- 1 (* i delta))
(- 1 (* i delta)) -1 ))
(+ i 1) ) ) ) ) )