function visu1_conv_anim(f1)
% 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".

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%              Fonctions appelées                                                                    *
%                                                  
%                                           
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Tests d'entrée
if nargin~=1
    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 temps en seconde, pour l'expression d'une pause
% déterminant la vitesse de défilement des images.
nul_seuil=0.5E-11;
rap_seuil=0.1;
u=2;


% 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_rel=abs(diff(r1))./abs(r1(2:nb_pas1));
att1(2:nb_pas1)=1./var_rel*u;
alph1(2:nb_pas1)=2*pi/sum(var_rel)*cumsum(var_rel);
coef=1.1*r1(1);
lim=[-coef coef -coef coef];


% création des valeurs qui s'enroulent autour de
% la limite avec ajustement d'échelle automatique

n=1;

% préparation de la fenetre
title('Visualisation de convergence');
c=rap_seuil*coef;
X=[-c,-c,c,c,-c];Y=[-c,c,c,-c,-c];

while n<=nb_pas1
    if  (1/coef*r1(n)>rap_seuil)
        
        x1=r1(n)*cos(alph1(n));
        y1=r1(n)*sin(alph1(n));
        % tracé
        axis(lim);
        line([0,x1],[0,y1]);hold on;
        % prise d'une pause (bien méritée!)
        pause(att1(n));
        % mise à jour de n
        n=n+1;
    else
       % annonce d'agrandissement
       c=rap_seuil*coef;
       X=[-c,-c,c,c,-c];Y=[-c,c,c,-c,-c];
       axis(lim);
       plot(X,Y,'r.--');
       hold on;pause(u/4)
       % changement d'échelle
       k=1.1/coef*r1(n);
       lim=k*lim;coef=k*coef;
   end
end 

% indication de fin de convergence
axis(lim);
plot([0],[0],'rp-');legend('Limite ''atteinte''',0);
hold off;

% fin de fonction



    
    
    
    
    
    


    











