HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > 仮想物理実験室

gnuplotでアニメーション
gnuplotでフラクタル(Tree)

文責:遠藤 理平 (2010年12月 7日) カテゴリ:TIPS 集(95)仮想物理実験室(247)

gnuplot では「call」関数を使用することで引数を与えて再帰的にファイルを読み込むことができます。 これはフラクタルを描画する際に重宝します。 基本アルゴリズムは下記の図書を参考にしました。
■参考図書:gnuplotの精義―フリーの高機能グラフ作成ツールを使いこなす [単行本]

フラクタル「Tree」

gnuplotでアニメーション 直接 gif アニメーションを出力すると同様に、パラメータを変化に対するアニメーションを作成します。 今回は、フラクタルの世代を変化させます。

メインルーチン:tree_main.plt

今回はメインルーチンの他、gifアニメーションと再帰関数用のサブルーチンが2つ必要になります。

set xrange [-1.5:1.5]
set yrange [0:3.5]
set nokey
set terminal gif animate optimize size 600, 480
set output "tree.gif"
set tics font 'Times,18'
max_n = 30

n=0
load "tree_sub1.plt"

サブルーチン1:tree_sub1.plt

gifアニメーションを作成するため、変数「n」を変化させてプロットします。

if (exist("n")==0 || n<0) n=0 #変数の初期化

DATA = "tree.data"
set print DATA
set angle degree
ratio = 0.7
dang  = 15
min_len = n<=max_n/2 ? ratio**n : ratio**(max_n-n)

call "tree_sub2.plt" "0" "0" "90" "1"  

title(n) =   n<=max_n/2 ? sprintf("n = %d",n) : sprintf("n = %d", max_n-n)  #タイトル名
unset label 
set label title(n)  font 'Times,20'  at -1.4 , 3.3
plot DATA with line linecolor rgbcolor "blue"

if (n<max_n)  n=n+1; reread

サブルーチン2:tree_sub2.plt

フラクタルの再帰関数を定義します。
下記アルゴリズムは参考図書を利用させていただきました。

print $0, $1
print $0 + $3*cos($2), $1 + $3*sin($2)
print "\n"

if(min_len < $3) call "tree_sub2.plt" \
  "$0 + $3*cos($2)" "$1 + $3*sin($2)" "$2+dang" "ratio*$3"
if(min_len < $3) call "tree_sub2.plt" \
  "$0 + $3*cos($2)" "$1 + $3*sin($2)" "$2-dang" "ratio*$3"

その他

上記アルゴリズムの「dang」を「0~30」まで変化させた場合のアニメーション。



▲このページのトップNPO法人 natural science トップ

関連記事

TIPS 集

仮想物理実験室







▲このページのトップNPO法人 natural science トップ