MESH toolbox  0.1
Matlab/Octave mesh utils
 All Files Functions Groups Pages
PlotIso.m
Go to the documentation of this file.
1 function [colors,values]=PlotIso(q,me,ar,psi,niso,tcmap)
2 % function [colors,values]=PlotIso(q,me,ar,psi,niso,tcmap)
3 % Representation graphique des contours de psi sur
4 % un maillage non-structure. Version à améliorer/modifier!
5 %
6 % parameters:
7 % q : q(i,j) i-eme coordonnee du j-eme sommet
8 % me : me(il,k) indice de stockage dans le tableau q
9 % du il-eme sommet du triangle k
10 % ar : ar(:,i) indice de stockage dans le tableau q
11 % des deux sommets de l'arete i du bord
12 % psi : psi(i) valeur au point q(:,i) du maillage
13 % niso : nombre de lignes de niveaux
14 % tcmap : optionel (chaine de caracteres contenant un
15 % type de colormap : 'jet','cool',...
16 %
17 % colors et values peuvent etre utilise pour representer
18 % une colorbar. (voir colorbarIso.m et demo.m)
19 %
20 % Version : 2.0 - 4 Fevrier 2002
21 % Auteurs : Cuvelier F. & Fayssal B.
22 % Remarques : Non optimise
23 % Derniere Modification :
24 % - Modification de l'aide 20 Novembre 2003 (F.C.)
25 % ----------------------------------------------------------------
26 if ( nargin == 6 )
27  cmap = colormap(tcmap);
28 else
29  colormap('default');
30  cmap = colormap;
31 end
32 ns=size(q,2);
33 nt=size(me,2);
34 na=size(ar,2);
35 x=q(1,:);
36 y=q(2,:);
37 hold on
38 axis equal;
39 for i=1:na
40  plot(x(ar(:,i)),y(ar(:,i)),'k')
41 end
42 
43 
44 psimin=min(psi);
45 psimax=max(psi);
46 
47 val=zeros(3,nt);
48 numelt=zeros(1,niso);
49 kloce=zeros(1,nt);
50 
51 iso_psi=psimin:(psimax-psimin)./(niso-1):psimax;
52 psi=psi';
53 for kk=1:niso
54  ecrit(kk) = 1;
55 end
56 
57 % boucle sur la liste des iso_valeurs
58 for iso=1:niso
59 
60  % boucle sur l'ensemble des elements pour recherche sur iso_psi
61  i=1;
62  for iel=1:nt
63  val=psi(me(:,iel));
64  if((min(val)<=iso_psi(iso)) & (max(val)>=iso_psi(iso)))
65  numelt(1,iso)=numelt(1,iso)+1;
66  stock_numelt(iso,i)=iel;
67  i=i+1;
68  end
69 
70  end
71 
72 end
73 % Boucle sur les iso-valeurs
74 for isov=1:niso
75  colors(isov,1:3)=RGB((iso_psi(isov)-psimin)/(psimax-psimin),cmap);
76  values(isov)=iso_psi(isov);
77  % Boucle sur les elements repertories
78  Xplot=[];Yplot=[];k=1;
79  for ii=1:numelt(1,isov)
80  iel=stock_numelt(isov,ii);
81  cote=zeros(1,2);
82  kloce=me(:,iel);
83  val=psi(kloce);
84  ic=1;
85  if((val(1)~=iso_psi(isov))&(val(2)~=iso_psi(isov)) ...
86  &(val(3)~=iso_psi(isov)))
87  % Recherche des cotes de l'element concernes par iso_psi
88  if (iso_psi(isov)>min(val(1),val(2))) & (iso_psi(isov)<max(val(1),val(2)))
89  cote(1,ic)=1;
90  ic=ic+1;
91  end
92  if (iso_psi(isov)>min(val(2),val(3))) & (iso_psi(isov)<max(val(2),val(3)))
93  cote(1,ic)=2;
94  ic=ic+1;
95  end
96  if (iso_psi(isov)>min(val(1),val(3))) & (iso_psi(isov)<max(val(1),val(3)))
97  cote(1,ic)=3;
98  end
99  % Determination des coordonnees interpolees lineairement entre 2 noeuds
100  for icotok=1:2
101  if cote(1,icotok)==1
102  noeud1=1; noeud2=2;
103  elseif cote(1,icotok)==2
104  noeud1=2; noeud2=3;
105  elseif cote(1,icotok)==3
106  noeud1=3; noeud2=1;
107  end
108  %Recherche du noeud avec psi minimal
109  if val(noeud1)<val(noeud2)
110  xmin=x(kloce(noeud1));
111  ymin=y(kloce(noeud1));
112  xmax=x(kloce(noeud2));
113  ymax=y(kloce(noeud2));
114  else
115  xmin=x(kloce(noeud2));
116  ymin=y(kloce(noeud2));
117  xmax=x(kloce(noeud1));
118  ymax=y(kloce(noeud1));
119  end
120  pourcent=(iso_psi(isov)-min(val(noeud1),val(noeud2)))./ ...
121  (max(val(noeud1),val(noeud2))-min(val(noeud1),val(noeud2)));
122  xplot(1,icotok)=xmin+(xmax-xmin).*pourcent;
123  yplot(1,icotok)=ymin+(ymax-ymin).*pourcent;
124  end %fin boucle icotok
125 
126  h=plot(xplot,yplot);
127  set(h,'Color',colors(isov,1:3))
128  %linelabel(h,iso_psi(isov));
129 
130 
131 
132 
133  end %fin test 'if'
134 
135  end %fin boucle sur les elements repertories
136 end %fin boucle sur les iso-valeurs
137