我有一个以抛物线模式抛出物体的信息。从开始位置到结束的特定间隔共有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
答案 0 :(得分:3)
以下是使用函数POLYFIT将抛物线拟合到x
和y
,函数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
无论何时发出绘图命令(如PLOT),都会在当前轴中创建一个或多个handle graphics objects。这些对象具有“句柄”或数字标识符,用作绘图对象的引用,可用于访问和修改对象的属性。 GET和SET命令可用于分别使用句柄访问和修改图形对象的属性,这些句柄通常作为绘图命令的输出参数返回。
每种类型的句柄图形对象都有一组属性。 PLOT命令创建一个lineseries
对象,其中包含许多可以找到here的属性。例如,'XData'
property存储绘制点的x值,而'YData'
property存储y值。您可以通过修改lineseries
对象的这些属性来更改绘制点的x和y位置。
在MATLAB中制作动画图形时,首先创建对象并在动画期间更新其属性通常更有效,而不是创建,删除,然后在动画期间重新创建对象。在上面的代码中,在动画循环之前创建各个点的绘图对象,并且该对象的句柄存储在变量hPoints
中。抛物线的绘图对象也在动画循环之前创建,其句柄存储在hFitLine
中。然后,在循环中使用SET命令来修改这两个绘图对象。
由于抛物线最初是不可见的,因此将初始y值设置为全NaN会导致不渲染线(尽管对象仍然存在)。您也可以通过将'Visible'
property设置为'off'
来使该行不可见。