フリーウェアでシミュレーション結果アニメーションを作る

gnuplot + perl + imagemagick 編

<< Prev - Index - Next >>

1. 連番ファイルを作る

■ gnuplot は描画結果を画面に表示するだけではなく、画像としてファイルに出力することができます。その際には以下のように terminal (または省略形term) と output を設定します。

gnuplot> set terminal 出力のタイプ [オプション]
gnuplot> set output ファイル名

出力のタイプは gif や png, jpeg など主だった画像フォーマットには対応しています。set term と入力することで、一覧が表示されます。

また、出力先を画面表示に戻すには、Windowsなら set term windows です。UNIX系ではX11やwxt等を用いることになります。

■ 例として、データファイルと出力用フォルダが次のような構造になっているとします。

/somedirectory/SAMPLEDATA/ ここにシミュレーションデータを保存
/somedirectory/IMGSEQUENCE/ ここに連番画像を作る

SAMPLEDATA/Dust001.txt というファイルにある計算結果を IMGSEQUENCE/sequence001.png ファイルにするには以下のようなコマンドになります。

gnuplot> set xrange [-2:2]
gnuplot> set yrange [-2:2]
gnuplot> set size 0.721,1
gnuplot> set term png truecolor size 640, 480
gnuplot> set output "IMGSEQUENCE/sequence001.png"
gnuplot> p "SAMPLEDATA/Dust001.txt" w p pt 1
gnuplot> set output
x軸範囲
y軸範囲
画像の縦横比(正方形の場合)
出力をpng(640x480)に設定する
出力先ファイルを開く
結果を出力する
出力先ファイルを閉じる

■ ここでは出力するファイルタイプ(png)にオプション(truecolor)をつけて設定しています。

映像ファイルは、横のサイズが8の倍数や16の倍数でなければならないことが多いので、320x240や640x480など良く使われる画像サイズに設定するのが無難です。 また、インデックスカラーの画像も読み込めないことが多いので truecolor(RGB24bit) に設定しておきます。

別の例として、gif にするには
set term gif size 640, 480
などとします。(出力ファイルの拡張子を変えるのを忘れずに!)

■ gnuplot ではコマンドを直接入力する以外に、予め作っておいたファイルからコマンドを実行できるので、コマンドを記述したファイル(例: script.plt)を作成しておきます。gnuplot実行中に、ファイルからコマンドを呼び出すためのコマンドは load です。

gnuplot> load "script.plt"
スクリプトを読んで実行する

■ スクリプトを使って連続的に入出力をすれば連番png画像を作れますが、手でスクリプトを作るのは、それはそれであまりにも大変です。 そこで、自動的にそのようなスクリプトを作ってくれるような、別のスクリプトを作って見ましょう。 言語は何でも良いのですが、ここではperlにして見ます。

MakeScript.pl
#! /usr/bin/perl

$input = "SAMPLEDATA/Dust";
$ext = "txt";
$output = "IMGSEQUENCE/sequence";
$datanumber = 5; 

printf "set xrange [-2:2]\r\n";
printf "set yrange [-2:2]\r\n";
printf "set size 0.721,1\r\n"; 
printf "set term png truecolor size 640, 480\r\n";

for ($i = 1;$i <= $datanumber; $i++){
    printf "set output \"$output%.03d.png\"\r\n", $i;
    printf "p \"$input%.03d.$ext\" w p pt 1\r\n", $i;
    printf "set output\r\n";
}

printf "set term windows\r\n";
printf "rep\r\n";
システム内のperlの位置

入力ファイル名の基本部分
入力ファイル拡張子
出力ファイル名の基本部分
データ数

表示の設定部分


pngで出力

ループ
  連番出力ファイルを設定
  連番シミュレーション結果を出力
  出力ファイル閉じる


最後に出力先を画面にする
(UNIX系なら出力先はX11等)
再出力

(この例では、改行記号をwindowsの改行記号である\r\nにしていますが、UNIX系OSでは\nになります。)

■ 以上のようなperlスクリプトを実行すると、以下のような出力をするので > でファイルに出力しておきます。

 
set xrange [-2:2]
set yrange [-2:2]
set size 0.721,1
set term png truecolor size 640,480
set output "IMGSEQUENCE/sequence001.png"
p "SAMPLEDATA/Dust001.txt" w p pt 1
set output
set output "IMGSEQUENCE/sequence002.png"
p "SAMPLEDATA/Dust002.txt" w p pt 1
set output
set output "IMGSEQUENCE/sequence003.png"
p "SAMPLEDATA/Dust003.txt" w p pt 1
set output
set output "IMGSEQUENCE/sequence004.png"
p "SAMPLEDATA/Dust004.txt" w p pt 1
set output
set output "IMGSEQUENCE/sequence005.png"
p "SAMPLEDATA/Dust005.txt" w p pt 1
set output
set term windows
rep

それを(w)gnupolot内から load すれば連番pngファイルが作れます。

$ MakeScript.pl > script.plt
$ gunplot
  G N U P L O T
  Version 4.2 patchlevel 4

...略...

gnuplot > load "script.plt"

ここでは、ファイル整理のため出力先のフォルダ(ディレクトリ)は別にしています。
出力先フォルダ(./IMGSEQUENCE/)はあらかじめ作っておきます。

<< Prev - Index - Next >>
inserted by FC2 system