This commit is contained in:
xinxiao
2026-03-13 11:24:41 +08:00
commit 04e2bb29c7
238 changed files with 29102 additions and 0 deletions
@@ -0,0 +1,128 @@
function plot_3d_grid_patch_optimized(nx, ny, nz, dx, dy, dz, data)
% 使patch一次性绘制所有网格
%
% nx, ny, nz -
% dx, dy, dz -
% data - (nx, ny, nz)
%
x_edges = zeros(nx+1, 1);
x_edges(1) = 0;
for i = 1:nx
x_edges(i+1) = x_edges(i) + dx(i);
end
y_edges = zeros(ny+1, 1);
y_edges(1) = 0;
for i = 1:ny
y_edges(i+1) = y_edges(i) + dy(i);
end
z_edges = zeros(nz+1, 1);
z_edges(1) = 0;
for i = 1:nz
z_edges(i+1) = z_edges(i) + dz(i);
end
%
[X_edges, Y_edges, Z_edges] = ndgrid(x_edges, y_edges, z_edges);
%
vertices = [X_edges(:), Y_edges(:), Z_edges(:)];
% 8
n_cells = nx * ny * nz;
faces = zeros(n_cells * 6, 4); % 64
face_colors = zeros(n_cells * 6, 1);
% (i,j,k)
% 8
% v1: (i,j,k)
% v2: (i+1,j,k)
% v3: (i+1,j+1,k)
% v4: (i,j+1,k)
% v5: (i,j,k+1)
% v6: (i+1,j,k+1)
% v7: (i+1,j+1,k+1)
% v8: (i,j+1,k+1)
face_idx = 1;
for i = 1:nx
for j = 1:ny
for k = 1:nz
% 8
idx = @(ii, jj, kk) (ii-1)*(ny+1)*(nz+1) + (jj-1)*(nz+1) + kk;
v1 = idx(i, j, k);
v2 = idx(i+1, j, k);
v3 = idx(i+1, j+1, k);
v4 = idx(i, j+1, k);
v5 = idx(i, j, k+1);
v6 = idx(i+1, j, k+1);
v7 = idx(i+1, j+1, k+1);
v8 = idx(i, j+1, k+1);
%
cell_value = data(i, j, k);
% (k层)
faces(face_idx, :) = [v1, v2, v3, v4];
face_colors(face_idx) = cell_value;
face_idx = face_idx + 1;
% (k+1)
faces(face_idx, :) = [v5, v6, v7, v8];
face_colors(face_idx) = cell_value;
face_idx = face_idx + 1;
% (j层)
faces(face_idx, :) = [v1, v2, v6, v5];
face_colors(face_idx) = cell_value;
face_idx = face_idx + 1;
% (j+1)
faces(face_idx, :) = [v4, v3, v7, v8];
face_colors(face_idx) = cell_value;
face_idx = face_idx + 1;
% (i层)
faces(face_idx, :) = [v1, v4, v8, v5];
face_colors(face_idx) = cell_value;
face_idx = face_idx + 1;
% (i+1)
faces(face_idx, :) = [v2, v3, v7, v6];
face_colors(face_idx) = cell_value;
face_idx = face_idx + 1;
end
end
end
%
figure('Position', [100, 100, 1000, 800]);
%
patch('Vertices', vertices, 'Faces', faces, ...
'FaceVertexCData', face_colors, ...
'FaceColor', 'flat', ...
'CDataMapping', 'scaled', ...
'EdgeColor', 'none', ...
'FaceAlpha', 0.9);
%
colorbar;
colormap jet;
xlabel('X');
ylabel('Y');
zlabel('Z');
title('');
axis equal;
view(3);
grid on;
box on;
%
lighting gouraud;
light('Position', [1 1 1], 'Style', 'infinite');
light('Position', [-1 -1 -1], 'Style', 'infinite');
end