Home > Resources > Making Animation with Scilab > 10. Animation of a moving block - Translational motion
Making Animation with Scilab

10. Animation of a moving block - Translational motion

A Scilab script to make an animation of a block in a translational motion along the x-axis is shown in Code 1. The animation produced by this script is shown in Movie 1.

anim_block_translate.sce
// anim_block_translate.sce

clear; xdel(winsid());

exec('eulerXYZ.sci', -1);
exec('transver.sci', -1);
exec('genpat.sci', -1);
exec('calcBlock.sci', -1);

// Block spec
Lx = 0.15;
Ly = 0.05;
Lz = 0.30;

// Motion data
t = (0:0.001:1)';                        // Time data
position = [0.5*sin(2*%pi*t), 0*t, 0*t]; // Position data
angles = [0*t, 0*t, 0*t];                // Orientation data (XYZ Euler angles)

// Initial patches
r_ini = position(1,:)';
R_ini = eulerXYZ(angles(1,1), angles(1,2), angles(1,3));
patches_ini = calcBlock(r_ini, R_ini, Lx, Ly, Lz);

// Draw initial figure
h_fig = figure;
h_fig.background = 8;
drawlater();
h_pat = plot3d(patches_ini.x, patches_ini.y, patches_ini.z);
h_pat.color_mode = 4;
h_pat.foreground = 1;
h_pat.hiddencolor = 4;

// Axes settings
xlabel("x"); ylabel("y"); zlabel("z");
h_axes = gca();
h_axes.isoview = "on";
h_axes.box = "off";
h_axes.rotation_angles = [63.5, -127];
h_axes.data_bounds = [-0.5, -0.5, -0.5; 0.7, 0.5, 0.5];
xgrid;

// Compute patches at each time
for i = 1:length(t)
    r = position(i,:)';
    R = eulerXYZ(angles(i,1), angles(i,2), angles(i,3));
    patches(i) = calcBlock(r, R, Lx, Ly, Lz);
end

// Animation Loop
for i = 1:length(t)
    drawlater();
    h_pat.data.x = patches(i).x;
    h_pat.data.y = patches(i).y;
    h_pat.data.z = patches(i).z;
    drawnow();
end
Code 1: Scilab script to make an animation of a block in a translational motion

animation of translating block
Movie 1: Animation of a block in a translational motion