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