2 Graphisme - Université d`Angers
Transcription
2 Graphisme - Université d`Angers
Université d’Angers. Licence de mathématiques 2012-2013 2 Lucas Vienne Graphisme Dans ce chapitre on examine le fonctionnement graphique de Scilab. 2.1 Description globale. Les handle On présente ici l’aspect théorique, servant de guide, qu’on peut survoler en première lecture. Scilab affiche les graphiques par l’appel d’opérateurs plot(),plot2d(),plot3d(),etc. qui s’appliquent à des objets décrits entre les parenthèses de l’appel. Mais chacun de ces appels crée un objet Scilab contenant beaucoup d’informations qu’on peut modifier après l’appel ... si l’on sait comment y accéder. Ces informations sont contenues dans trois dossiers hierarchisés, dits handle attachés à chaque figure. Une figure est elle même la réunion de plusieurs plot puisque chaque plot appelé se superpose aux précédents sans les effacer. Le handle dominant est de type Figure et s’appelle par gcf() (get controle figure). Il contient des informations sur la mise en place de la figure, son numero etc., qu’on trouve en lançant l’appel gcf(). Ses ”enfants” (children) sont de type Axes et appelés par gca() (get controle axes). Ce handle contient toutes les information sur la présentation graphique des axes, grille etc. Enfin les children du gca() sont les Entites représentées (courbes, titres, etc.). L’appel gce() (get controle entities) renvoie les propriétés du dernier objet graphique fabriqué. Pour récupérer les autres on lance l’appel gca() puis on choisit le children correspondant (par la suite d’instructions a=gca(), objet=a.children(2) par exemple). Lorsqu’on veut modifier un objet (epaisseur du trait par exemple) on appelle et nomme son handle (e=a.children(2) par exemple), puis on modifie la propriété voulue par une instruction (e.thickness=1 par exemple). Pour éclairer un peu tout cela voilà une suite d’instructions à taper une à une en regardant les effets obtenus. clear, clf() k=0.2; cadre=[-1,-1,11,11]; ao=100*rand(2,6)/10; xarc(-2*k,2*k,4*k,4*k,0,64*360) plot2d(ao(1,:)’,ao(2,:)’,rect=cadre) xstring(ao(1,1),ao(2,1),’ ’+string( ’point’)+’ ’) f=gcf() a=gca() a.children(1) e=gce() e.box="on" a.children(2) cc=a.children(2).children cc.foreground=5 2.2 Fonctions graphiques Dans cette section on fait des essais sur les fonctions graphiques de Scilab. Il faut les tester lentement pour comprendre l’action des appels successifs. Un dessin plan est appelé sous la forme plot2d(aa,oo,style,rect,frameflag). 12 * aa et oo sont des matrices de même type, les i-ème colonnes de aa et oo représentant respectivement la liste des abscisses (resp. des ordonnées) des points de la i-ème courbe affichée. * style=n définit une couleur de ligne si n>0 et un symbole si n ≤ 0. couleur noir bleu vert cyan rouge magenta nombre 1 2 3 4 5 6 7 8 9 symbole • nombre 0 + × ⊕ 3 4 5 -1 -2 -3 -4 -5 -6 -7 -8 ◦ ∗ 2 . / -9 -10 -11 -12 -13 * rect=[xmin,ymin,xmax,ymax] est une fonction définissant le rectangle d’affichage. * frameflag=n formate le rectangle d’affichage et la graduation des axes. Si les options sont entrées dans le bon ordre (voir l’aide) il n’est pas nécessaire de rappeler leur nom (par exemple, ci-dessous, on écrit juste −2 au lieu de style=-2) clf() plot2d(1,1.5,-2,rect=[-1,0,1.5,2],frameflag=3) hdl=gce() point=hdl.children(1) point.mark_foreground=3 point.visible="off" axes=gca() axes.foreground=5 efface la fenêtre graphique dessine un point de symbole -2 affiche le handle du plot récupère les données du point modifie la couleur des croix (3=vert) efface le point appelle les axes change la couleur des axes (5=rouge) En mode "plot" on peut choisir le type de tracé de la façon suivante tt=linspace(0,2*%pi,50); aa1=cos(3*tt)-sin(tt); oo1=cos(2*tt)+2*sin(tt); aa2=tt; oo2=atan(tt-%pi); plot(aa1,oo1,"*-g",aa2,oo2,"+r"); paramètre abscisses et ordonnées abscisses et ordonnées affichage des deux courbes La syntaxe "*-g" définit un tracé par des points (symbole ∗) reliés par un trait (−) vert (g). Cette syntaxe ne fonctionne pas en mode "plot2d", mais voilà comment on peut faire. trace des croix non reliées (style=-2) noires par défaut. récupère le handle du plot2d que l’on nomme "croix". récupère le dessin des croix qu’on nomme dessin. modifie la couleur du dessin (3=vert) plot2d(aa1,oo1,-2) croix=gce() dessin=croix.children(1) dessin.mark_foreground=3 2.2.1 Objets graphiques usuels xx=[1,4,-2,7]; yy=[-3,7,2,-4]; affichage=[min(xx),min(yy),max(xx),max(yy)] plot2d(0,0,-3,rect=affichage,frameflag=3) Quelques données utilisées dans la suite Dimensionnement, grilles, changement de couleur xgrid(2) hdl=gce() grille=hdl.parent(1) grille.grid=[3, 2] grille.grid=[-1,-1] fig=gcf() fig.figure size=[500 500] ajoute une grille carree bleue (2) à la figure en cours. récupere le handle des objets de la figure courante récupère la grille change les couleurs de la grille efface la grille appelle le handle de toute la figure redimensionne la figure dans un rectangle [500, 500] Segments, lignes brisées, polygônes 13 Un bon exemple valant mieux qu’un long discours, taper successivement les commandes suivantes et comprendre leur action. plot2d(0,0,-3,rect=affichage,frameflag=3) xpoly(xx’,yy’,"lines" ,0) ligne polygonale ouverte (0= ouvert) ligne=gce(); récupère ses données ligne.foreground=5; change sa couleur ligne.line_style=2 change le style (2 =pointilles) xfpoly(yy’,xx’,1) ajoute un polygône ’rempli’ (1=ferme et rempli) polyplein=gce(); récupère ses données polyplein.background=3; change sa couleur xrpoly([3,4],6,3,[%pi/4]) hexagone=gce() hexagone.foreground=5 xfrect(0,3,2,1) objet1=gce() objet1.background=2 xrect(2,4,2,3) objet2=gce() objet2.foreground=1 polygone régulier. centre [3,4], 6 cotés, diamètre 5, orientation π/4 récupère ses données couleur rouge pour l’hexagone ajoute un rectangle plein à la figure courante : [0,3] = sommet supérieur gauche, largeur 2, hauteur 1 dénome le dernier objet fabriqué : ici le rectangle plein donne sa couleur (2=bleu) implante un rectangle vide dénome le dernier objet fabriqué : ici le rectangle vide définit sa couleur Arcs, ellipses plot2d(0,0,-3,rect=affichage,frameflag=3) xgrid(2) xarc(1,4,2,2,64*0,64*360) arc vide (a,o, larg, haut, début de phase, différence de phase), où (a,o, larg, haut) est le rectangle dans lequel s’inscrit l’ellipse et (début de phase, différence de phase) déterminent la variation de phase xfarc(0,4,2,4,64*30,64*90) secteur d ellipse (plein) pie([a,b,c]) dessine un camenbert statistique Il faut faire quelques essais pour comprendre comment agissent les différents paramètres. Champs de vecteurs Exemple 1 clf( ); clear ; x=[0:10]; y=x ; u=rand(11,11)-0.5 ;v=rand(11,11)-0.5; champ(x,y,u,v,rect=[0,0,10,10]) xgrid(5) axes=gca() axes.isoview="on" définition aléatoire des vecteurs du champ affichage du champ grille rouge handle des axes affichage isométrique Exemple 2. Champ associé à une équation différentielle. deff(’xy=f(t,u)’,.. ’xy=[2*u(1)-u(1)*u(2), u(1)*u(2)-u(2)]’) tt=0:0.1:5; xx=0:0.1:2.5; yy=0:0.1:4; fchamp(f,0,xx,yy) clf() 14 définit la fonction (x, y) = f (t, u) temps et cadre d’affichage du champ appel du champ efface la figure fchamp(f,0,xx,yy,0) sol1=ode([1;2.5],0,tt,f); plot2d([sol1(1,:)],[sol1(2,:)],5) sol2=ode([1;3.5],0,tt,f); plot2d([sol2(1,:)],[sol2(2,:)],2) appel avec une option graphique (voir l’aide) une solution affichage, rouge une autre solution bleu Ajouts graphiques : légendes, titres plot2d(3,4,-3) hdl=gce() point=hdl.children(1) point.mark_foreground=5 xstring(3.2,4.2,’le point(’+string(3)+’,’+string(4)+’)’) xtitle(’Agitation aleatoire’) legends(’mouvement brownien’,1) dessine un point récupère le handle récupère le point change sa couleur (rouge = 5) commentaire à coté du point titre legende Mode d’affichage. Exemple, coordonnées polaires clf() ; clear ; theta=[0:0.02:2*%pi]’; rho=1+0.2*cos(theta.^2); polarplot(theta,rho,style=5) a=gca() axes pour graduations a.isoview=’on’ vue isométrique 2.2.2 Représentations 3D Paramétrique function [x,y,z]=courbe(t) x=1+cos(t), y=sin(t), z=2*sin(t/2) endfunction t=[0:0.02:4*%pi]; [x,y,z]=courbe(t); param3d(x,y,z) axe=gca() récupération des axes axe.isoview="on" vue isométrique Surfaces z = f (x, y) function z=f(x,y) r=sqrt(x^2+y^2) z=exp(-r)*cos(3*%pi*r) endfunction x=[-1:0.05:1]’; y=x; z=feval(x,y,f); plot3d(x,y,z) surface=gce() surface.color_mode=4 surface.hiddencolor =6 surface.foreground=2 récupération de la surface changement de la couleur supérieure changement de la couleur inférieure changement de la couleur de la trame Effets d’affichage grayplot(x,y,z) f=gcf() f.color_map=hotcolormap(64) Sgrayplot(x,y,z) contour(x,y,z,3) handle figure opère un lissage des couleurs lignes de niveaux 15 Sous-figures : la fonction subplot(ijk) découpe un quadrillage de type (i,j), puis elle place le dessin appelé dans la case k, la numerotation se faisant dans le sens colonne puis ligne. Exemple : t=0:0.01:10; subplot(211),plot2d(t,sin(t)) subplot(212),plot2d(t,sin(3*t)) Enregistrement d’un plot Pour conserver un plot on tape save(’courbes’,gcf()), ce qui enregistre la figure courante sous le nom ’courbes’. On peut alors la rappeler par load(’courbes’) 16