Home > リソース > Scilabでアニメーション作成 > 9. 運動する直方体のアニメーション〜準備
Scilabでアニメーション作成

9. 運動する直方体のアニメーション〜準備

剛体のアニメーションも、第2、第3項で説明した点のアニメーションと原理は全く同じです。剛体の場合、描画と消去の対象が3次元形状になるという違いがあるだけです。

例として、運動する直方体のアニメーションを作成してみましょう。これは、第6項で作成した一般配置の直方体を描画するスクリプトを基にして行えます。

まず、スクリプトを簡潔にするために、コード1に示すような、直方体を plot3d で描画するためのパッチデータを返す関数を定義します。

calcBlock.sci
function patches = calcBlock(r, R, Lx, Ly, Lz)
// Return patches data of a block geometry

// Vertices
vertices_0 = [
    0,   0,  0;  // #1
    Lx,  0,  0;  // #2
    0,  Ly,  0;  // #3
    0,   0, Lz;  // #4
    Lx, Ly,  0;  // #5
    0,  Ly, Lz;  // #6
    Lx,  0, Lz;  // #7
    Lx, Ly, Lz]; // #8

vertices = transver(vertices_0, r, R);

// Faces
faces = [
    1, 2, 5, 3;  // #1
    1, 3, 6, 4;  // #2
    1, 4, 7, 2;  // #3
    4, 7, 8, 6;  // #4
    2, 5, 8, 7;  // #5
    3, 6, 8, 5]; // #6

// Patches
patches = genpat(vertices, faces);

endfunction

コード1: 直方体のパッチデータを返すScilab関数

コード1の calcBlock() 関数を用いれば、第6項の一般配置の直方体を描画するスクリプトを、次のコード2のように簡潔に書き直すことができます。

make_block.sce
// make_block.sce

clear; xdel(winsid());

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

// Reference position
r = [1; 1; 1];

// Reference orientation
R = eulerXYZ(-%pi/3, 0, %pi/6);

// Side lengths
Lx = 0.15;
Ly = 0.05;
Lz = 0.30;

// Patches
patches = calcBlock(r, R, Lx, Ly, Lz);

// Draw patches
h_fig = figure;
h_fig.background = 8;
h_pat = plot3d(patches.x, patches.y, patches.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.8, 0.9, 0.8; 1.3, 1.4, 1.3];
xgrid;
コード4: 直方体を作成するScilabスクリプト
スポンサーリンク