荷電π中間子...GIF動画
原子核内で陽子と陽子が電磁力の反発力で壊れないのは、核子間で核力(強い力)が働くからだそうです。 核力はπ中間子を介し、荷電π中間子だと陽子は中性子に、中性子は陽子になりますが、 中性π中間子だと陽子・中性子はそのままです。
Win64版Matlab R2013aだとgetframe(gcf)そのままだと、キャプチャされた画像は更新されませんでした。 やむを得ず、figureを作成しては消去しての繰り返しで、キャプチャされた画像の更新を行うことにしてます。
close all;clear; ang=30/180*pi; N=30; NN=ones(N+1,N+1); [x,y,z]=sphere(N); a=3^0.5;b=(8/3)^0.5;aa=2.5;ab=2; GIF=2;% GIF==0だと動画は作成されない。 switch GIF case 0;seg=72; case 1;seg=72;fname='pion.gif'; case 2;seg=36; end; proton='$$p^{+}$$'; neutron='$$n^{0}$$'; posipi='$$\pi^{+}$$'; negapi='$$\pi^{-}$$'; uud1='$$\textcolor{red}u \textcolor{blue}{u}$$'; T=linspace(0,4*pi,seg+1); w=0.7; for t=1:seg kk=[-3,0,0;-2,0,0;-3,1,0;... 3,-2,0;2,-2,0;3,-3,0;... 0,-0.5,0;0,-1.5,0]; X=[cos(ang),sin(ang),0;-sin(ang),cos(ang),0;0,0,1]; dx=[2,0,0]*X; dy=[1,a,0]*X; dz=[1,1/a,b]*X;% 今回は使わず k=zeros(size(kk,1),3); for n=1:size(kk,1) k(n,:)=kk(n,1)*dx+kk(n,2)*dy; end; tx=-cos(T(t))*2.5; if T(t)>2*pi tx=-tx; end; k(7:8,1)=k(7:8,1)+tx; mk1=mean(k(1:3,:)); mk2=mean(k(4:6,:)); mk3=mean(k(7:8,:)); switch GIF case 0; if t==1; figure('color',[1,1,1],'InvertHardCopy','off'); else cla; end; case 1; close(gcf); figure('color',[1,1,1],'InvertHardCopy','off'); case 2; if t==1 figure('color',[1,1,1],'InvertHardCopy','off'); set(gcf,'position',[50,50,800,600]); end; subplot('position',[mod(t-1,6)/6+0.05,(5-floor((t-1)/6))/6,1/6-0.1,1/6]); end; for n=1:size(k,1) surface(x+(k(n,1))*NN,y+k(n,2)*NN,z+k(n,3)*NN,... 'tag','q'); if n==1;hold on;end; end; hq=findobj(gca,'tag','q'); hq=flipud(hq); set(hq,'edgecolor','none'); set(hq([1,4]),'facecolor',[0,0,1]); set(hq([2,5]),'facecolor',[0,1,0]); set(hq([3,6]),'facecolor',[1,0,0]); set(hq(7),'facecolor',[0,1,0]); set(hq(8),'facecolor',[1,0,1]); hN1=surface(aa*x+mk1(1),aa*y+mk1(2),aa*z+mk1(3),... 'facecolor',[0,0,1],'facealpha',0.2,'edgecolor','none','tag','N1'); hN2=surface(aa*x+mk2(1),aa*y+mk2(2),aa*z+mk2(3),... 'facecolor',[0,0,1],'facealpha',0.2,'edgecolor','none','tag','N2'); hN3=surface(ab*x+mk3(1),ab*y+mk3(2),ab*z+mk3(3),... 'facecolor',[1,0,0],'facealpha',0.2','edgecolor','none','tag','N3'); tx1=text(mk1(1),2,0,'$$ $$','FontSize',30,'interpreter','latex'); tx2=text(mk2(1),2,0,'$$ $$','FontSize',30,'interpreter','latex'); tx3=text(mk3(1),2,0,'$$ $$','FontSize',30,'interpreter','latex'); for n=1:size(k,1) hqrk(n)=text(k(n,1),k(n,2),k(n,3),'$$u$$','interpreter','latex','FontSize',25,'color',[1,1,1]); end; set(hqrk([3,6]),'string','$$d$$'); set(hqrk(7:8),'visible','off'); axis off; set(gca,'CameraViewAngle',6); if T(t)<=2*pi set(hqrk([2,5]),'string','$$d$$'); if tx<-2 set(hN1,'facecolor',[1,0,0]); set([hN3;hq(7:8)],'visible','off'); set(tx1,'string',proton); set(tx2,'string',neutron); set(hqrk(2),'string','$$u$$'); elseif tx>2 set(hN2,'facecolor',[1,0,0]); set([hN3;hq(7:8)],'visible','off'); set(tx2,'string',proton); set(tx1,'string',neutron); set(hqrk(5),'string','$$u$$'); else set(tx1,'string',neutron); set(tx2,'string',neutron); set(tx3,'string',posipi); set(hqrk,'visible','on'); set(hqrk(8),'string','$$\bar{d}$$'); end; else if tx<-2 set(hN2,'facecolor',[1,0,0]); set([hN3;hq(7:8)],'visible','off'); set(tx2,'string',proton); set(tx1,'string',neutron); set(hqrk(2),'string','$$d$$'); elseif tx>2 set(hN1,'facecolor',[1,0,0]); set([hN3;hq(7:8)],'visible','off'); set(tx1,'string',proton); set(tx2,'string',neutron); set(hqrk(5),'string','$$d$$'); else set([hN1;hN2],'facecolor',[1,0,0]); set(hN3,'facecolor',[0,1,1]); set(tx1,'string',proton); set(tx2,'string',proton); set(tx3,'string',negapi); set(hqrk(7:8),'visible','on'); set(hqrk(7),'string','$$d$$'); set(hqrk(8),'string','$$\bar{u}$$'); end; end; light('position',100*[1,1,1]); light('position',-100*[1,1,1]); daspect([1,1,1]); switch GIF case 0; pause(0.2); 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; case 2; set(gca,'CameraViewAngle',4); set(hqrk,'FontSize',15); set([tx1,tx2,tx3],'FontSize',18); end; end; rotate3d on;