使用polyfit预测物体落在哪里?

时间:2010-05-14 21:37:41

标签: matlab

我有一个以抛物线模式抛出物体的信息。从开始位置到结束的特定间隔共有30张图像。

现在我已经设法提取了所有30张图像中抛出的对象的x,y坐标... 我认为使用polyfit(或者polyval?)可以帮助我预测在前15张图像之后物体会落在哪里...

我只是想知道,polyfit如何与我拥有的30 x,y坐标一起使用?

(我有一个循环从垫子文件中提取每个图像一次一行直到30 ..然后绘制该图像..所以我应该在绘图之前/之后的同一循环中使用polyfit ??? / p>

任何想法??

谢谢!

修改

这是我目前的代码:

load objects.mat
for G=1:30
    x=objects(G,1);
    y=objects(G,2);
    plot(x,y,'0')
    hold on
    drawnow()
end

1 个答案:

答案 0 :(得分:3)

以下是使用函数POLYFIT将抛物线拟合到xy,函数POLYVAL以评估一组多项式的一种方法。 x值和SET命令修改绘图对象而不必重新绘制它们:

load objects.mat   %# Load the data
x = objects(:,1);  %# Get the x data
y = objects(:,2);  %# Get the y data
N = numel(x);      %# The number of points
hPoints = plot(x(1),y(1),'r*');       %# Plot first point as a red asterisk,
                                      %#   saving the handle
hold on;                              %# Add to the plot
hFitLine = plot(x,nan(N,1),'b-');     %# Initialize the plot for the fit line,
                                      %#   saving the handle and using NaN for
                                      %#   the y values so it doesn't appear yet
axis([min(x) max(x) min(y) max(y)]);  %# Set the axis limits
for k = 1:N
  set(hPoints,'XData',x(1:k),'YData',y(1:k));  %# Update the points
  if k >= 15                       %# Plot a fit line starting at k = 15
    p = polyfit(x(1:k),y(1:k),2);  %# Fit a parabola with points 1 through k
    yFit = polyval(p,x);           %# Evaluate the polynomial at all x
    set(hFitLine,'YData',yFit);    %# Update the fit line
  end
  drawnow();    %# Force the plot to refresh
  pause(0.25);  %# Pause for a quarter second
end

关于MATLAB图形的说明......

无论何时发出绘图命令(如PLOT),都会在当前轴中创建一个或多个handle graphics objects。这些对象具有“句柄”或数字标识符,用作绘图对象的引用,可用于访问和修改对象的属性。 GETSET命令可用于分别使用句柄访问和修改图形对象的属性,这些句柄通常作为绘图命令的输出参数返回。

每种类型的句柄图形对象都有一组属性。 PLOT命令创建一个lineseries对象,其中包含许多可以找到here的属性。例如,'XData' property存储绘制点的x值,而'YData' property存储y值。您可以通过修改lineseries对象的这些属性来更改绘制点的x和y位置。

在MATLAB中制作动画图形时,首先创建对象并在动画期间更新其属性通常更有效,而不是创建,删除,然后在动画期间重新创建对象。在上面的代码中,在动画循环之前创建各个点的绘图对象,并且该对象的句柄存储在变量hPoints中。抛物线的绘图对象也在动画循环之前创建,其句柄存储在hFitLine中。然后,在循环中使用SET命令来修改这两个绘图对象。

由于抛物线最初是不可见的,因此将初始y值设置为全NaN会导致不渲染线(尽管对象仍然存在)。您也可以通过将'Visible' property设置为'off'来使该行不可见。