目前比较流行的做三维图的软件包括Origin、Surfer等,但是如果需要批量制作相同格式的三维图,则需要编写脚本程序,对于普通用户则无从下手。这块儿介绍如何利用matlab批量做三维图,以及基于得到的图形制作动画。
1) 需要的dat数据文件格式:XYZ三列,通常由Fortran或者C程序编写两重循环计算得到。相应的matlab文件如下:
----------------------------------------------------------------------------
clear,clf
a=dir('*.dat'); %读取所有的.dat文件,如不是dat文件换一下即可
n=length(a); %需要读取文件的个数
for j=1:n
dat = importdata(a(j).name);
%make the meshgrid matrix
x = dat(find( dat(:,2) == dat(1,2) ));
ind = find( dat(:,1) == dat(1,1));
[ind_x,ind_y,ind_z] = ind2sub(size(dat),ind);
y = dat(ind_x,2);
[X,Y] = meshgrid(x,y);
%网格矩阵对应Z值
[Zi,Zj] = size(X);
Z = zeros(Zi,Zj);
for i = 1:Zi
Z(i,:) = (dat(((i-1)*Zj+1):(i*Zj),3))';
end
contourf(X,Y,Z,10);
AXIS([-20 15 -15 15]);
%caxis([0,1]);
shading flat; %去掉黑线
title(a(j).name,'FontSize',20)
filename=deblank(strrep(a(j).name, '.dat', '')); %使图形的名称和数据的名字一致
saveas(gcf,filename,'jpg') %保存当前图形
end
--------------------------------------------------------------------------------------
该程序会将当前目录下所有的dat文件做等高线图并输出为相应的jpg图形文件。
2)基于这些得到图形文件,利用一个小软件GIF Movie Gear就可以很轻松地做出动画。该方法对于QMD框架下的核反应动力学模拟可视化非常有用。
2010.6.12