HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > TIPS 集

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

文責:遠藤 理平 (2010年12月11日) カテゴリ:TIPS 集(107)

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

フラクタル「シダ」

gnuplotでアニメーション 直接 gif アニメーションを出力すると同様に、パラメータを変化に対するアニメーションを作成します。 今回は、描画する点の数を増やしていきます。

メインルーチン:sida_main.plt

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

set size ratio 2
set xrange [0.25:0.8]
set xtics 0.2,0.1

set terminal gif animate optimize size 600, 800
set output "sida.gif"
#set terminal gif optimize size 600, 800       #<------各ステップごとにgifファイルを書き出す際に使用
set tics font 'Times,18'

DATA = "sida.data"
set print DATA
m = 0

load "sida_sub1.plt"

サブルーチン1:sida_sub1.plt

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

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

m_max = 300 * n

call "sida_sub2.plt" "0.5" "0.0"

#outfile(n) = sprintf("f/%d.gif",n+1000)  #<------各ステップごとにgifファイルを書き出す際に使用
#set output outfile(n)                    #<------各ステップごとにgifファイルを書き出す際に使用

title(n) =  sprintf("N = %d",m_max) #タイトル名
unset label
set label title(n)  font 'Times,20'  at 0.27 , 0.96
plot DATA with dots notitle linecolor rgbcolor "#22bb22"


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

サブルーチン2:tree_sub2.plt

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

if(m==0) x = $0; y = $1
m=m+1

r=rand(0)
if(r <= 0.02) xn=0.5; yn=0.27*y
if((0.02 < r) && (r <= 0.17)) xn = -0.139*x + 0.263*y + 0.57;  yn = 0.246*x + 0.224*y - 0.036
if((0.17 < r) && (r <= 0.3))  xn = 0.17*x - 0.215*y + 0.408 ;  yn = 0.222*x + 0.176*y + 0.0893
if(0.3<r)                     xn = 0.781*x + 0.034*y + 0.1075; yn = -0.032*x + 0.739*y + 0.27;

print x, y
x=xn; y=yn

if(m<m_max) reread


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

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




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました