You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:45:04