Précédent Index

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

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 à: croix+croix

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): hachures

Solution de l'exercice 87 :
;;; (coller (list croix croix))
(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) ) ) ) ) )


Précédent Index