登录论坛

查看完整版本 : 使用polyfit预测对象掉落的位置?


poster
2019-12-10, 20:41
我有一个抛物线状抛物的信息。从开始位置到结束,在特定的时间间隔内总共拍摄了30张图像。

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

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

(我有一个循环从mat文件中一次提取每张图像,直到30 ..然后绘制该图像..因此,在绘制之前/之后,我应该在同一循环中使用polyfit吗?

有任何想法吗 ??

谢谢 !

编辑

这是我当前的代码:

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

回答:

这是制作动画的一种方法,可以使用POLYFIT (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/polyfit.html)函数将抛物线拟合到x和y ,使用POLYVAL (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/polyval.html)函数在一组x值处评估多项式,并使用SET (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/set.html)命令修改绘图对象,而不必重新绘制它们:

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 (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/plot.html) ),都会在当前轴上创建一个或多个手柄图形对象 (http://www.mathworks.com/access/helpdesk/help/techdoc/learn_matlab/f3-15974.html) 。这些对象具有“句柄”或数字标识符,可作为对图形对象的引用,并可用于访问和修改对象的属性。 GET (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/get.html)和SET (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/set.html)命令可用于通过其句柄分别访问和修改图形对象的属性,这些属性通常作为绘图命令的输出参数返回。

每种类型的手柄图形对象都有一组属性。 PLOT (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/plot.html)命令创建一个具有一系列属性的lineseries对象,可以在此处 (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/lineseriesproperties.html)找到。例如, 'XData'属性 (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/lineseriesproperties.html#XData)存储绘制点的x值,而'YData'属性 (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/lineseriesproperties.html#YData)存储y值。您可以通过修改lineseries对象的这些属性来更改绘制点的x和y位置。

在MATLAB中对图形进行动画处理时,通常更有效的方法是先创建对象并在动画过程中更新其属性,而不是在动画过程中创建,删除然后重新创建对象。在上面的代码中,在动画循环之前创建了各个点的绘图对象,并将该对象的句柄存储在变量hPoints 。还在动画循环之前创建了抛物线的hFitLine对象,其句柄存储在hFitLine 。然后,在循环中使用SET (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/set.html)命令修改这两个绘图对象。

由于最初打算使抛物线不可见,因此将初始y值设置为全NaN (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/nan.html)会导致该线无法渲染(尽管该对象仍然存在)。您还可以通过将'Visible'属性设置 (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/lineseriesproperties.html#Visible)为'off'来使该行不'Visible' (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/lineseriesproperties.html#Visible) 。



更多&回答... (https://stackoverflow.com/questions/2837791)