clc;clear all;close all;
cloudd=load('40-0.01- Cloud.txt','-ascii');%稀释的少,密度高
B=[cloudd];
m_1=B(:,1);
m_2=B(:,2);m_3=B(:,3);
X_=mean(m_1);Y_=mean(m_2);Z_=mean(m_3);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
l=-89
k=1
while l<80;
ak=cot(l)
E=ak;F=1;G=0;
j=1;
for i=1:size(B',2)
if (abs(E*((m_1(i))-X_)+F*((m_2(i))-Y_)+G*((m_3(i))-Z_))/(sqrt(E^2+F^2+G^2)))<0.001%厚`度
m1_(j,:)=m_1(i,:);
m2_(j,:)=Y_;
m3_(j,:)=m_3(i,:);
j=j+1;
end
end
for i=1:size(m1_,1)
t=(E*X_+ F*Y_+G*Z_-(E*(m1_(i))+F*(m2_(i))+G*(m3_(i))))/(sqrt(E^2+F^2+G^2));%垂直投影
m11_(i,:)=m1_(i)+E*t;
m22_(i,:)=m2_(i)+F*t;
m33_(i,:)=m3_(i)+G*t;
end
f2=mean(m1_);
for i=1:size(m1_,1)
f3(i,1)=f2;
end
rr=m1_-f3;
nn=m3_;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x=[rr,nn];
p0=[0.005 0.005 0.005 0.005 0.005 0.005];
warning off
F=@(p,x)p(1)*x(:,1).^2+p(2)*x(:,1).*x(:,2)+p(3)*x(:,2).^2+p(4)*x(:,1)+p(5)*x(:,2)+p(6);
% 拟合系数,最小二乘方法
p=nlinfit(x,zeros(size(x,1),1),F,p0);
p(1);
p(2);
p(3);
p(4);
p(5);
p(6);
A=p(1)/p(6);
B=p(2)/p(6);
C=p(3)/p(6);
D=p(4)/p(6);
E=p(5)/p(6);
%%椭圆中心
X_center = (B*E-2*C*D)/(4*A*C - B^2);
Y_center = (B*D-2*A*E)/(4*A*C - B^2);
fprintf(' X_center=%g, Y_center=%g\n',X_center,Y_center);
%%长短轴
b= sqrt((2*A*(X_center^2)+2*C*(Y_center^2)+2*B*X_center*Y_center-2)/(A+C+sqrt(((A-C)^2+B^2))))
a= sqrt((2*A*(X_center^2)+2*C*(Y_center^2)+2*B*X_center*Y_center-2)/(A+C-sqrt(((A-C)^2+B^2))))
c=sqrt(a^2-b^2)
e=c/a;
w=asin(e)
g=abs(b-a);
T11(k)=g
k=k+1
l=l+10;
end
d = min(T11)
这个循环中的a值与b值,一直输出的是第一次结果的值,循环几次就输出几次第一次计算的结果
就是最后那里的长短轴部分,我奇怪的是他输出了多次最后一个结果,就好像每一次计算的都一样,每次循环结果都是第一个的值
但如果一个一个带入计算,而不是循环,结果就是不一样的,这是为什么
也就是说他确实在循环,但是结果确是第一次计算输出多次