terça-feira, 25 de setembro de 2012

Criando padrões geométricos com autômatos celulares e Scilab.


Os autômatos celulares seguem regras simples, mas apresentam comportamento complexo. Sua origem remonta aos anos 1940 com o famoso matemático John Von Neumann. Para saber mais sobre esse tópico, consultar, por exemplo o wikipédia aqui.A figura a seguir foi a "semente" para a geração dos padrões que são mostrados nas figuras seguintes e da figura inicial desta postagem.
Figura inicial.
Terceira geração.
15a. geração.

Código Scilab (sem comentários):
----------------------------------------------

clc;
close;

N = 100;

Mt = (sign(rand(N,N,'normal'))+1)/2;
Mt = 0*Mt;
dn = 20;
for q=dn:2*dn
    for p=dn:2*dn
        Mt(p,q)=1;
        Mt(p+2*dn,q)=1;        
        Mt(p,q+2*dn)=1;
        Mt(p+2*dn,q+2*dn)=1;        
    end
end

Mt(1,1)=1;  Mt(N,N)=1;
    vx = [];
    vy = vx;
    for p=1:N
        for q=1:N
            if Mt(p,q)==1 then
                vx = [vx, p];
                vy = [vy, q];
            end
        end
    end
    close; 
    plot(vx,vy,'.'); 
//pause;
Pt = Mt;

for k=2:25
    for p=2:N-1
        for q=2:N-1
            s = Mt(p-1,q)+Mt(p,q-1)+Mt(p+1,q)+Mt(p,q+1);
            s = s + Mt(p+1,q+1) + Mt(p-1,q-1);
            s = s + Mt(p-1,q+1) + Mt(p+1,q-1);
            if (Mt(p,q)==1)&(s > 4) then
                Pt(p,q)=0;
            end
            if (Mt(p,q)==1)&(s < 2) then
                Pt(p,q)=0;
            end
            if (Mt(p,q)==1)&(s == 2) then
                Pt(p,q)=1;
            end
            if (Mt(p,q)==1)&(s == 3) then
                Pt(p,q)=1;
            end
            if (Mt(p,q)==0)&(s == 3) then
                Pt(p,q)=1;
            end
        end
    end
    Mt = Pt;
    vx = [];
    vy = vx;
    for p=1:N
        for q=1:N
            if Mt(p,q)==1 then
                vx = [vx, p];
                vy = [vy, q];
            end
        end
    end
    close; 
    plot(vx,vy,'.');
end

Nenhum comentário:

Postar um comentário