コード1は、x軸上を運動する点のアニメーションを作成するScilabスクリプトの例です。
// 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)で、点の運動データを作成します。次に(2)で、Figureに初期の点を plot コマンドで描画し、描画された Polyline オブジェクトのハンドルを変数 h_point に取得しておきます。 最後に(3)のループで、Polyline オブジェクトの data プロパティのデータを書き換え、drawnow() でFigureを更新することによりアニメーションが実現します。 これが、Scilabでアニメーションを作成するコードの基本となります。
このスクリプトを実行して得られるアニメーションを動画1に示します。
また、アニメーションのスピードを制御するためには、realtime() が使えます。下のコード2は、コード1と同じく運動する点のアニメーションを作成しますが、ループの中で realtime() を呼び出すことにより、アニメーションのスピードを制御しています。
// 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
realtime() により制御