SCILAB动画,规模不断变化

时间:2018-04-21 17:42:11

标签: scilab

 F=zeros(3,3);
F(1,:)=[0.3,0.35,0.2];
T=diag([0.2,0.5],-1);
P=(F+T)
X=[100;100;57]


    plot2d([1,2,3],X)
    for i=1:100
            drawlater();
            X=P*X;
            clf;
            plot2d([1,2,3],X)
            drawnow();
        end
scilab不断重新调整我的动画。如何避免重新缩放? 提前谢谢!

3 个答案:

答案 0 :(得分:1)

除了将“ data_bounds”设置为另一个答案中已经给出的设置之外,您可能还必须将“ tight_limits”设置为“ on”。

如果tight_limits为“ off”,则不必将轴限制设置为由data_bounds指定的值,而是可以将其设置为稍大的范围,以获得漂亮的标签。

答案 1 :(得分:0)

每次调用clf()时,当前数字都会被清除,因此,调用plot2d()时没有设置数据边界。因此,对于每对clf() plot()设置新边界,并重新缩放图形。

如果您需要清除图形和固定边界,则必须在每个循环中使用data_bound设置轴属性set()

set(gca(), 'data_bound', [x_min, y_min; x_max, y_max]);

我注意到你的动画在X中从1到3,在Y中从0到100,所以你可以像这样编写你的循环:

plot2d([1,2,3],X)
for i=1:100
    drawlater();
    X=P*X;
    clf();
    plot2d([1,2,3],X)
    set(gca(), 'data_bounds', [1, 0; 3 100]);
    drawnow();
end

我也注意到结果并不好,但这是你正在生成的数据和你想要的固定比例的问题,而不是动画“技术”本身。

答案 2 :(得分:0)

我建议采用这种动画制作方式,即使用data实体的Polyline字段:

clf
plot2d([1,2,3],X)
h = gce().children
gca().data_bounds(3:4)=[1e-30,100];
gca().log_flags="nln"

for i=1:100
    X=P*X;
    h.data(:,2) = X;
    sleep(100)
end

没有sleep(100)的动画太快了...