function entrelacs_conv_anim(f1,f2)
% Propose une visualisation animée de la convergence d'une suite.
%
% variables d'entrée
% f1 désigne un vecteur de n1 valeurs d'une suite convergente
% dont la dernière est considérée comme la limite.
% L'écart à la limite sera représenté par des rayons polaires
% répartis sur un cercle proportionnellement aux gains de  variation relative,
% rapportés à la somme de ceux-ci, tous considérés en valeur absolue.
% Le rayon est l'écart de chaque valeur à la "limite".
% Idem en f2.


% Tests d'entrée
if nargin~=2
    error('Nombre des arguments incorrect');
end

% ménage!
clf;

% Calibrage des données: ces constantes modifiables par l'utilisateur
% pourraient aussi etre passées comme champs complémentaires.
% nul_seuil: un nombre inférieur en valeur absolue à nul_seuil est considéré nul.
% rap_seuil: pourcentage de la fenetre en dessous duquel on dilate l'image.
% u: unité de pause en secondes; règle la vitesse de production des images.


nul_seuil=0.5E-11;
rap_seuil=0.1;
u=1;

% détermination des rayons vecteurs, angles
% et initialisations diverses relatives à f1
r1=abs(f1-f1(size(f1,2)));ind1=find(r1>nul_seuil);
r1=r1(ind1);
nb_pas1=size(r1,2);
att1=zeros(1,nb_pas1);alph1=zeros(1,nb_pas1);
var_rel1=abs(diff(r1))./abs(r1(2:nb_pas1));
att1(2:nb_pas1)=1./var_rel1*u;
alph1(2:nb_pas1)=2*pi/sum(var_rel1)*cumsum(var_rel1);

% détermination des rayons vecteurs, angles
% et initialisations diverses relatives à f2
r2=abs(f2-f2(size(f2,2)));ind2=find(r2>nul_seuil);
r2=r2(ind2);
nb_pas2=size(r2,2);
att2=zeros(1,nb_pas2);alph2=zeros(1,nb_pas2);
var_rel2=abs(diff(r2))./abs(r2(2:nb_pas2));
att2(2:nb_pas2)=1./var_rel2*u;
alph2(2:nb_pas2)=2*pi/sum(var_rel2)*cumsum(var_rel2);

% création de la table globale
% qui sera ordonnée temporellement ultérieurement.
date1=cumsum(att1);num1=ones(1,nb_pas1);
X1=r1.*cos(alph1);Y1=r1.*sin(alph1);
date2=cumsum(att2);num2=3*ones(1,nb_pas2);
X2=r2.*cos(alph2);Y2=r2.*sin(alph2);

date=[date1 date2];num=[num1 num2];
X=[X1 X2];Y=[Y1 Y2];r=[r1 r2];
[tdate,ind]=sort(date);
tnum=num(ind); tr=r(ind);
tX=X(ind);tY=Y(ind);tatt=[0 diff(tdate)];


% création des valeurs qui s'enroulent autour de
% la limite avec ajustement d'échelle automatique
% initialisations
coef=1.1*min(r1(1),r2(1));
lim1=[-coef coef -coef coef];
c=rap_seuil*coef;
x=[-c,-c,c,c,-c];y=[-c,c,c,-c,-c];
tot=nb_pas1+nb_pas2;compt1=0;compt2=0;
encor1=1;encor2=1;

n=1;

    
% préparation des fenetres
figure;
subplot(2,2,1);title('Conv de suite 1');hold on;
subplot(2,2,2);title('Var rel cum pour suite 1');hold on;
subplot(2,2,3);title('Conv de suite 2');hold on;
subplot(2,2,4);title('Var rel cum pour suite 2');hold on;

max1=max(nb_pas1,nb_pas2);
max2=max(sum(var_rel1),sum(var_rel2));
lim2=1.1*[2 max1 0 max2];

subplot(2,2,2);
axis(lim2);plot((2:nb_pas1),cumsum(var_rel1),'k.-');
hold on;
subplot(2,2,4);
axis(lim2);plot((2:nb_pas2),cumsum(var_rel2),'k.-');
hold on;

while n<=tot
    if  (1/coef*tr(n)>rap_seuil)
        % suivi des points traites
        ch=num2str(1+(tnum(n)-1)/2);
        ch_x=['compt' ch];ch_y=['var_rel' ch];
        eval([ch_x '=' ch_x '+1;']);tx=eval(ch_x);
        ty=eval(['sum(' ch_y '(1:tx-1))']);
        
        % tracés dans les fenetres
        subplot(2,2,tnum(n));axis(lim1);
        line([0,tX(n)],[0,tY(n)]);hold on;
        subplot(2,2,tnum(n)+1);axis(lim2);
        plot([tx],[ty],'cs');
        hold on;
        
        % prise d'une pause (bien méritée!)
        pause(tatt(n));
        
        % mise à jour de n
        n=n+1;
        j=find(tnum(n:tot)==1);
        if (j==[])&(encor1)
            encor1=0;
            subplot(2,2,1);axis(lim1);
            plot([0],[0],'rp-');
            legend('Limite ''atteinte''',0);
            hold on;
        end
        j=find(tnum(n:tot)==3);
        if (j==[])&(encor2);
            encor2=0;
            subplot(2,2,3);axis(lim1);
            plot([0],[0],'rp-');
            legend('Limite ''atteinte''',0);
            hold on;
        end
    
    else
       % annonce d'agrandissement
       c=rap_seuil*coef;
       x=[-c,-c,c,c,-c];y=[-c,c,c,-c,-c];
       if encor1
           subplot(2,2,1);axis(lim1);
           plot(x,y,'r.--');
           hold on;pause(u/4);
       end
       if encor2
           subplot(2,2,3);axis(lim1);
           plot(x,y,'r.--');
           hold on;pause(u/4);
       end
       
       % changement d'échelle
       k=1.1/coef*tr(n);
       lim1=k*lim1;coef=k*coef;
   end
end

% fin de fonction