init
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
function plot_3d_grid_voxel_function_fixed(nx, ny, nz, dx, dy, dz, data)
|
||||
% 使用自定义voxel函数绘制三维网格(每个网格单一颜色)
|
||||
% 输入参数:
|
||||
% nx, ny, nz - 各方向的网格数
|
||||
% dx, dy, dz - 各方向的网格尺寸向量
|
||||
% data - 物理量数据,维度为(nx, ny, nz)
|
||||
|
||||
% 计算每个网格的中心坐标
|
||||
x_center = zeros(nx, 1);
|
||||
x_center(1) = dx(1)/2;
|
||||
for i = 2:nx
|
||||
x_center(i) = x_center(i-1) + (dx(i-1) + dx(i))/2;
|
||||
end
|
||||
|
||||
y_center = zeros(ny, 1);
|
||||
y_center(1) = dy(1)/2;
|
||||
for i = 2:ny
|
||||
y_center(i) = y_center(i-1) + (dy(i-1) + dy(i))/2;
|
||||
end
|
||||
|
||||
z_center = zeros(nz, 1);
|
||||
z_center(1) = dz(1)/2;
|
||||
for i = 2:nz
|
||||
z_center(i) = z_center(i-1) + (dz(i-1) + dz(i))/2;
|
||||
end
|
||||
|
||||
% 创建图形
|
||||
figure('Position', [100, 100, 1000, 800]);
|
||||
hold on;
|
||||
|
||||
% 设置颜色映射
|
||||
colormap jet;
|
||||
caxis([min(data(:)), max(data(:))]);
|
||||
|
||||
% 绘制每个体素
|
||||
alpha_val = 0.9; % 透明度
|
||||
|
||||
for i = 1:nx
|
||||
for j = 1:ny
|
||||
for k = 1:nz
|
||||
% 绘制体素 - 传递当前网格的值
|
||||
voxel_fixed([x_center(i), y_center(j), z_center(k)], ...
|
||||
[dx(i), dy(j), dz(k)], ...
|
||||
data(i, j, k), alpha_val);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
% 设置图形属性
|
||||
colorbar;
|
||||
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');
|
||||
|
||||
hold off;
|
||||
end
|
||||
|
||||
function voxel_fixed(center, size, value, alpha)
|
||||
% 绘制单个体素的辅助函数(每个面使用相同颜色)
|
||||
% center: [x, y, z] 中心坐标
|
||||
% size: [dx, dy, dz] 尺寸
|
||||
% value: 物理量值
|
||||
% alpha: 透明度
|
||||
|
||||
% 计算8个顶点
|
||||
x = center(1) + [-size(1)/2, size(1)/2];
|
||||
y = center(2) + [-size(2)/2, size(2)/2];
|
||||
z = center(3) + [-size(3)/2, size(3)/2];
|
||||
|
||||
% 创建8个顶点
|
||||
vertices = [x(1), y(1), z(1);
|
||||
x(2), y(1), z(1);
|
||||
x(2), y(2), z(1);
|
||||
x(1), y(2), z(1);
|
||||
x(1), y(1), z(2);
|
||||
x(2), y(1), z(2);
|
||||
x(2), y(2), z(2);
|
||||
x(1), y(2), z(2)];
|
||||
|
||||
% 6个面的顶点索引
|
||||
faces = [1 2 3 4;
|
||||
5 6 7 8;
|
||||
1 2 6 5;
|
||||
2 3 7 6;
|
||||
3 4 8 7;
|
||||
4 1 5 8];
|
||||
|
||||
% 关键修改:使用 'flat' 并确保所有面使用相同的颜色值
|
||||
patch('Vertices', vertices, 'Faces', faces, ...
|
||||
'FaceColor', 'flat', ... % 'flat' 确保每个面单一颜色
|
||||
'FaceVertexCData', value * ones(size(faces, 1), 1), ... % 所有面相同颜色
|
||||
'CDataMapping', 'scaled', ...
|
||||
'FaceAlpha', alpha, ...
|
||||
'EdgeColor', 'none');
|
||||
end
|
||||
Reference in New Issue
Block a user