[vout]=ellipsefit(x,y);
z=[vout.Xc;vout.Yc];%椭圆中心坐标
a=vout.A;b=vout.B;alpha=vout.Phi;%长轴,短轴,旋转角度
ind=1:length(x');;
t=alpha; %t为长轴与X轴正方向的夹角
%% 防止在计算反正切的时候分母是0
tmp=x(1,ind)-z(1);
tzeros=find(tmp==0);
tmp(tzeros)=0.01;
th1=atan((x(2,ind)-z(2))./(tmp));
th1(tzeros)=pi/2;
%%
r=sqrt((x(2,ind)-z(2)).^2+(x(1,ind)-z(1)).^2);%拟合点到中心的距离
th=th1-t; %拟合点与中心连线相对长轴的夹角
dR= eliseR(a, b,th)-r ;%距离差
fit1=abs(dR)';
fit=max(fit1)-min(fit1);%拟合度
%%
function R= eliseR(a, b,d)
%a 长轴;b短轴;d 相对长轴的角度
R=a*b./sqrt((a.*sin(d)).^2+(b.*cos(d)).^2);
end
function [varargout]=ellipsefit(x,y)
%-------------------------------------------------------