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

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

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

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

Создание анимации движения этого кружочка из точки \((x_i,y_i)\) в точку \((x_{i+1},y_{i+1})\) будет происходить следующим образом:
Рисуем точку в момент времени \(t_i\) с координатами \((x_{i},y_{i})\)
Стираем точку с координатами \((x_{i},y_{i})\)
Инкремируем момент времени \(t_{i+1}\)
Рисуем точку в момент времени \(t_{i+1}\) с координатами \((x_{i+1},y_{i+1})\)

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

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

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


// входные данные
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

Комментарии

Гость
Ответить
Войдите, чтобы оставить комментарий.
Гость
Ответить
Гость
Ответить
Гость
Ответить
Еще нет комментариев, оставьте первый.