DEUG 1ere année
MIAS 1 et MASS 1 - Programmation fonctionnelle

TP 7 : Graphisme

L'opérateur de séquentialité : il est parfois nécessaire d'effectuer des actions les unes à la suite des autres dans un ordre fixé. L'opérateur begin dont la syntaxe est : (begin <expr1> <expr2> ... <exprn>) évalue les expressions données en paramètres les unes à la suite des autres et renvoie comme valeur, la valeur de la dernière expressions.
Cet opérateur est utilisé lorsque ce ne sont pas les valeurs des expressions qui importent mais les actions qui sont effectuées. On parle d'effet de bord. C'est le cas avec les fonctions graphiques (ainsi qu'avec les fonctions d'entrée et de sortie) dont les valeurs sont indéfinies mais dont les effets de bords importent.

Exercice 1 :

a)
Définir une fonction carre qui prend en argument un entier c et affiche sur la fenêtre graphique un carré centré au point de coordonnées (0, 0), dont le côté et de longueur c.
b)
Définir une fonction anime, qui affiche sur la fenêtre graphique un carré centré en (0, 0), de côté 400, et qui diminue progressivement jusqu'à se confondre avec l'origine.



Exercice 2 : Une fractale.
À partir de deux points M1(x1, y1) et M2(x2, y2) du plan, et d'un réel k, on définit les quatre points M3(x3, y3), M4(x4, y4), M5(x5, y5) et M6(x6, y6) tels que :

\includegraphics{fig2.eps}
x3=(3x1+x2)/4         y3=(3y1+y2)/4
x4=[2(x1+x2)-k(y2-y1)]/4   y4=[2(y1+y2)+k(x2-x1)]/4
x5=[2(x1+x2)+k(y2-y1)]/4   y5=[2(y1+y2)-k(x2-x1)]/4
x6=(x1+3x2)/4   y6=(y1+3y2)/4
La fractale à l'ordre n, à partir des points M1 et M2 se construit de la manière suivante :
si n=0, c'est le segment [M1, M2]
sinon, c'est :
la fractale à l'odre n-1, à partir des point M1 et M3 et du réel k,
la fractale à l'odre n-1, à partir des point M3 et M4 et du réel k,
la fractale à l'odre n-1, à partir des point M4 et M5 et du réel k,
la fractale à l'odre n-1, à partir des point M5 et M6 et du réel k et
la fractale à l'odre n-1, à partir des point M6 et M2 et du réel k.

Définir une fonction fractale, de paramètres x1, y1, x2, y2, k et n.
Essayer par exemple (fractale -200 0 200 0 1 3).

Remarque : si on oublie le point M5, on obtient le flocon de Von Koch.

Exercice 3 : Un autre dessin fractal.
Écrire une fonction dessin, de paramètres x1, y1, x2, y2 et n, à même de dessiner les figures ci-dessous.

\includegraphics{fig1.eps}
On rappelle que les coordonnées de l'angle droit du triangle rectangle isocèle construit dans le sens direct sur A1(a1, b1) et A2(a2, b2) sont (a1+b1+a2-b2)/2 et (a2+b2+b1-a1)/2.





Fonctions graphiques simplifiées


Les fonctions qui suivent sont définies à partir des primitives graphiques de DrScheme. Pour les utiliser :




(init-graphics) : ouvre une fenêtre graphique de 600 x 600 points, place l'origine du repère au centre de la fenêtre, et initialise la couleur du crayon en noir.

(init-graphics haut large) : idem mais avec une fenêtre graphique de haut sur large points. (Maximum 600 x 600).

(clear-graphics) : efface le contenu de la fenêtre graphique.

(black-pen) : sélectionne le crayon noir.
(white-pen) : sélectionne le crayon blanc.
(red-pen) : sélectionne le crayon rouge.
(green-pen) : sélectionne le crayon vert.
(blue-pen) : sélectionne le crayon bleu.
(yellow-pen) : sélectionne le crayon jaune.
(orange-pen) : sélectionne le crayon orange.
(purple-pen) : sélectionne le crayon violet.

(set-rgb-color r g b) : affecte au crayon la couleur déterminée par les trois valeurs r, g et b. Ces trois valeurs sont des réels de l'intervalle [0,1] est représentent les quantités de rouge, de vert et de bleu de la couleur.

(position-pen x y) : place le crayon au point de coordonnées (x, y).

(draw-point x y) : dessine le point de coordonnées (x, y) dans la couleur courante du crayon.

(clear-point x y) : efface le point de coordonnées (x, y).

(draw-line-to x y) : trace une ligne depuis la position courante du crayon jusqu'au point de coordonnées (x, y) qui devient la nouvelle position du crayon.