L1 — L6分别是六对FP腔的距离,coreside_diameter.txt存储L1~L6,放在Uniformity_Test文件夹当中
十二边形所对应的六对FP腔
ax & y分别为所对应的坐标位置
椭圆的一般方程式为:Ax^2 + 2Bxy + Cy^2 + Dx + Ey + F = 0
参考:来自于维基百科的椭圆方程介绍
clear; clc; close all;
load('coreside_diameter.txt');
date = coreside_diameter(:,2);
L1 = date(1); L2 = date(2); L3 = date(3);
L4 = date(4); L5 = date(5); L6 = date(6);
ax = [L1*sin(pi/6)/2, 0, -L3*sin(pi/6)/2, -L4*cos(pi/6)/2, -L5/2, -L6*cos(pi/6)/2, -L1*sin(pi/6)/2, 0, L3*sin(pi/6)/2, L4*cos(pi/6)/2, L5/2, L6*cos(pi/6)/2];
y = [L1*cos(pi/6)/2, L2/2, L3*cos(pi/6)/2, L4*cos(pi/3)/2, 0, -L6*cos(pi/3)/2, -L1*cos(pi/6)/2, -L2/2, -L3*cos(pi/6)/2, -L4*cos(pi/3)/2, 0, L6*cos(pi/3)/2];
% 设出圆锥曲线方程
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);
% 离散数据点
for i = 1:length(y)
x(i,1) = ax(i);
x(i,2) = y(i);
end
p0=[1 1 1 1 1 1];
% warning off
% 拟合系数,最小二乘方法
p=nlinfit(x,zeros(size(x,1),1),F,p0);
plot(x(:,1),x(:,2),'ro');
hold on;
xmin=min(x(:,1));
xmax=max(x(:,1));
ymin=min(x(:,2));
ymax=max(x(:,2));
% 作图
ezplot(@(x,y)F(p,[x,y]),[-1+xmin,1+xmax,-1+ymin,1+ymax]);
title('曲线拟合');
legend('样本点','拟合曲线')
如果ellipse的形心在原点那么它的方程式可以简化为:Ax^2 + 2Bxy + Cy^2 + f = 0
今后课题中主要使用以下代码
clear; clc; close all;
load('coreside_diameter.txt');
date = coreside_diameter(:,2);
L1 = date(1); L2 = date(2); L3 = date(3);
L4 = date(4); L5 = date(5); L6 = date(6);
ax = [L1*sin(pi/6)/2, 0, -L3*sin(pi/6)/2, -L4*cos(pi/6)/2, -L5/2, -L6*cos(pi/6)/2, -L1*sin(pi/6)/2, 0, L3*sin(pi/6)/2, L4*cos(pi/6)/2, L5/2, L6*cos(pi/6)/2];
y = [L1*cos(pi/6)/2, L2/2, L3*cos(pi/6)/2, L4*cos(pi/3)/2, 0, -L6*cos(pi/3)/2, -L1*cos(pi/6)/2, -L2/2, -L3*cos(pi/6)/2, -L4*cos(pi/3)/2, 0, L6*cos(pi/3)/2];
% 设出圆锥曲线方程
F=@(p,x)p(1)*x(:,1).^2+p(2)*x(:,1).*x(:,2)+p(3)*x(:,2).^2+p(4);
% 离散数据点
for i = 1:length(y)
x(i,1) = ax(i);
x(i,2) = y(i);
end
p0=[1 1 1 1];
% warning off
% 拟合系数,最小二乘方法
p=nlinfit(x,zeros(size(x,1),1),F,p0);
plot(x(:,1),x(:,2),'ro');
hold on;
xmin=min(x(:,1));
xmax=max(x(:,1));
ymin=min(x(:,2));
ymax=max(x(:,2));
% 作图
ezplot(@(x,y)F(p,[x,y]),[-1+xmin,1+xmax,-1+ymin,1+ymax]);
title('曲线拟合');
legend('样本点','拟合曲线')