
function [A,B,C]=LMSCirc2(x,y)
%minimos cuadrados circunferencia calculando la pseudoinversa
% Devuelve los parametros A,B,C de la circunferencia x2+y2+Ax+By+C=0
%que ajusta los puntos con las coord en los vectores x,y
%Ejemplo ejecución:
% I=imread('chaveta01.png');
% imshow(I);
% J=imfill(I,'holes');
% C=edge(J);
% imshow(C);
% [Y,X] = find(C);
% [A,B,C]=LMSCirc(X,Y);
% hold on;
% dibujaCircABC(A,B,C, 'r');

n=length(x);

%------------matriz A------------------------------%
A=ones(n,3); %los pongo a uno porque la tercera columna son todos unos

for i=1:n
    A(i,1)=x(i);
    A(i,2)=y(i);
end

%-----------vector b------------------------------%
b=zeros(n,1);
for i=1:n
    b(i,1)= -x(i)*x(i) - y(i)*y(i);
end


pseudoInv_A= inv(A'*A)*A';
%En matlab puede calcularse simplemente poniendo pseudoInv_A=pinv(A);
x=pseudoInv_A*b;
A=x(1);
B=x(2);
C=x(3);



