コード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()
により制御