我有一组描述物体轨迹的坐标点集(x,y),我想使用GNU Octave来实现轨迹动画。
数据集比较大,所以如果我想让动画更加流畅,就不能在每次迭代时都重新绘制整个图形。那么,有哪些函数可以让我“更新”图像而不是重新绘制它呢?
此外,我还有另一组(vx,vy)点集,它们描述了物体的速度。我希望我的动态轨迹考虑到速度因素。我应该使用哪个函数使程序睡眠几毫秒,以使轨迹与物体以相同的速度运动?
(我已经知道Octave有诸如comet之类的函数,但我需要编写自己的动画程序。)
编辑:以下是我到目前为止所拥有的内容。我原本以为这会运行得太快并需要使用pause,但它仍然相当缓慢(x和y具有10001个元素)。
数据集比较大,所以如果我想让动画更加流畅,就不能在每次迭代时都重新绘制整个图形。那么,有哪些函数可以让我“更新”图像而不是重新绘制它呢?
此外,我还有另一组(vx,vy)点集,它们描述了物体的速度。我希望我的动态轨迹考虑到速度因素。我应该使用哪个函数使程序睡眠几毫秒,以使轨迹与物体以相同的速度运动?
(我已经知道Octave有诸如comet之类的函数,但我需要编写自己的动画程序。)
编辑:以下是我到目前为止所拥有的内容。我原本以为这会运行得太快并需要使用pause,但它仍然相当缓慢(x和y具有10001个元素)。
bounds = [min(x) max(x) min(y) max(y)];
axis(bounds);
hold on
for k = 2 : length(x)
plot(x(k-1:k), y(k-1:k));
drawnow("expose");
end
hold off
pause
很有用,但set
不是我想要的。我希望轨迹的痕迹保留下来。我想知道是否有一些函数可以更新绘图的轨迹,而不是重新绘制单个点。 - Paul Mantaset(h, 'YData', new_ydata)
命令;它可以更新一个点或整条线。我编写了我的示例以更新一个点,因为我认为那是您想要的——一个点在移动。 - andyrasplot
命令会创建一个全新的图形,重新绘制坐标轴等。而当你使用set
命令时,它只会更改你已经创建的图形的某个部分。因此,当你调用set(h, 'YData', ydata)
时,它只会更改图形对象h
中的y数据,并重新绘制你想要更改的唯一部分——线条。 - andyrascomet
和comet3
运行速度更快。我在这个SO问题中详细阐述了(并标明了出处!) - Assad Ebrahim