function plot_3d_grid_data_volume(nx, ny, nz, dx, dy, dz, data) % 绘制三维网格数据的体绘制图 % 输入参数: % nx, ny, nz - 各方向的网格数 % dx, dy, dz - 各方向的网格尺寸向量 % data - 物理量数据,维度为(nx, ny, nz) % 计算每个网格点的坐标位置 x = zeros(1, nx); x(1) = dx(1)/2; for i = 2:nx x(i) = x(i-1) + (dx(i-1) + dx(i))/2; end y = zeros(1, ny); y(1) = dy(1)/2; for i = 2:ny y(i) = y(i-1) + (dy(i-1) + dy(i))/2; end z = zeros(1, nz); z(1) = dz(1)/2; for i = 2:nz z(i) = z(i-1) + (dz(i-1) + dz(i))/2; end % 创建三维网格 [X, Y, Z] = meshgrid(x, y, z); % 调整data维度 data_plot = permute(data, [2, 1, 3]); % 创建新图形 figure('Position', [100, 100, 900, 700]); % 方法1:使用vol3d v2(如果安装了File Exchange的vol3d工具) % 如果没有安装,可以使用以下基本体绘制 % 创建多个等值面 levels = linspace(min(data(:)), max(data(:)), 5); for i = 2:length(levels)-1 p = patch(isosurface(X, Y, Z, data_plot, levels(i))); isonormals(X, Y, Z, data_plot, p); set(p, 'FaceColor', 'interp', 'EdgeColor', 'none'); % 根据数据值设置颜色 cdata = get(p, 'FaceVertexCData'); set(p, 'FaceVertexCData', cdata); end % 添加一些切片来显示内部结构 hold on; h = slice(X, Y, Z, data_plot, x(round(nx/2)), y(round(ny/2)), z(round(nz/2))); set(h, 'FaceAlpha', 0.6, 'EdgeColor', 'none'); colorbar; colormap('jet'); xlabel('X'); ylabel('Y'); zlabel('Z'); title('三维网格物理量分布(体绘制)'); axis equal; view(3); grid on; camlight; lighting gouraud; end