Назад к материалам

Основа анимации в Scilab. Имитация движения объекта

Каким образом можно создавать анимационные Картинки в Scilab

Основа анимации в Scilab. Имитация движения объекта

Каким образом можно создавать анимационные Картинки в Scilab

Рассмотрим простой случай создания имитации движения в Scilab, чтобы продемонстрировать основную идею реализации.

Итак, будем работать с точкой, которая движется по оси . В каждый момент времени у этой точки задаётся положение . Так как по оси положение у объекта постоянное, оно опущено в иллюстрации ниже:

Положение точки в дискретные моменты врмени
Положение точки в дискретные моменты врмени

Положение точки в дискретные моменты врмени.

Создание анимации движения этого кружочка из точки в точку будет происходить следующим образом:
Рисуем точку в момент времени с координатами
Стираем точку с координатами
Инкремируем момент времени
Рисуем точку в момент времени с координатами

Цикл передвижения точки вдоль горизонтальной оси
Цикл передвижения точки вдоль горизонтальной оси

Цикл передвижения точки вдоль горизонтальной оси.

Иллюстрация анимации движения точки
Иллюстрация анимации движения точки

Программная реализация

Сформируем массивы данных: временной промежуток и соответствующее положение точки на оси .

// входные данные
t = 0:1e-2:1;     // временной отрезок
x = sin(2*%pi*t); // положение точки на оси х

время и координата.

Добавим начальную точку на графике

// Рисуем точку в первый момент времени
plot(x(1), 0);

Точка в первый момент времени.

Далее заведём переменные для координатной сетки, сцены, на которой происходит анимаци и самого анимированного элемента:

point_axes  = gca(); //сетка координат
point_scene = gce(); //объекты на сетке
point       = point_scene.children; //наша точка

Зарезервируем переменные для создания анимации

Несколько стилизуем наши элементы: добавим подпись оси и заголовок сетки координат, а также увеличим размер точки и её покрасим её в синий цвет:

point_axes.data_bounds = [-1.5, -1.5; 1.5, 1.5]; //границы координатных осей
point_axes.grid = [1,1];          //вспомогательная разметка
point_axes.x_label.text = "x";    //подпись горизонтальной оси
point_axes.x_label.font_size = 4; //размер шрифта подписи по оси х
point_axes.title.text = "Движущаяся точка" //Заголовок 
point_axes.title.font_size = 4;   //размер шрифта заголовка графика

point.mark_style = 0;  //тип соединительных элементов - кружок 
point.mark_size  = 20; //размер соединительных элементов  
point.mark_foreground = color(0,0,255); //цвет кружка в формате rgb - синий

Стилизуем изображаемые данные на графике в Scilab

А далее - организуем цикл по всем значениям массива, отвечающего за положение токи на плоскости и итерационно будем рисовать и стирать точку в каждый из моментов времени:

// цикл для анимации
for i = 1:length(x)
    drawlater();
    point.data = [x(i), 0];
    drawnow();
end

Цикл для создания анимации

В итоге, программа, реализующая передвижение точки с анимацией движения будет выглядеть следующим образом:

clc; clf();

// входные данные
t = 0:1e-2:1;     // временной отрезок
x = sin(2*%pi*t); // положение точки на оси х

// Рисуем точку в первый момент времени
plot(x(1), 0);

point_axes  = gca(); //сетка координат
point_scene = gce(); //объекты на сетке
point       = point_scene.children; //наша точка

point_axes.data_bounds = [-1.5, -1.5; 1.5, 1.5]; //границы координатных осей
point_axes.grid = [1,1];          //вспомогательная разметка
point_axes.x_label.text = "x";    //подпись горизонтальной оси
point_axes.x_label.font_size = 4; //размер шрифта подписи по оси х
point_axes.title.text = "Движущаяся точка" //Заголовок 
point_axes.title.font_size = 4;   //размер шрифта заголовка графика

point.mark_style = 0;  //тип соединительных элементов - кружок 
point.mark_size  = 20; //размер соединительных элементов  
point.mark_foreground = color(0,0,255); //цвет кружка в формате rgb - синий

// цикл для анимации
for i = 1:length(x)
    drawlater();
    point.data = [x(i), 0];
    drawnow();
end

Создание анимации в Scilab