You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MATLAB曲面网格面着色咨询:指定位置及对角线面自定义着色

解决MATLAB曲面网格面的自定义着色问题

没问题,我来帮你搞定这个曲面着色的需求。咱们一步步来修改代码,实现你要的特定面着色效果:

首先,原代码里的surf设置了FaceColor='none',这是看不到面颜色的,咱们得先调整这个属性,然后通过FaceVertexCData来给每个面单独指定颜色。下面是完整的实现代码,我会逐行解释:

close all; clear all; clc;
edges = linspace(0,1,10);
[X,Y] = meshgrid(edges);
Z = rand(10);

% 创建曲面对象,把FaceColor设为'flat'以支持面级着色
h = surf(X,Y,Z,'FaceColor','flat');

% 计算总面数:10x10的点对应9x9个面
num_faces = (size(X,1)-1)*(size(X,2)-1);
% 初始化颜色矩阵,默认用浅灰色(你可以改成白色[1 1 1]或其他颜色)
face_colors = repmat([0.8 0.8 0.8], num_faces, 1);

% 生成面的行列索引矩阵(1-based,对应网格的每个面)
[face_i, face_j] = meshgrid(1:size(X,1)-1, 1:size(X,2)-1);

% 1. 设置(0,0)对应的面(左下角第一个面)为绿色
idx_00 = sub2ind([9,9], 1, 1);
face_colors(idx_00, :) = [0 1 0];

% 2. 设置(1,1)对应的面(右上角最后一个面)为红色
idx_11 = sub2ind([9,9], 9, 9);
face_colors(idx_11, :) = [1 0 0];

% 3. 设置所有对角线的面为黄色(排除已设置颜色的首尾两个面)
diag_idx = find(face_i == face_j);
diag_idx = setdiff(diag_idx, [idx_00, idx_11]);
face_colors(diag_idx, :) = [1 1 0];

% 把颜色矩阵赋值给曲面对象
h.FaceVertexCData = face_colors;
% 可选:关闭边缘线,让面颜色更清晰
h.EdgeColor = 'none';

关键细节解释:

  • FaceColor设置:必须把FaceColor改成'flat',这样MATLAB才会读取FaceVertexCData里的颜色值为每个面着色,而不是用Z值映射颜色。
  • 面索引对应关系:MATLAB的网格是1-based索引,所以(0,0)对应的是第一个面(行1,列1),(1,1)对应的是最后一个面(行9,列9)。
  • 对角线面处理:我特意用setdiff排除了首尾两个已经设置颜色的面,如果你希望对角线的面包括这两个(哪怕它们被覆盖),直接删掉setdiff那一行就行。
  • 默认颜色:我用了浅灰色作为其他面的默认色,你可以根据需求改成任何RGB颜色,比如白色[1 1 1]或者蓝色[0 0 1]

内容的提问来源于stack exchange,提问作者zlon

火山引擎 最新活动