function II = cisaillver(I,a); 

% function II = cisaillver(I,a);
% 
%Cisaillement vertical d'une image avec approximation bilineaire.  
% 

[m,n]=size(I);
if a > 0 
    % on declare une image rectangulaire a n colonnes et dont le 
    % nombre de lignes N est tel que le cadre [0,n-1] x [0,N-1] 
    % contienne a priori le support de l'image par le cisaillement.
    % L'abscisse maximale des pixels doit etre au plus l'entier  
    % (m-1) + ceil (a*(n-1)), donc N = m + ceil(a*(n-1)). 
    N = m+ ceil(a*(n-1)); 
    II = zeros (N,n);    
    for j=1:N 
        for k=1:n; 
            uu= -a*(k-1)+j-1; 
            if uu*(uu-(m-1)) > 0 
                II(j,k)=0; 
            else 
                uinf=floor(uu)+1;
                usup=ceil(uu)+1; 
                I1 = I(uinf,k);
                I2 = I(usup,k); 
                t  = uu-floor(uu); 
                II(j,k) = (1-t)*I1 + t*I2; 
            end 
        end 
    end
elseif a==0 
    II=I; 
else
    % on declare une image rectangulaire a n colonnes et dont le
    % nombre de lignes est tel que le cadre [0,n-1] x [-NN,m-1] 
    % contienne a priori le support de l'image par le cisaillement.
    % L'ordonnee minimale des pixels doit etre   
    % - ceil (a*(n-1)), donc NN = - ceil(a*(n-1)).
    NN = -ceil(a*(n-1)); 
    N = m + NN;   
    II = zeros (N,n); 
    % Il faut avoir en tete que j=1 correspond a l'ordonnee - NN. 
    for j=1:N 
        for k=1:n; 
            uu= -a*(k-1) + (j-1-NN); 
            if uu*(uu-(m-1))>0
                II(j,k)=0; 
            else 
                uinf=floor(uu)+1; 
                usup=ceil(uu)+1; 
                I1 = I(uinf,k); 
                I2 = I(usup,k); 
                t=uu-floor(uu); 
                II(j,k)=(1-t)*I1+t*I2; 
            end 
        end 
    end  
end 
    
    
    
end 
    
    
    
    
    
    
