使用MATLAB绘制具有不同孔隙度与渗透率的两个立方体
用MATLAB绘制带孔隙度和渗透率差异的立方体
要在现有立方体绘制代码的基础上,直观体现孔隙度和渗透率的差异,可以通过以下方式实现:
- 用**透明度(FaceAlpha)**表示孔隙度:孔隙度越高,立方体越透明(模拟更多孔隙空间)
- 用颜色渐变/饱和度表示渗透率:渗透率越高,颜色越鲜亮;也可在立方体内部添加小几何体模拟孔隙,孔隙越多(渗透率越高),内部小球数量越多
修改后的完整代码
% -------------------------- 定义参数 -------------------------- porosity1 = 0.3; % 第一个立方体孔隙度(低) permeability1 = 100; % 第一个立方体渗透率(mD) porosity2 = 0.7; % 第二个立方体孔隙度(高) permeability2 = 500; % 第二个立方体渗透率(mD) % -------------------------- 定义立方体顶点和面 -------------------------- % 第一个立方体 v1 = [-1 -1 -1; -1 -1 1; -1 1 1; -1 1 -1; 1 -1 -1; 1 -1 1; 1 1 1; 1 1 -1]; f1 = [1 2 3 4; 5 6 7 8; 1 4 8 5; 2 3 7 6; 1 2 6 5; 4 3 7 8]; % 第二个立方体 v2 = [2 -1 -1; 2 -1 1; 2 1 1; 2 1 -1; 4 -1 -1; 4 -1 1; 4 1 1; 4 1 -1]; f2 = [1 2 3 4; 5 6 7 8; 1 4 8 5; 2 3 7 6; 1 2 6 5; 4 3 7 8]; % -------------------------- 绘制立方体 -------------------------- figure('Color','w'); hold on; axis equal; grid on; % 绘制第一个立方体:低孔隙度(不透明)、低渗透率(暗红色) patch('Faces',f1,'Vertices',v1,... 'FaceColor',[0.6 0 0],... % 暗红色表示低渗透率 'FaceAlpha',1-porosity1,... % 孔隙度越高,透明度越高(1-porosity1控制透明度) 'EdgeColor','k'); % 绘制第二个立方体:高孔隙度(透明)、高渗透率(亮红色) patch('Faces',f2,'Vertices',v2,... 'FaceColor',[1 0 0],... % 亮红色表示高渗透率 'FaceAlpha',1-porosity2,... 'EdgeColor','k'); % -------------------------- 添加标注和可视化优化 -------------------------- % 添加孔隙度和渗透率文本标注 text(-0.5, 0, 1.2, sprintf('孔隙度: %.1f\n渗透率: %d mD', porosity1, permeability1),... 'HorizontalAlignment','center','Color','k'); text(3, 0, 1.2, sprintf('孔隙度: %.1f\n渗透率: %d mD', porosity2, permeability2),... 'HorizontalAlignment','center','Color','k'); view(3); title('不同孔隙度和渗透率的立方体对比'); xlabel('X轴'); ylabel('Y轴'); zlabel('Z轴');
代码说明
- 孔隙度体现:通过
FaceAlpha属性控制,公式1-porosity保证孔隙度越高,立方体越透明(比如孔隙度0.7时,透明度为0.3) - 渗透率体现:用颜色饱和度区分,低渗透率用暗红色,高渗透率用亮红色;也可以替换为
colormap映射,比如根据渗透率值从蓝到红渐变 - 标注优化:添加了文本标注直接显示每个立方体的孔隙度和渗透率数值,增强可读性
内容的提问来源于stack exchange,提问作者Mram
相关产品推荐
相关产品推荐

