初步的想法是想做一个点源向空间扩散的示意图。在网上找了好久没找到合适的,就想用Matlab画一个。
要画一个球体,还需要画由点向四面八方辐射的箭头。用到下面这几个函数:
sphere
surf
quiver3
matlab代码如下:
% -------------------
% ---author:laohe---
% -------------------
clc;clear;close all;
layerNum = 30;
[x,y,z]=sphere(layerNum);
figure(1)
for i=1:2:layerNum
plot(x(i,:),y(i,:));
axis equal;
hold on
end
hold off;
h=figure(2)
set(gcf,'Position',get(0,'ScreenSize'));
% set(gcf,'Position',[30 30 1200 300])
for i = 0.1:0.2:4
% surf(0.02*x,0.02*y,0.02*z,"LineStyle","--",'LineWidth',0.2);
% alpha(1)
% hold on
surf(i*x,i*y,i*z);%绘制球
hold on
for m=1:2:layerNum
for n=1:2:layerNum
quiver3(0,0,0,i*x(m,n),i*y(m,n),i*z(m,n),"LineWidth",2);
hold on
end
end
hold off
axis equal
alpha(0.05)
axis([-4 4 -4 4 -4 4])
drawnow
f=getframe(gcf);
imind=frame2im(f);
[imind,cm] = rgb2ind(imind,256);
if i == 0.1
imwrite(imind,cm,'sphere.gif','GIF', 'Loopcount',inf,'DelayTime',0.2);
else
imwrite(imind,cm,'sphere.gif','GIF','WriteMode','append','DelayTime',0.2);
end
end
画出来的动图如下所示: