function visu_integ(X,Z,ind_int_nulle)
% fonction qui visualise la recherche de période d'une fonction
% sinusoidale par calcul d'intégrale.
%
% variables d'entrée
% X et Z désignent respectivement abscisses et ordonnées
% des points représentatifs de la fonction traitée.
% ind_int_nulle désigne l'indice du vecteur X pour lequel
% l'intégrale nulle est atteinte.
% Autrement dit, la période est X(ind_int_nulle)-X(1).
% Cet indice est produit par determin_periode.
% La fonction visu_integ produit des images
% qu'on pourra bien sur capter.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                       Fonctions connexes appelées
% simpson,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Tests d'entrée
if nargin~=3
    error('Nombre de champs incorrect');
end
if sum(size(X)~=size(Z))>0
    error('Champs incorrects. Voir controle des champs.');
end

global etendue
% Voir remarques dans gener_signal ou demo_tp3C

% paramètres généraux
lgr=size(X,2);
pas_X=X(2)-X(1);

% calibrages

% pour les fenetres 1 et 2.
ampl1=etendue*max(Z);
lim1=[X(1) X(lgr) -ampl1 ampl1];

% outil intermédiaire : calcul de l'intégrale sur une demi-période
% détermination du deuxième changement de signe de Z.
% Peut etre remplacé par un passage de ces données issues
% de determin_periode, ce qui éviterait leur calcul ici.
positifs=(Z>=0);
chgt=find(diff(positifs));

ampl3=etendue*...
    abs(simpson(pas_X,Z,chgt(1),chgt(2)+mod(chgt(2)-chgt(1),2)));
lim3=[-ampl3 ampl3 -3 4];


% tracé du signal brut
subplot(3,1,1);
plot(X,Z);
axis(lim1);
legend('Signal acquis',0);

% tracé de l'intégrale en cours de calcul

% choix de la finesse de découpe de l'intégrale à calculer
% à modifier éventuellement.
nb_iterations=50; unite=10/nb_iterations;
pas=floor((lgr-chgt(2))/nb_iterations);

% initialisation pour la deuxième fenetre
subplot(3,1,2);
title('Evolution de l''intégrale du signal');
deb=1;fin=chgt(2)+mod(chgt(2)-deb,2);
area(X(deb:fin),Z(deb:fin));
axis(lim1);
hold on;

% initialisation de la troisieme fenetre
h_3=subplot(3,1,3);
set(h_3,'YTick',[]);
title('Evolution de la valeur de l''intégrale');
integ0=simpson(pas_X,Z,deb,fin);
area([0 integ0],[1 1]);axis(lim3);
pause(0.5);
hold on;

% initialisations avant boucle
deb=fin;fin=deb+pas+mod(pas,2);
ajout=simpson(pas_X,Z,deb,fin);
integ=integ0+ajout;

while integ*integ0>=0
    
    % visualisation de l'intégrale en cours de calcul
    rx2=X(deb:fin);rz2=Z(deb:fin);
    subplot(3,1,2);
    title('Evolution de l''intégrale du signal');
    area(rx2,rz2);axis(lim1);
    hold on;
    
    % visualisation de la valeur de l'intégrale
    h_3=subplot(3,1,3);
    set(h_3,'YTick',[]);
    title('Evolution de la valeur de l''intégrale');
    cla;
    area([0 integ],[1 1]);axis(lim3);
    
    % préparation de boucle suivante
    pause(unite);
    deb=fin;fin=deb+pas+mod(pas,2);
    ajout=simpson(pas_X,Z,deb,fin);
    integ=integ+ajout;
    
    % traitement particulier de fin de boucle
    if fin>ind_int_nulle
        
        % fenetre 2 finale
        rx2=X(1:ind_int_nulle);rz2=Z(1:ind_int_nulle);
        subplot(3,1,2);
        title('Evolution de l''intégrale du signal');
        cla;
        area(rx2,rz2);axis(lim1);
        % fenetre 3 finale
        h_3=subplot(3,1,3);
        set(h_3,'YTick',[]);
        title('Evolution de la valeur de l''intégrale');
        cla;
        area([0 ampl3/100],[1 1]);axis(lim3);
    end
        
end
