首页 > 解决方案 > 表面的渐变颜色

问题描述

我有以下 MATLAB 代码:

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

我需要在这个表面上画脸。坐标为 (0,0) 的面应为绿色,坐标为 (1,1) 的面应为红色。对角线上的所有面都应该是黄色的。

你能帮我画这幅画吗?

标签: matlab3ddata-visualizationmatlab-figuresurface

解决方案


如果您仔细查看该surf命令,您会发现,您可以设置自定义“颜色图”,然后将其代替Z数据用作颜色指示器。

所以,你只需要设置一个正确的“颜色图”。X那个必须与您的数据具有相同的维度Y,并且对于每个数据点,您必须指定[R, G, B]您选择的三元组,即[0, 1, 0]坐标[0, 0][1, 0, 0]坐标[1, 1]以及这两者之间的一些“对角线”插值。

幸运的是,你已经有了,看看你的X数据Y!添加两者将为绿色通道提供这种“对角线”插值。反之将给出正确的红色通道。(缩放有点损坏,因为您的值大于1.0,但这些会“剪裁”。)

这是增强的代码:

edges = linspace(0, 1, 10);
[X, Y] = meshgrid(edges);
Z = rand(10);
cm(:, :, 1) = (X + Y);          % Red channel
cm(:, :, 2) = 2 - cm(:, :, 1);  % Green channel
cm(:, :, 3) = zeros(size(X));   % Blue channel (empty)
h = surf(X, Y, Z, cm);          % No need for the FaceColor property

输出如下所示:

输出

希望有帮助!


推荐阅读