我有一个cfd fortran代码,它将结果文件输出到二进制结果文件中。我已将二进制文件导入matlab并读取并重新整形为3d矩阵。执行此操作的代码如下:
% function [rtime,itime,dt,nx,ny,nz,deltax,deltay,rlenz,rw] = Read_press3d(press.420000)
% _________________________________________________________________________
% name;
fid = fopen('press.420000', 'rb');
% fid;
rtime = fread(fid, 1, 'float64');
itime = fread(fid, 1, 'int32');
dt = fread(fid, 1, 'float64');
nx0 = fread(fid, 1, 'int32');
ny0 = fread(fid, 1, 'int32');
nz = fread(fid, 1, 'int32');
deltax = fread(fid, 1, 'float64');
deltay = fread(fid, 1, 'float64');
rlenz = fread(fid, 1, 'float64');
rwtoto = fread(fid, nx0*ny0*nz, 'float64');
fclose(fid);
rw = reshape(rwtoto,[nx0,ny0,nz]);
% v = reshape(vtoto,[nx0,ny0,nz]);
% w = reshape(wtoto,[nx0,ny0,nz]);
% u = utoto(1:)
% lag = toto1(1:nx0-1,1:ny0-1)';
% dudn = toto2(1:nx0-1,1:ny0-1)';
%
% % valxy(ny0,:) = valxy(1,:);
% % valxy(:,nx0) = valxy(:,1);
nx = nx0-1;
ny = ny0-1;
此处,rw
是单个257x512x390
数组中的重新形成的压力。现在我想将此3D阵列中的压力视为等高线图或以另一种有用的方式将其可视化。我知道一种方法是在y-z平面的不同位置创建一个二维切片,沿着512x390
。
我曾尝试使用slice
函数,但无法弄清楚如何使其工作。我只有存储在3d数组中的压力值。我没有相应的x,y,z位置,但是数组的长度是基于delta x,y,z,所以实际上我的3d数组的大小应该与坐标相对应。
任何有关如何绘制切片或任何其他方式来显示数据的帮助都将受到欢迎。
答案 0 :(得分:0)
Matlab的imagesc
函数是我用于可视化2D矩阵的更好方法之一。如果3D阵列的x维是时间轴,则可以使用for i = 1:size(rw,1)
pressure = rw(i,:,:); % Extract the ith pressure matrix
imagesc(pressure) % Plot in color
pause(0.1) % Pause execution for 10th of second for viewing
end
遍历yz平面中的2D矩阵并使用java
绘制颜色,如下所示:
-cp