function R = rotacionDirecta( I,angulo )
%ROTACIONDIRECTA Rota una imagen angulo en grados respecto origen.
%   angulo positivo en sentido antihorario
%   R = rotacionDirecta( I,angulo )
%   La imagen R que proporciona es del mismo tamaño que I
%   Emplea transf.directa -> aparecerán PUNTOS NEGROS!!!
%   Vecino más próximo.
%   Ejemplo:                                                  
%    I = imread('caja01.bmp');                                            
%    R=rotacionDirecta(I,15);                                             
%    imshow(R);  

%_________________________________________________________________________%
% NOMBRE DEL FICHERO:   rotacionDirecta.m                                 %
% RECIBE:   Imagen de niveles de gris I                                   %
% DEVUELVE: La misma imagen rotada angulo grados, de igual tamaño que I.  %
% ALGORITMO EMPLEADO: Transformación directa. Vecino más próximo          %                      
% VARIABLES:   I = imagen en niveles de gris a trasladar                  %
%              angulo = angulo en grados. Positivo en sentido antihorario %
%              R = imagen  resultante                                     %
%              filas = numero de filas de I                               %
%              columnas = numero de columnas de I                         %
%              isal = fila donde es mapeada el pix(i,j) de imag. de ent.  % 
%              jsal = colum. donde es mapeada  pix(i,j) de imag. de ent.  %
% BUGS:        Emplea transf.directa -> aparecerán PUNTOS NEGROS!!!       %
% SUPOSICIONES : La imagen de salida es del mismo tamaño.                 %                   
%                Puede perderse una parte significativa de la imagen      %
% LIBRO  VISION ARTIFICIAL INDUSTRIAL. UNIVERSIDAD DE VALLADOLID 2012     %
% TEMA 3 MANIPULACIÓN GEOMÉTRICA DE LA IMAGEN. pág 40.                    %
% AUTORES: Eusebio de la Fuente y Félix Miguel Trespaderne                %
%_________________________________________________________________________%
% Con funciones de matlab
% >> I = imread('caja01.bmp');                                            %
% >> R = imrotate(I, 15);                                                 %
% >> imshow(R);                                                           %
%_________________________________________________________________________%


[filas,columnas]=size(I);
R=zeros(filas,columnas);
angRad=angulo*pi/180;
for i=1:filas
    for j=1:columnas
        
        isal= i*cos(angRad) - j*sin(angRad);
        jsal= i*sin(angRad) + j*cos(angRad);
        
        %redondeo al entero más próximo
        isal=round(isal);
        jsal=round(jsal);
        %comprobamos que cae dentro de la imagen
        if(isal>0 && isal<filas && jsal>0 && jsal<columnas)
            R(isal,jsal)=I(i,j);
        end
    end
end
R=mat2gray(R);
end

