% CHANGEBASIS.M
% Este programa muestra graficamente el cambio de coordenadas de
% un sistema de referencia a otro
%
% La idea es representar a un punto P mediante un sistema de referencia
% generado por los puntos {P_0, P_1, P_2}. Para luego, observar al mismo
% punto pero ahora desde un sistema de referencia generado por {Q_0,Q_1,Q_2}
% Una vez logrado esto, poder entoces darle un significado grafico al cambio
% de coordenadas (muchas veces señalado como un cambio de base) entre esos
% dos sistemas de referencia.
%
%
% Copyright (c) Geometria Analitica II, 2005-II. Grupo: 
%               Facultad de Ciencias - UNAM
%               Marzo de 2005
%
clear all;
close all;

%
% Definimos las propiedades de las ventanas donde desplegaremos la informacion
% de la transformacion 1
%
trans1_fig=figure(...
   'Name','Sistema de referencia 1',...
   'NumberTitle','Off',...
   'Visible','off', ...
   'DoubleBuffer','on', ...
   'BackingStore','off',...
   'Units','normalized',...
   'Position',[0.01 .55 .38 .38],...
   'Color',[.8 .8 .8]);      
  axes( ... 
   'HandleVisibility','on', ...
   'Visible','on', ... 
   'DrawMode','fast', ...
   'Color','none');
%
% Definimos las propiedades de las ventanas donde desplegaremos la informacion
% de la transformacion 2
%
trans2_fig=figure(...
   'Name','Sistema de referencia 2',...
   'NumberTitle','Off',...
   'Visible','off', ...
   'DoubleBuffer','on', ...
   'BackingStore','off',...
   'Units','normalized',...
   'Position',[0.51 .55 .38 .38],...
   'Color',[.8 .8 .8]);      
  axes( ... 
   'HandleVisibility','on', ...
   'Visible','on', ... 
   'DrawMode','fast', ...
   'Color','none');
%
% Definimos las propiedades de las ventanas donde desplegaremos la informacion
% de una transformacion en otra
%
trans3_fig=figure(...
   'Name','Trasnformacion entre el espacio 1 y 2',...
   'NumberTitle','Off',...
   'Visible','off', ...
   'DoubleBuffer','on', ...
   'BackingStore','off',...
   'Units','normalized',...
   'Position',[0.01 .05 .38 .38],...
   'Color',[.8 .8 .8]);      
  axes( ... 
   'HandleVisibility','on', ...
   'Visible','on', ... 
   'DrawMode','fast', ...
   'Color','none');

%
% * Puntos que definen al primer sistema de referencia
%
P_0 = [ 2; 1];
P_1 = [ 2+1/sqrt(2); 1+1/sqrt(2)]; 
P_2 = [ 2-1/sqrt(2); 1+1/sqrt(2)];
%
% * Vectores 'base' del primer sistema
%
v_1 = P_1 - P_0;
v_2 = P_2 - P_0;
%
% * Puntos que definen al segundo sistema de referencia
%
Q_0 = [-3;2];
Q_1 = [-4;2];
Q_2 = [-3;1];
%
% * Vectores 'base' del segundo sistema
%
u_1 = Q_1 - Q_0;
u_2 = Q_2 - Q_0;
%
% Generamos una 'malla' en el espacio de referencia (el canonico)
%
m=8; n=10;
alpha=linspace(-1,1,m);
beta=linspace(-1,1,n);
%
% * Construccion del primer sistema de referencia
%   en base al canonico dados por e_1, e_2
%
% OP = OP_0 + P_0P = OP_0 + alpha v_1 + beta v_2
%
%  P = Av + b
%
%
A = [v_1 v_2],                  % Definimos la matriz de transformacion

set(trans1_fig,'Visible','on'); % Activamos la ventana de despliegue grafico
axis([-4 4 -4 4]);
hold on;
for i=1:m,
   for j=1:n,
      v=[alpha(i); beta(j)];
      P = A*v + P_0;
     plot(P(1),P(2),'.');
   end
end
%     plot([P_0(1) P_1(1)],[P_0(2),P_1(2)],'r');
hold off

axis square;
grid; %drawnow;
%
% * Construccion del segundo sistema de referencia
%   en base al canonico dados por e_1, e_2
%
% OQ = OQ_0 + Q_0P = OQ_0 + alpha u_1 + beta u_2
%
%  P = Bu + b
%
%  
B = [u_1 u_2],                     % Definimos la matriz de transformacion
set(trans2_fig,'Visible','on');    % Activamos la ventana de despliegue grafico
axis([-4 4 -4 4]);
hold on
for i=1:m,
   for j=1:n,
      u=[alpha(i); beta(j)];
      Q = B*u + Q_0;               % Evaluamos el punto en cuestion
      plot(Q(1),Q(2),'.');
   end
end

hold off 
axis square;
grid; %drawnow;
%
% * Ejercicio....
%   1. Indique como calcular, en Matlab, el cambio de coordenadas
%      del sistema u hacia v, expreselo en forma matricial, la inversa de A se calcula
%      usando inv(A)
%    Use los puntos que determinan un sistema de referencia
%    tratados en clase. Experimente con distinto grosor de la malla (el espacio de las alphas y betas)
%
%   2. Grafique la transformacion del espacio de referencia 1 a 2
%      Active la ventana trans3_fig y ahí grafique la transformacion del 
%      sistema 1 a dos
%