Gnuplot howto oldal - animált ábrák
Animáció képletből
A következő shellből futtatható script
#!/usr/bin/gnuplot t=0 set xrange [0:2*pi] set yrange [-1:1] p cos(t)*sin(x) ; t=t+0.1 p cos(t)*sin(x) ; t=t+0.1 ...minden sora kirajzolás után a görbe időparaméterét lépteti, ezért minden lépésben más görbét látunk. Mindig adjuk meg az értelmezési tartományt és a képhalmazt, különben mókásan rángatózó animációt kapunk, hiszen az autoskálázó (melyre a set autoscale paranccsal kapcsolhatunk vissza) minden görbét másra skálázna. Ha nem olvastuk el ciklusszervezést a scriptek fejezetben, akkor kénytelenek vagyunk nagyon sokszor beírni ezt a sort egy fileba. Ezt a következő bash script megoldja:
#!/bin/bash echo "#!/usr/bin/gnuplot" > sinus.plt echo "t=0" >> sinus.plt echo "set xrange [0:2*pi]" >> sinus.plt echo "set yrange [-1:1]" >> sinus.plt ciklus_valt=0 ciklus_max=100 while [ $ciklus_valt != $ciklus_max ] do echo "p [0:2*pi] [-1:1] cos(t)*sin(x) ; t=t+0.1 " >> sinus.plt ciklus_valt=`echo $(($ciklus_valt+1))` done chmod +x sinus.pltA fenti példából látszik, hogyan lehet ciklust készíteni bash scriptben. A ciklus_max változóban állíthatjuk be, hány lépésből álljon az animáció. Lassítani pauseok elhelyezésével lehet.
Ezzel megközelítettük az igazi buherátorokat, hiszen scriptet
használunk scriptírásra is.if (pi<3.1415928) set parametric; \ set xrange[-2:2]; \ set yrange[-2.5:1]; \ PI=3.1415927; \ also=-PI*0.25; \ f=0.615; pi=pi+0.25 a=pi-3.1415927 meret=0.7+0.2*sin(a+a*a*0.03) plot [also:PI] meret*(1+cos(t)),meret*(sin(t)) notitle w l 1,\ meret*(-1-cos(t)),meret*(sin(t)) notitle w l 1,\ meret*(1+cos(also)+(-sin(also))*(t-PI)*f),\ meret*(sin(also)+cos(also)*(t-PI)*f) notitle w l 1, \ meret*(-1-cos(also)-(-sin(also))*(t-PI)*f),\ meret*(sin(also)+cos(also)*(t-PI)*f) notitle w l 1 if(a<100)reread pi=2*asin(1)A kezdeti beállításokat a kezdeti pi értéknél hajtjuk csak végre, majd a pi változót léptetjük.
c_p = c_p+1 plot "$0" using 1:c_p with lines linetype 1 if(c_p < n_p) rereadÉs egy másikat, melyben ez áll:
n_p=101 c_p=1 set nokey set yrange [0:10] call 'rajzolo.plt' 'data'
#!/bin/bash echo "#!/usr/bin/gnuplot" > mozi.plt echo "set xrange [-5:5]" >> mozi.plt echo "set yrange [0:1]" >> mozi.plt for adatok in mozi/psi.*.norm do cim=`echo $adatok | cut -d"." -f2` echo "p '$1' title `t=$cim` w l" >> ,mozi.plt done chmod +x mozi.plt ./mozi.pltA scirpt példa a fileokon futó bash for ciklusra. Ilyenkor az $adatok változó tartalma minden ciklusmagban a soron következő filenév. A script cim=... sora kiveszi az első és második "." karakter közé tett karakterláncot a filenévből, ez kerül majd a plot címébe, hogy az animáció során állandóan követni lehessen a file időparaméterét.
if (pi<3.1415928) set xrange[0:1]; set lmargin 3; set size 0.95,1 pi=pi+0.02 a=pi-3.1415927 set origin 1-a,0 plot x notitle w l 1 if (a<0.98) reread pause -1A szokásos szervezésű ciklus rögzített méretű képet jelentet meg eltolt állapotban. Ami nem fér ki az ablakba, azt levágja.
Borsányi Szabolcs fizikus