function [Iinit,Irot] = rotation2crop(I,theta)

% function [Iinit,Irot] = rotation2crop(I,theta); 
% 
% Rotation d'angle theta tel que |theta| <= pi avec 
% approximation bilineaire et reduction 
% de la taille de la matrice. Iinit et Irot sont carrees de meme taille. 
% L'operation de rotation est effectuee par composition de deux cisaillements. Iinit designe l'image 
% I bordee de 0 dont il a fallu partir pour recuperer une transformee Irot de meme taille.  

if theta > pi/2 
    I = flipud(I'); 
    theta = theta -pi/2; 
elseif theta < -pi/2 
    I = fliplr(I'); 
    theta = theta + pi/2; 
else 
     I = I; 
     theta=theta; 
end 
[m,n]=size(I); 
D=sqrt(m^2+n^2)/2; 
MM = ceil(D-m/2); 
NN = ceil(D-n/2); 
Iinit = [zeros(MM,n);I;zeros(MM,n)]; 
Iinit = [zeros(m+2*MM,NN) Iinit zeros(m+2*MM,NN)];  
[mm nn] = size(Iinit); 
II = rotation2(Iinit,theta); 
[M,N]=size(II); 
c1 =round(M/2) - round(mm/2);  
c2=round(N/2) - round(nn/2); 
Irot=II(c1:(c1+mm-1),c2:(c2+nn-1));
end

