cyfile / Matlab-base-toolbox

本人使用Matlab基础工具箱所编写的各种代码
1 stars 0 forks source link

康维的生命游戏 #8

Open 213cy opened 8 years ago

213cy commented 8 years ago

untitled3 untitled2 untitled

213cy commented 8 years ago
function pat=patterngen(n)
%图案生成函数
if nargin==0
    n=10;
end

figure;
colormap([1 1 1;0 0 0])

pat=zeros(n);

ph=pcolor([pat,ones(n,1);ones(1,n+1)]);
axis ij
axis square

while true
    try
        [a,b]=ginput(1);
    catch
        break
    end
    x=floor(a);
    y=floor(b);
    pat(y,x)=~pat(y,x);

    set(ph,'cdata',[pat,ones(n,1);ones(1,n+1)])
    drawnow;
end
213cy commented 8 years ago
function mylifegame(p1,p2)
%生命演化过程
%调用例子:
% mylifegame
% mylifegame(rand(10)>0.6)
% mylifegame(35,69)
m = 101;
X = zeros(m);
flag = false;
if nargin==0
    p = -1:1;
    for count=1:15,
        kx=floor(rand*(m-4))+2; ky=floor(rand*(m-4))+2;
        X(kx+p,ky+p)=(rand(3)>0.5);
    end
elseif nargin==2
    X(50,50)=1;
    flag=true;
else
    [a,b]=size(p1);
    x=floor((m-a)/2);
    y=floor((m-b)/2);
    X(x:x+a-1,y:y+b-1)=p1==1;

end

figHnd=figure(gcf);

[i,j] = find(X);
plothandle = plot(j,i,'s', ...
    'MarkerFaceColor','g', ...
    'MarkerSize',350/m);

axis equal
axis([0 m+1 0 m+1]);

axis ij
%

fmat=ones(3);
fmat(2,2)=0;

while ishandle(figHnd)
    eX=[X(m,m),X(m,:),X(m,1);...
        X(:,m),X,X(:,1);...
        X(1,m),X(1,:),X(1,1)];

    N=conv2(double(eX),fmat,'valid');
    X = (X & (N == 2)) | (N == 3);
    if flag %永恒的生命
        X([p1 p2],p1:p2)=1;
        X(p1:p2,[p1 p2])=1;
    end
    [i,j] = find(X);
    set(plothandle,'xdata',j,'ydata',i)
    drawnow
    pause(0.05)
end

%%%%%%