SCILAB-анимация, постоянно изменяющаяся шкала

Akanzar спросил: 28 марта 2018 в 04:02 в: 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 постоянно изменяет мою анимацию. Как избежать перемасштабирования? Спасибо заранее!

1 ответ

luispauloml ответил: 28 марта 2018 в 05:29

Каждый раз, когда вы вызываете clf(), текущее значение очищается, поэтому при вызове plot2d() границы данных не устанавливаются. Таким образом, для каждой пары clf() plot() устанавливаются новые границы и график масштабируется.

Если вам нужно, чтобы фигура была четкой, и фиксированные границы, вы должны установить эти оси свойство data_bound, использующее set() в каждом цикле:

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

я заметил, что ваша анимация увеличивается от 1 до 3 в X и от 0 до 100 в Y, так что вы можете написать свой цикл следующим образом:

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

Я также заметил, что результат не очень хороший, но это проблема с данными, которые вы генерируете, и фиксированными масштаб, который вы хотите, а не сама анимация"техника".

PTRK ответил: 30 марта 2018 в 06:06
Поскольку данные сходятся строго к 0+, вы можете использовать логарифмический топор plot2d([1,2,3],X); set(gca(),'log_flags','nl'); set(gca(), 'data_bounds', [1, 1e-30; 3 100]);