如何在MATLAB中为surf曲面的指定约束区域添加灰度遮罩
实现方法
最简单的实现方式是基于你已生成的网格构造约束逻辑掩码,在原有曲面上叠加一层半透明灰色遮罩即可,修改后的完整代码如下:
clc clear; close all; [X1,X2] = meshgrid(0:10:3000,0:10:6000); TEST = (33*X1 + 3*X2); surf(X1,X2,TEST); hold on; X2_line = cell(4,1); X2_line{1,1} = 2*X1; X2_line{2,1} = 6000-2*X1; X2_line{3,1} = 9*X1; X2_line{4,1} = (X1*0)+1200; colour = cell(4,1); colour{1,1} = 'r'; colour{2,1} = 'g'; colour{3,1} = 'b'; colour{4,1} = 'c'; for i = 1:4 TEST_line = (33*X1 + 3*X2_line{i,1}); h=surf(X1,X2_line{i,1},TEST_line); set(h,'edgecolor',colour{i,1}); set(h,'LineWidth',2) xlim([0 4000]); ylim([0 7000]); zlim([0 130000]); hold on; end %% 新增:约束区域半透灰度遮罩 % 构造四个约束的逻辑掩码 mask = (X2 <= X2_line{4,1}) ... % 青色线下方 & (X2 <= X2_line{2,1}) ... % 绿色线下方 & (X2 <= X2_line{3,1}) ... % 蓝色线下方 & (X2 >= X2_line{1,1}); % 红色线上方 % 生成alpha通道:满足约束的区域半透明,其余完全透明 alpha_mat = zeros(size(X1)); alpha_mat(mask) = 0.5; % 半透明度可按需调整 % 绘制遮罩层 h_mask = surf(X1,X2,TEST); set(h_mask,'FaceColor',[0.5 0.5 0.5],... % 灰色 'EdgeColor','none',... 'AlphaData',alpha_mat,... 'FaceAlpha','flat');
代码说明
- 这里把原来的
X2变量重命名为X2_line避免和meshgrid生成的X2变量冲突,防止逻辑判断出错 - 遮罩的灰度值、半透明度都可以按需调整,比如把
[0.5 0.5 0.5]改成更深/更浅的灰色,把0.5改成0.3~0.8区间的数值调整透明度 - 不需要额外引入第三方工具包,完全基于MATLAB内置绘图函数实现,兼容性最好
内容的提问来源于stack exchange,提问作者Joe jane
相关产品推荐
相关产品推荐

