INTRODUCTION |
Dans le chapitre portant sur les graphiques avec la tortue, vous avez déjà appris à faire en sorte que la tortue dessine sur une imprimante haute résolution au lieu de l’écran. De manière similaire, GPanel peut effectuer le rendu d’une image sur une imprimante papier ou une imprimante virtuelle telle qu’un fichier Tiff ou EPS. Pour effectuer une impression, il faut placer les instructions de dessin à l’intérieur d’une fonction dépourvue de paramètre, nommée par exemple doIt(). Lorsque cette fonction est appelée directement, le graphique résultant des instructions qu’elle exécute sera affiché à l’écran tandis qu’il sera envoyé vers l’imprimante en passant cette fonction doIt en paramètre à la fonction printerPlot(doIt). Il est même possible de spécifier un facteur d’échelle k avec printerPlot(doIt, k) qui va causer un rétrécissement de l’image si k < 1 et un agrandissement si k >1. |
ROSACES |
from gpanel import * import math def rho(phi): return math.sin(n * phi) def doIt(): phi = 0 while phi < nbTurns * math.pi: r = rho(phi) x = r * math.cos(phi) y = r * math.sin(phi) if phi == 0: move(x, y) else: draw(x, y) phi += dphi n = math.sqrt(2) dphi = 0.01 nbTurns = 100 makeGPanel(-1.2, 1.2, -1.2, 1.2) doIt() printerPlot(doIt) |
MEMENTO |
Suivant le choix opéré pour le paramètre n, on peut créer différents types de courbes. N’hésitez pas à tester des valeurs entières, rationnelles et même irrationnelles telles que (π, e). |
ROSES DE MAURER |
Suivant le choix de n et d, des courbes aux allures totalement différentes vont être engendrées. Il faut les imprimer pour pouvoir les admirer dans toute leur beauté. L’exemple ci-contre peut être généré avec les valeurs n = 3 et d = 47°. from gpanel import * import math def sin(x): return math.sin(math.radians(x)) def cos(x): return math.cos(math.radians(x)) def cartesian(polar): return [polar[0] * cos(polar[1]), polar[0] * sin(polar[1])] def rho(phi): return sin(n * phi) def doIt(): for i in range(361): k = i * d pt = [rho(k), k] corners.append(pt) move(cartesian(corners[0])) for pt in corners: draw(cartesian(pt)) corners = [] n = 3 d = 47 makeGPanel(-1.2, 1.2, -1.2, 1.2) doIt() printerPlot(doIt) |
MEMENTO |
Ce programme utilise des degrés et non des radians. De ce fait, il est pratique de définir ses propres fonctions sinus et cosinus qui prennent des angles en degrés. Cela simplifiera également le code qui ne nécessitera plus de spécifier explicitement le module math dans math.sin ou math.cos pour faire appel aux fonctions trigonométriques.
|
EXERCICES |
|