Sunteți pe pagina 1din 4

Simulator Automate Celulare pentru evolutia unei insule vulcanice

Este propusa o aplicatie care simuleaza evolutia unei insule de origine vulcanica pe o
anumita perioada de timp. Problema care se pune este legata atat de curgerea lavei la o
eruptie, cat si de inaltarea nivelului insulei si formarea reliefului. Dupa ce vulcanul se stinge,
se poate observa procesul de eroziune asupra muntilor formati in era anterioara.
Automatul celular implementat este o retea bidimensionala de dimensiune 100x100
celule. Legea pentru perioada de activitate vulcaninca intensa este descrisa de:
daca celulele din jurul celulei curente sunt mai inalte (acoperite de lava sau sub
actiunea de incretire determinata de miscarea placilor tectonice), atunci celula curenta se va
inalta pana la nivelul celei mai inalte celule adiacente
Astfel se obtine:
Pas 1. testeaza inaltimea celulelor adiacente:
ics = (a(j,k+1) >= a(j,k)) + (a(j,k-1) >=a(j,k)) + (a(j-1,k) >= a(j,k))+ (a(j+1,k) >= a(j,k)) + (a(j+1,k+1)
>= a(j,k)) + (a(j-1,k-1) >= a(j,k)) + (a(j-1,k+1) >= a(j,k)) + (a(j+1,k-1) >=a (j,k))
unde a(j,k) reprezinta o celula, iar ics - o variabila temporara
Pas 2. daca cel putin 8 dintre ele sunt mai inalte ics = (ics>=8) cauta cea mai inalta celula din jur
lava = max([a(j,k+1); a(j,k-1); a(j-1,k); a(j+1,k); a(j+1,k+1);a(j-1,k-1); a(j-1,k+1);a(j+1,k-1)])
Pas 3. ajusteaza inaltimea celulei
a(j,k) = ics*(lava - a(j,k)) + a(j,k);
Pentru a creste gradul de asemanare al automatului cu lumea reala, a fost introdusa o
variabila aleatoare care va modifica in mica masura o parte din celule la fiecare pas (perioada
de timp) efectuat.
Initializare: fisierul init.mat contine harta initiala ce trebuie incarcata in Workspace Matlab
inainte de rulare;
Rulare: fisierul island_lava_flow.m reprezinta aplicatia; este indeajuns a rula acest fisier dupa
incarcarea hartii in Workspace.
%the folloing program simulates the 'growth' and 'decay' of an island due to underwater volcano
activity.
% (c) M. Patrascu

%--------------------------%controls:
%--------------------------%define the plot button
plotbutton=uicontrol('style','pushbutton',...
'string','Play.', ...
'fontsize',12, ...
'position',[100,400,50,20], ...
'callback', 'run=1;');
%define the stop button
erasebutton=uicontrol('style','pushbutton',...
'string','Stop.', ...
'fontsize',12, ...
'position',[200,400,50,20], ...
'callback','freeze=1;');
%define the Quit button
quitbutton=uicontrol('style','pushbutton',...
'string','Quit.', ...
'fontsize',12, ...
'position',[300,400,50,20], ...
'callback','stop=1;close;');
number = uicontrol('style','text', ...
'string','1', ...
'fontsize',12, ...
'position',[20,400,50,20]);
%--------------------------a = init;
var = a;
b = a;
lava = zeros(100);
i=0;
im = image(a);
set(im, 'erasemode', 'none')
%Main loop
stop= 0;
%wait for a quit button push
run = 0;
%wait for play
freeze = 0;
%wait for freeze
while (stop==0)
if (run==1)
i=i+1; %as time passes...
if (i<=200)

for (j=2:99)
for (k=2:99)
%whenever a vulcano erupts
ics = (a(j,k+1) >= a(j,k)) + (a(j,k-1) >= a(j,k)) + (a(j-1,k) >= a(j,k)) +...
(a(j+1,k) >= a(j,k)) + (a(j+1,k+1) >= a(j,k)) + (a(j-1,k-1) >= a(j,k)) +...
(a(j-1,k+1) >= a(j,k)) + (a(j+1,k-1) >= a(j,k));
ics = ics>=8;
%first see if there's any lava
lava = max([a(j,k+1); a(j,k-1); a(j-1,k); a(j+1,k); a(j+1,k+1); a(j-1,k-1);
a(j-1,k+1);a(j+1,k-1)]);
%the lava will now create mountains
var(j,k) = ics*(lava - a(j,k)) + a(j,k);
end
end
%humans may interact, or mother nature, or some other foces unkown to this application:
var = var + randn(100)/100;
else
var = var;
freeze = 1;
end
a = var;
set(im, 'cdata', a)
pause(.1)
%update the step number for display
stepnumber = 1 + str2num(get(number,'string'));
set(number,'string',num2str(stepnumber))
end
if (freeze==1)
run = 0;
freeze = 0;
end
drawnow
end

La un moment dat, vulcanii se sting, dupa care incepe procesul de erodare.


Legea pentru perioada de eroziune a formatiunilor muntoase este descrisa de:
daca celulele din jurul celulei curente sunt mai joase (afectate de vant si alti agenti de
eroziune), atunci celula curenta se va eroda pana la nivelul celei mai inalte cellule adiacente

Astfel se obtine:
Pas 1. testeaza inaltimea celulelor adiacente:
de completat
Pas 2. daca cel putin 8 dintre ele sunt mai joase si nu sunt acoperite de apa adanca ics = (ics>=8)
&(a(j,k)>=15) cauta media celei mai inalte si a celei mai joase celule adiacente:
de completat
Pas 3. ajusteaza inaltimea celulei
de completat

Mod de lucru:
1. Se implementeza programul anterior ce simuleaza un automat celular pentru evolutia unei
insule vulcanice. 30%
2. Se modifica regulile pentru perioada de eroziune a formatiunilor muntoase in acest caz. 70%

S-ar putea să vă placă și