%
% Este Script genera un punto de la curva de 
% Bezier para un poligono de control capturado
% en pantalla, seguidamente dibuja una coleccion
% de puntos discretos que describen la curva
% 
% Procedimiento:
%               Se sigue el algoritmo De Casteljau
%
%
% Copyright(c) Geometria Analitica II - 2006
%              Facultad de Ciencias - UNAM
%              Profesor: Pablo Barrera
%              Ayudante: Guilmer Gonzalez
%

clear all; close all

%
% * Definimos nuestra ventana de trabajo
%
AjusteLineal_fig=figure(...
   'Name','Ajuste lineal de datos',...
   'NumberTitle','Off',...
   'Visible','off', ...
   'DoubleBuffer','on', ...
   'BackingStore','off',...
   'Units','normalized',...
   'Position',[0.51 .5 .38 .38],...
   'Color',[.8 .8 .8]);      
  axes( ... 
   'HandleVisibility','on', ...
   'Visible','on', ... 
   'DrawMode','fast', ...
   'Color','none');

%
% * Abrimos la ventana de trabajo definimos los ejes
% 
figure(AjusteLineal_fig);
axis([0 10 0 10]); % por comodidad, nuestra area de trabajo es el cuadrado unitario
axis square;
hold on;
title('Construimos puntos dispersos sobre la pantalla')
xlabel('Oprima el click derecho del mouse para fianlizar la captura');
grid;

%
% Capturamos los puntos dispersos
%
%
pto=1;
button=1;
while button==1,
   [P(pto,1),P(pto,2),button]=ginput(1);                     % capturamos un punto
   plot(P(pto,1),P(pto,2),'rO');                             % y lo pintamos en pantalla
   %if pto~=1
   %   plot([P(pto,1),P(pto-1,1)],[P(pto,2),P(pto-1,2)],'k'); % unimos el anterior con el actual
   %end                                                       % para formar el poligono de control
   pto=pto+1;
end

%
% Construccion por paso de la curva de Bezier
%
m=length(P);
title('Oprima un boton del mouse para proceder a calcular')
xlabel('');
T=waitforbuttonpress;
A=ones(m,2);
for i=1:m
    A(i,2)=P(i,1);
    b(i)=P(i,2);
end
C=A'*A;
c=A'*b';
x=C\c;
for i=1:m
    y(i)=x(1)+x(2)*P(i,1);
    x1(i)=P(i,1);
end
plot(x1,y)


%
%








%
% * Last card
%













