【问题标题】:Animate trajectory using Octave使用 Octave 动画轨迹
【发布时间】:2012-09-21 04:21:59
【问题描述】:

我有一组描述对象轨迹的(x,y) 坐标。我想使用 GNU Octave 为这条轨迹制作动画。

数据集非常大,所以如果我希望动画流畅,我将无法在每次迭代时重新绘制整个绘图。有哪些功能可以让我“更新”绘图而不是重绘它?

另外,我还有一组(vx,vy) 点,用于描述物体的速度。我希望我的动画轨迹考虑到速度。我应该使用什么函数让程序休眠几毫秒以使轨迹以与对象相同的速度进行动画处理?

(我已经知道Octave有comet之类的功能,但我需要自己写动画师。)


编辑:这是我到目前为止所拥有的。我预计它会运行得太快,需要我使用 pause,但它仍然很慢(xy 有 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

【问题讨论】:

    标签: animation plot octave


    【解决方案1】:

    您可以使用set 命令仅更改某个绘图对象hXDataYData 数据:

    h = plot(my_xdata(0),my_ydata(0))
    for i_=1:length(my_xdata)
        set(h, 'YData', my_ydata(i_))
        set(h, 'XData', my_xdata(i_))
        pause(sqrt(vx(i_)^2+vy(i_)^2))
    end
    

    pause(x) 命令暂停x 秒,可以小于 1。

    【讨论】:

    • 谢谢,pause 很有用,但set 不是我想要的。我希望留下轨迹的痕迹。我想知道是否有一些函数可以更新绘图的轨迹,而不是重绘一个点。
    • 我想我不清楚你想要制作什么动画。您想绘制一条线(轨迹)并为沿该线移动的对象设置动画吗?是否要更新线路本身?
    • 然后你可以使用同样的set(h, 'YData', new_ydata)命令;它可以更新一个点或整条线。我写了我的例子来更新一个点,因为我认为这就是你想要的——一个点移动。
    • 这不是和重复调用plot一样吗?
    • 不完全。 plot 命令创建一个全新的绘图,重新绘制轴等。当您使用 set 命令时,它只会更改您已经制作的绘图的一部分。因此,当您调用 set(h, 'YData', ydata) 时,它只会更改绘图对象 h 中的 y 数据,并仅重绘您想要更改的唯一部分的线。
    【解决方案2】:

    我认为您正在寻找“保持”命令。持有该图将所有以前的数据保留在该图上,并将新数据添加到顶部。

    【讨论】:

    • hold 不允许删除绘图上的先前数据。当您为图表制作动画时,您通常希望添加一些数据,以及删除一些其他数据。 hold 一般用于在一张图上绘制多个数据系列。
    猜你喜欢
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多