Home > リソース > Scilabでアニメーション作成 > 3. 運動する点のアニメーション
Scilabでアニメーション作成

3. 運動する点のアニメーション

コード1は、x軸上を運動する点のアニメーションを作成するScilabスクリプトの例です。

animation_point.sce
// animation_point.sce

clear; xdel(winsid());

// Create motion data -- (1)
t = 0:0.001:1;    // Time data
x = sin(2*%pi*t); // Position data

// Draw initial figure -- (2)
h_fig = figure;
h_fig.background = 8;
h_point = plot(x(1), 0, 'Marker', 'o', 'MarkerSize', 20,..
    'MarkerEdgeColor', 'blue', 'MarkerFaceColor', 'blue');
h_axes = gca();
h_axes.data_bounds = [-1.5, -1.5; 1.5, 1.5];

// Animation Loop -- (3)
for i = 1:length(x)
    drawlater();
    h_point.data = [x(i), 0];
    drawnow();
end
コード1: 運動する点のアニメーションを作成するScilabスクリプト

まず(1)で、点の運動データを作成します。次に(2)で、Figureに初期の点を plot コマンドで描画し、描画された Polyline オブジェクトのハンドルを変数 h_point に取得しておきます。 最後に(3)のループで、Polyline オブジェクトの data プロパティのデータを書き換え、drawnow() でFigureを更新することによりアニメーションが実現します。 これが、Scilabでアニメーションを作成するコードの基本となります。

このスクリプトを実行して得られるアニメーションを動画1に示します。

animation of moving point
動画1: 運動する点のアニメーション

また、アニメーションのスピードを制御するためには、realtime() が使えます。下のコード2は、コード1と同じく運動する点のアニメーションを作成しますが、ループの中で realtime() を呼び出すことにより、アニメーションのスピードを制御しています。

animation_point_with_realtime.sce
// animation_point_with_realtime.sce

clear; xdel(winsid());

// Create motion data -- (1)
t = 0:0.01:1;     // Time data
x = sin(2*%pi*t); // Position data

// Draw initial figure -- (2)
h_fig = figure;
h_fig.background = 8;
h_point = plot(x(1), 0, 'Marker', 'o', 'MarkerSize', 20,..
    'MarkerEdgeColor', 'blue', 'MarkerFaceColor', 'blue');
h_axes = gca();
h_axes.data_bounds = [-1.5, -1.5; 1.5, 1.5];

// Animation Loop -- (3)
realtimeinit(0.1); // set time unit duration, in seconds
realtime(0);       // set current time to 0
for i = 1:length(x)
    drawlater();
    h_point.data = [x(i), 0];
    realtime(i); // wait until i time units (0.1*i seconds)
    drawnow();
end
コード2: 運動する点のアニメーションを作成するScilabスクリプト - アニメーション速度を realtime() により制御
スポンサーリンク