init
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
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
|
||||
Reference in New Issue
Block a user