function lava(k,n,pas,tmax,option)
% représentation d'une lava en mouvement
% N indique le nombre de méridiens et 
% de parallèles entre 0 et 2Pi (phi), et
% entre 0 et Pi (theta). PAS est l'intervalle
% de temps entre deux représentations de lava.
% TMAX est le temps maximum (un déplacement
% entre le haut et le bas est de 1 unité de temps;
% après c'est un cycle qui recommence).
% Si OPTION='sauve', toutes les 5 images sont
% enregistrées en GIF (nécessite GIFWRITE).

% Utilisation: lava(4,16,0.01,1,'sauve') 

if nargin<4
	help lava
elseif nargin==4
	option='rien';
end

% initialisation de PHI et THETA
phi=linspace(0,2*pi,n);
theta=linspace(0,pi,n);

% pour permettre une apparence plus continue,
% theta est remplacé par une fonction quadratique de theta:
biastheta=theta.*(1+2*theta./pi)./3;

% définition des lavas
[x,y,z]=lavademi(phi,biastheta,0);
for j=1:k
	a=pi/8+j*pi/2;
	xa(j)=0.65*cos(a);
	ya(j)=0.65*sin(a);
	T=mod(0-j/4,1);
	bas(j)=surfl(x+xa(j),y+ya(j),z+hl(T));	% le bas
   haut(j)=surfl(x+xa(j),y+ya(j),-z+hu(T));% le haut est une symétrie (Oxy)
end

% animation
i=1; nbi=5;	
for t=pas:pas:tmax
  for j=1:k
	T=mod(t-j/4,1);
	[x,y,z]=lavademi(phi,biastheta,T);
	set(bas(j),'XData',x+xa(j))
	set(bas(j),'YData',y+ya(j))
	set(bas(j),'ZData',z+hl(T))
	set(haut(j),'XData',x+xa(j))
	set(haut(j),'YData',y+ya(j))
	set(haut(j),'ZData',-z+hu(T))
   end
    drawnow
	if strcmp(option,'sauve')
	 if ~rem(i,nbi)
		[X,MAP]=capture;
		no=['000',num2str(fix(i/nbi))];
		ln=length(no);
		gifwrite(X,MAP,['lava',no(ln-3:ln)]);
	 end
	end
	i=i+1;	
end
