% *** ---------------------------------------------------------------------------------------- *** %
% ***| Funcion que devuelve la subimagen rectangular doble de la contenida entre 'semilla'   | *** %
% ***| y 'posicion', y los indices relativos de semilla y posicion en dicha subimagen        | *** %
% *** ---------------------------------------------------------------------------------------- *** %

function [submapa,sem_rel,pos_rel,margenes,ini_sub,fin_sub] = subimagen(mapa,semilla,posicion,dist_margen)

dist_default = 10;                          % Distancia minima de la subimagen
dist_margen_y = dist_margen;
dist_margen_x = dist_margen;

% Comparando las coordenadas Y de 'semilla' y 'posicion' (indices de fila)
if semilla(1) <= posicion(1)
    
    ini_y = semilla(1);
    dist_y = posicion(1) - semilla(1);
    fin_y = ini_y + dist_y;
    if dist_y < dist_default                % Si 'dist_y' no llega al minimo exigido
        dist_margen_y = dist_margen + dist_default;
    end
    margen_y = ceil(dist_margen_y); 
    
else
    
    ini_y = posicion(1);
    dist_y = semilla(1) - posicion(1);
    fin_y = ini_y + dist_y;
    if dist_y < dist_default                % Si 'dist_y' no llega al minimo exigido
        dist_margen_y = dist_margen + dist_default;
    end
    margen_y = ceil(dist_margen_y); 
    
end

% Comparando las coordenadas X de 'semilla' y 'posicion' (indices de columna)
if semilla(2) <= posicion(2)
    
    ini_x = semilla(2);
    dist_x = posicion(2) - semilla(2);
    fin_x = ini_x + dist_x;
    if dist_x < dist_default                % Si 'dist_x' no llega al minimo exigido
        dist_margen_x = dist_margen + dist_default;
    end
    margen_x = ceil(dist_margen_x);  
    
else
    
    ini_x = posicion(2);
    dist_x = semilla(2) - posicion(2);
    fin_x = ini_x + dist_x;
    if dist_x < dist_default                % Si 'dist_x' no llega al minimo exigido
        dist_margen_x = dist_margen + dist_default;
    end
    margen_x = ceil(dist_margen_x);  
    
end

ini = [ini_y,ini_x];                        % Formacion de vectores de interes para la funcion 'comprueba'
fin = [fin_y,fin_x];
margen = [margen_y,margen_x];
dimensiones = [size(mapa,1),size(mapa,2)];
dist = [dist_y,dist_x];

% Llamada a la funcion que delimitara la subimagen aumentada y comprobara que no salga de las dimensiones de la imagen original
[ini_sub,fin_sub,sem_rel,pos_rel,margenes] = comprueba(dimensiones,ini,fin,margen,semilla,posicion,dist);

submapa = mapa(ini_sub(1):fin_sub(1) , ini_sub(2):fin_sub(2));            % Ampliacion de la subimagen
