用matlab怎么在三维坐标系中拟合球面公式!急急急!!!
各位大侠,知道三维坐标系内的一系列的点的坐标,也知道这些点的分布是一个球形,怎么用matlab把这个球形公式拟合出来?最好是有一段编号的程序,谢谢!...
各位大侠,知道三维坐标系内的一系列的点的坐标,也知道这些点的分布是一个球形,怎么用matlab把这个球形公式拟合出来?最好是有一段编号的程序,谢谢!
展开
1个回答
展开全部
function [a,resnorm] = sphere_fit(a0,data)
% 对数据进行球拟合,a0 是初始的球心和半径
% data 是 x、y、z 的数据矩阵,第一行是 x,第二行是 y,第三行是 z
% a 是拟合后球的球心和半径,a(1) 是 x 坐标,a(2) 是 y 坐标,a(3) 是 z 坐标,a(4) 是半径
% by GoKu
zdata=data(3,:);
[a,resnorm] = lsqcurvefit(@sphere_fit_fun,a0,data,zdata);
function h=sphere_fit_fun(a,data)
% 传给主函数的子函数
xdata=data(1,:);
ydata=data(2,:);
zdata=data(3,:);
flagh(1:length(xdata))=0;
flagz(1:length(zdata))=0;
flagh(find(((xdata-a(1)).^2+(ydata-a(2)).^2)<a(4)^2))=1;
flagz(find(zdata>a(3)))=1;
to_h=flagh.*sqrt(abs(a(4)^2-(xdata-a(1)).^2-(ydata-a(2)).^2));
h=a(3)-to_h+2*flagz.*to_h;
% h 是数据点在球上对应的 z 坐标
end
费了好大劲才找到的程序代码,楼主加分啊,代码应该没问题,对程序的理解,你得自己捉摸了,因为这几天我也在研究这个问题,有几点我也没弄懂。
% 对数据进行球拟合,a0 是初始的球心和半径
% data 是 x、y、z 的数据矩阵,第一行是 x,第二行是 y,第三行是 z
% a 是拟合后球的球心和半径,a(1) 是 x 坐标,a(2) 是 y 坐标,a(3) 是 z 坐标,a(4) 是半径
% by GoKu
zdata=data(3,:);
[a,resnorm] = lsqcurvefit(@sphere_fit_fun,a0,data,zdata);
function h=sphere_fit_fun(a,data)
% 传给主函数的子函数
xdata=data(1,:);
ydata=data(2,:);
zdata=data(3,:);
flagh(1:length(xdata))=0;
flagz(1:length(zdata))=0;
flagh(find(((xdata-a(1)).^2+(ydata-a(2)).^2)<a(4)^2))=1;
flagz(find(zdata>a(3)))=1;
to_h=flagh.*sqrt(abs(a(4)^2-(xdata-a(1)).^2-(ydata-a(2)).^2));
h=a(3)-to_h+2*flagz.*to_h;
% h 是数据点在球上对应的 z 坐标
end
费了好大劲才找到的程序代码,楼主加分啊,代码应该没问题,对程序的理解,你得自己捉摸了,因为这几天我也在研究这个问题,有几点我也没弄懂。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询