%Método de elección forzosa
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%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=[255 255 255;250 250 250]/255;
%Representamos las Es obtenidas en una figura y obtenemos el tamaño por defecto.
donde_blanco=round(rand(1,1)+1);
for i=1:2
   subplot(1,2,i);
   if i==donde_blanco
     im=ones(size(im,1),size(im,2));   
   else
     que_letra=round(3*rand(1,1)+1);
     im=im_e(:,:,que_letra);           
   end
   colormap(paleta);
   image(im);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;;
d=100;
ang=1;l=2*d*tan(ang*pi/180/2);
fac=l/pos(1,3);
pos=[cen-fac*pos(:,3:4)/2 fac*pos(:,3:4)];
for i=1:2;set(ejes(i),'position',pos(i,:));end 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%2 y 3. Implementación del método de medida  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Introducimos la distancia de observación, en centímetros:
d=100;
ang=1;l=2*d*tan(ang*pi/180/2);
fac=l/pos(1,3);
pos=[cen-fac*pos(:,3:4)/2 fac*pos(:,3:4)];
%Paso de variación del tamaño
k=1;


%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','+S');
set(bot(1),'Callback',...
   [  'donde_blanco=round(rand(1,1)+1);',...
      'for i=1:2;ejes(i)=subplot(1,2,i);',...
      'if i==donde_blanco;im=ones(size(im,1),size(im,2));else que_letra=round(3*rand(1,1)+1);im=im_e(:,:,que_letra);end;',...
      'if all(paleta(2,:)*255+k<=255); paleta(2,:)=(k+255*paleta(2,:))/255;end;',...
      'colormap(paleta);image(im);',...
      'axis(''square'');axis(''off'');',...
      'end;',...
      'for i=1:2;set(ejes(i),''units'',''centimeters'',''position'',pos(i,:));end;',...
      'paleta(2,:)=k*paleta(2,:);',...
   ]);
posb=get(bot(1),'Position');
bot(2)=uicontrol(gcf,'units','normalized','String','-S','Position',[posb(1)+posb(3) posb(2:4)]);
set(bot(2),'Callback',...
   [  'donde_blanco=round(rand(1,1)+1);',...
      'for i=1:2;ejes(i)=subplot(1,2,i);',...
      'if i==donde_blanco;im=ones(size(im,1),size(im,2));else que_letra=round(3*rand(1,1)+1);im=im_e(:,:,que_letra);end;',...
      'if all(paleta(2,:)*255-k>=0); paleta(2,:)=(-k+255*paleta(2,:))/255;end;',...
      'colormap(paleta);image(im);',...
      'axis(''square'');axis(''off'');',...
      'end;',...
      'for i=1:2;set(ejes(i),''units'',''centimeters'',''position'',pos(i,:));end;',...
      'paleta(2,:)=paleta(2,:)/k;',...
   ]);
%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','donde=what(''monitor'');[tm,a,g]=loadmonm(fullfile(donde.path,''std_crt''),eye(3));T=val2tri(paleta,[0 1 0],tm,a,g);C=abs(T(1)-T(2))/T(1);title([''C='' num2str(C) ]);');

