2016-10-31 27 views
1

目前我有一组二维点,如下所示。 Random 2D points拟合一组二维点的Matlab曲线

我需要获取点的拟合曲线来确定对象的形状。

Matlab提供spline fitting function。我必须将它应用到一组点上。但是,我获得的结果如下所示。 spline fit

  xx = linspace(-10,10,20); 
     pp2 = splinefit(PV(:,1),PV(:,2),8,5); 
     y2 = ppval(pp2,xx); 

     plot(x,y,'.',xx,y2), grid on 
     axis([-10 10 -10 10]); 

PV是数据点。我不确定问题出在哪里。

回答

0

您正在尝试适合PV(:,1) = f(PV(:,2)),即装配直接y=f(x)。但是从您的观点可以看出,对于某些x(约x=0x=-15)的某些值,存在y的多个值。因此,对于此处的任何函数f(.),您都不能在数学上适合y=f(x)

你可以做的是使用辅助参数t适合参数曲线:

t = linspace(0, 1, size(PV,1)); 
ppx = splinefit(PV(:,1),t,8,5); % x = f_x(t) 
ppy = splinefit(PV(:,2),t,8,5); % y = f_y(t) 

现在你可以绘制曲线(f_x(t), f_y(t))

tt = linspace(0, 1, 50); 
x2 = ppval(ppx, tt); 
y2 = ppval(ppy, tt); 
plot(PV(:,1), PV(:,2), '.', x2, y2); grid on; 
axis([-10 10 -10 10]); 

注意
该装配方案是基于假设PV中的点数是订购的:也就是说,曲线应该从PV(1,:)PV(2,:),然后到PV(3,:)等等。如果情况并非如此(例如,PV(1,:)的x值为〜-10,PV(2,:)的x值为〜0,并且PV(3,:)跳回到x〜-10),那么你就是在深层&#t。

+0

如果点没有排序,怎么能达到相同的结果? – Sade

+0

@Sade深深的我已经说过了。你需要订购它们,否则配件是没有意义的。考虑一下[连接点](https://en.wikipedia.org/wiki/Connect_the_dots),其中有人随意随意打乱了这些点的数字......你不会得到期望的输出... – Shai