【问题标题】:fix axes for animation修复动画轴
【发布时间】:2015-03-21 16:28:39
【问题描述】:

我正在 matlab 中进行小型模拟。为此,我想创建模拟对象(倒立摆)的动画。不幸的是,轴不断重新缩放。 我什么都试过了。有类似的questions,但我就是无法让它工作。我得到的最好的是下面的代码。我同时得到两个轴,从 -5 缩放到 5 和那些由 matlab 缩放。

%init visualisation
visualisation = figure();
axis([-5 5 -5 5]);
xlim([-5 5]);
ylim([-5 5]);
ax_hand = axes;

for i = 1:N
    k1 = h * feval ( 'RHS', t0, x0, u );
    k2 = h * feval ( 'RHS', t0 + (h/2), x0 + (k1/2), u);
    k3 = h * feval ( 'RHS', t0 + h/2, x0 + k2/2, u);
    k4 = h * feval ( 'RHS', t0 + h, x0 + k3, u);
    x0 = x0 + ( k1 + 2*k2 + 2*k3 + k4 ) / 6;
    t0 = t0 + h;
    % model output
    wi(1:neqn,i+1) = x0';

    % model visualisation
    %plotting cart
    figure(visualisation);
    plot(x0(3), 0, 'ro', 'LineWidth', 3);
    %plotting pendulum
    l = 2;
    %plot(sin(x0(1))*l, cos(x0(1))*l, 'b*' , 'LineWidth', 2);
    % regulator

end;

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    这是一种方法:

    • 做第一个情节(可能是空的,没关系)。处理它,比如h
    • 设置轴限制并包含语句axis manual fo freeze them。
    • 通过h'XData''YData' 属性更新绘图(循环)。

    例子:

    h = plot(NaN, NaN, 'o'); %// empty plot
    axis([0 10 0 5])
    axis manual %// this line freezes the axes
    for n = 1:10
        x = 1:n;
        y = sqrt(x);
        set(h, 'XData', x, 'YData', y)
        pause(.2)
    end
    

    两个图的示例:

    h1 = plot(NaN, NaN, 'bo'); %// empty plot
    hold on
    h2 = plot(NaN, NaN, 'r*'); %// empty plot
    axis([0 10 0 5])
    axis manual %// this line freezes the axes
    for n = 1:10
        x1 = 1:n;
        y1 = sqrt(x1);
        set(h1, 'XData', x1, 'YData', y1)
        x2 = 4.5;
        y2 = n/2-.5;
        set(h2, 'XData', x2, 'YData', y2)
        pause(.2)
    end
    

    【讨论】:

    • 这是一个非常好的解决方案。有没有办法使用这种方法,但对于两个不同的点有不同的设置(颜色等)。在两个集合函数之间使用保持不起作用。目前我做set(visualisation, 'XData', [x0(3), sin(x0(1))*l], 'YData', [0, cos(x0(1))*l]);,但它们当然有相同的颜色,LineWith 等。
    • 谢谢。如果我能给你两个赞成票,我会的。 :)
    • 你好@LuisMendo,你能帮我修改你的代码以获得相同的3D结果吗?我有以下图,即 3D 中两点之间的一条线,这条线通过使用 for 循环改变位置: plot3([0 3*cos(phi)*cos(theta(i))], [0 3* cos(phi)*sin(theta(i))], [0 3*cos(phi)],'-b.','MarkerSize',20)
    • @GennaroArguzzi 我认为除了'XData''YData' 之外,您只需要更新'ZData' 属性。如果这不起作用,我建议你发布一个新问题,清楚地解释你想要什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 2015-06-10
    • 2017-07-27
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多