%Corregimos el programa anterior (metodos.m) para evitar los problemas de aprendizaje,
%haciendo que la orientación de los estímulos sea al azar.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%1. Obtención de los estímulos  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%Construimos un test de agudeza formado por Es de Snellen de distinta orientación;
%Para facilitar el control del tamaño de la E, hacemos que el fondo de la figura sea del
%color que necesitemos y creamos una matriz que contiene sólo la E, no el fondo.

set(gcf,'Color',[1 1 1]);axis('off');hold on;
im=ones(5,5);im([1 3 5],:)=2*ones(3,5);im([2 4],1)=2*ones(2,1);

%Construimos Es girando y reflejando la E inicial.
im_e(:,:,1)=im;
im_e(:,:,2)=im';
im_e(:,:,3)=im(:,end:-1:1);
im_e(:,:,4)=im(:,end:-1:1)';

paleta=[1 1 1;0 0 0];
%Representamos las Es obtenidas en una figura y obtenemos el tamaño por defecto.

for i=1:4
   subplot(1,4,i);
   colormap(paleta);image(im_e(:,:,i));axis('square');
   axis('off')
   ejes(i)=gca;
   set(gca,'Units','centimeters');
   pos(i,:)=get(gca,'Position');
   %El tamaño de la letra es, en este caso pos(i,3);
end

%Obtenemos los centros de las figuras:
 cen=pos(:,[1 2])+pos(:,3:4)/2;;
 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%2 y 3. Implementación del método de medida  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Introducimos la distancia de observación, en centímetros:
d=100;

%Paso de variación del tamaño
k=0.99;

%Creamos dos botones para modificar el tamaño de las letras
%Opción 1: Incluímos una orden para presentar las cuatro orientaciones al azar.

%bot(1)=uicontrol(gcf,'units','normalized','String','+AV');
%set(bot(1),'Callback',...
%   [  'ord=round(3*rand(1,1)+1);while length(ord)<4;or=round(3*rand(1,1)+1);',...
%      'if any(ord==or);else ord=[ord or];end;end;',...
%      'for i=1:4;ejes(i)=subplot(4,1,i);colormap(paleta);image(im_e(:,:,ord(i)));axis(''square'');axis(''off'');end;',...
%      'for i=1:4;set(ejes(i),''units'',''centimeters'',''position'',pos(i,:));end;',...
%      'posn=[cen-k*pos(:,3:4)/2 k*pos(:,3:4)];',...
%      'AV=pi/(180*60*2*atan(posn(1,3)/d/2/5));',...
%      'for i=1:4;set(ejes(i),''Position'',posn(i,:));end;',...
%      'title([''AV='' num2str(AV)]);pos=posn;',...
%   ]);
%posb=get(bot(1),'Position');
%bot(2)=uicontrol(gcf,'units','normalized','String','-AV','Position',[posb(1)+posb(3) posb(2:4)]);
%set(bot(2),'Callback',...
%   [  'ord=round(3*rand(1,1)+1);while length(ord)<4;or=round(3*rand(1,1)+1);',...
%      'if any(ord==or);else ord=[ord or];end;end;',...
%      'for i=1:4;ejes(i)=subplot(1,4,i);colormap(paleta);image(im_e(:,:,ord(i)));axis(''square'');axis(''off'');end;',...
%      'for i=1:4;set(ejes(i),''units'',''centimeters'',''position'',pos(i,:));end;',...
%      'posn=[cen-pos(:,3:4)/2/k pos(:,3:4)/k];',...
%      'AV=pi/(180*60*2*atan(posn(1,3)/d/2/5));',...
%      'for i=1:4;set(ejes(i),''Position'',posn(i,:));end;',...
%      'title([''AV='' num2str(AV)]);pos=posn;',...
%    ]);
%Podríamos crear más botones, con acciones adicionales.
%bot(3)=uicontrol(gcf,'units','normalized','String','OK',...
%   'Position',[posb(1)+2*posb(3) posb(2:4)],...
%   'Callback','close');


%Creamos dos botones para modificar el tamaño de las letras
%Opción 2: Incluímos una orden para presentar cuatro estímulos, orientados al azar.

bot(1)=uicontrol(gcf,'units','normalized','String','+AV');
set(bot(1),'Callback',...
   [  'ord=round(3*rand(1,4)+1);',...
      'for i=1:4;ejes(i)=subplot(4,1,i);colormap(paleta);image(im_e(:,:,ord(i)));axis(''square'');axis(''off'');end;',...
      'for i=1:4;set(ejes(i),''units'',''centimeters'',''position'',pos(i,:));end;',...
      'posn=[cen-k*pos(:,3:4)/2 k*pos(:,3:4)];',...
      'AV=pi/(180*60*2*atan(posn(1,3)/d/2/5));',...
      'for i=1:4;set(ejes(i),''Position'',posn(i,:));end;',...
      'title([''AV='' num2str(AV)]);pos=posn;',...
   ]);
posb=get(bot(1),'Position');
bot(2)=uicontrol(gcf,'units','normalized','String','-AV','Position',[posb(1)+posb(3) posb(2:4)]);
set(bot(2),'Callback',...
   [  'ord=round(3*rand(1,4)+1);',...
      'for i=1:4;ejes(i)=subplot(1,4,i);colormap(paleta);image(im_e(:,:,ord(i)));axis(''square'');axis(''off'');end;',...
      'for i=1:4;set(ejes(i),''units'',''centimeters'',''position'',pos(i,:));end;',...
      'posn=[cen-pos(:,3:4)/2/k pos(:,3:4)/k];',...
      'AV=pi/(180*60*2*atan(posn(1,3)/d/2/5));',...
      'for i=1:4;set(ejes(i),''Position'',posn(i,:));end;',...
      'title([''AV='' num2str(AV)]);pos=posn;',...
    ]);
%Podríamos crear más botones, con acciones adicionales.
bot(3)=uicontrol(gcf,'units','normalized','String','OK',...
   'Position',[posb(1)+2*posb(3) posb(2:4)],...
   'Callback','close');

