Co60の半減期のGIF動画

ガンマナイフ 4CにはCo60が201個あります。 半減期は約5年で購入時1TBqですが、5年後には500GBq、10年後には250GBqになります。

球面上の乱数はMATLABの乱数発生器>球内の乱数をそのままパクりました。

clear;close all;
GIF=2;
Nrad=2^7;
num=36;
Nn=Nrad*num;
rng(0,'twister');
rvals=2*rand(Nn,1)-1;
elevation=asin(rvals);
azimuth=2*pi*rand(Nn,1);
[rx,ry,rz]=sph2cart(azimuth,elevation,ones(Nn,1));
rx=reshape(rx,[Nrad,num]);
ry=reshape(ry,[Nrad,num]);
rz=reshape(rz,[Nrad,num]);
rn=rand(Nrad,num);
figure('color',[1,1,1]*0,'InvertHardCopy','off');
set(gcf,'position',[50,50,900,300]);
[qx,qy,qz]=sphere(7);
qxx=qx(:);
qyy=qy(:);
qzz=qz(:);
dist=12;
rd=2;
rd2=rd*2.5;
nnum=1:num;
ang=linspace(0,2*pi,num+1);
for t=1:num
    switch GIF
        case 0;
            cla;
        case 1;
            close(gcf);
            figure('color',[1,1,1]*0,'InvertHardCopy','off');
            set(gcf,'position',[50,50,900,300]);
            fname='HalfLife.gif';
        case 2;
             subplot('position',[mod(t-1,6)/6+0.05,(5-floor((t-1)/6))/6,1/6-0.1,1/6]);
    end;
    tt=mod(nnum+(t-1),num);
    for ttt=1:5
        t0(ttt)=find(tt==ttt);
    end;
    qqx=qx*cos(ang(t))-qy*sin(ang(t));
    qqy=qx*sin(ang(t))+qy*cos(ang(t));
    for hl=-1:1
        surface(qqx+hl*dist,qqy,qz,'facecolor',[0,1,1],'edgecolor',[0,0.9,1],'tag','core');
        hold on;
        pk=rand(1,numel(qx));
        pk=find(pk>0.9);
        if numel(pk)>1
            plot3(qxx(pk)+hl*dist,qyy(pk),qzz(pk),'marker','pentagram','LineStyle','none',...
                'MarkerFacecolor',[1,1,0],'MarkerEdgeColor','none','MarkerSize',8);
        end;
        axis off;
        set(gca,'xlim',[-1,1].*(dist+rd2*1.5),'ylim',[-1,1]*rd2*2,'zlim',[-1,1]*rd2*2);
        if ismember(GIF,[0,1]);
            set(gca,'position',[0,0,1,1]);
            set(gca,'CameraViewAngle',3);
        else
            set(gca,'CameraViewAngle',4);
        end;

        view(0,0);
        daspect([1,1,1]);

        N2=1:(Nrad*0.5^(hl+1));
        for ttt=1:5
            t1=t0(ttt);
            RN=[rn(N2,t1),rn(N2,t1)+rd]+ttt;
            RN(RN>rd2)=rd2;
            px=[rx(N2,t1)*ones(1,2)].*RN;
            py=[ry(N2,t1)*ones(1,2)].*RN;
            pz=[rz(N2,t1)*ones(1,2)].*RN;
            plot3(px'+hl*dist,py',pz','tag','ray');
        end;
        hray=findobj(gca,'tag','ray');
        set(hray(1:2:end),'color',[0,0.5,1]);
        set(hray(2:2:end),'color',[0,0.7,1]);
    end;

    switch GIF
        case 0;
            drawnow;
        case 1;
            F=getframe(gcf);
            [fc,fm]=rgb2ind(F.cdata,256);
            if t==1
                imwrite(fc,fm,fname,'loopcount',inf,'delaytime',0);
            else
                imwrite(fc,fm,fname,'writemode','append','delaytime',0);
            end;
    end;
end;
daspect([1,1,1]);
rotate3d on;