在 Matlab 中创建球体,根据数据改变表面颜色

计算科学 matlab
2021-12-25 19:12:35

我正在尝试在 Matlab 中创建一系列随机分布的球体,三个将是三个子集。我希望每个子集都有不同的颜色。我正在使用一个结构,因为每个球体也将具有与之相关的不同属性。我尝试使用颜色图和 set(...'FaceColor'..) 但遇到了一些困难。请帮忙。

for n = 1:100
    Bslice.cell(n).index = n; 
    Bslice.cell(n).type = 'Tyep1'; % Type2, Type3
     Bslice.cell(n).location = round(rand(1, 3)*10);
end 

%%
[x,y,z] = sphere;

for n = 1:10
    hold on 
    grid on
    surfl(x-Bslice.cell(n).location(1), y-Bslice.cell(n).location(2), z-        Bslice.cell(n).location(3), ones(size(); 
    shading interp
    % colormap(hot(100))
end
1个回答

让我明确一点,为由 绘制的对象中的每个表面FaceColor分配特定的单一颜色,您将丢失照明信息。patchsurfl

如果要修改FaceColor每个球,可以添加一个color来表示颜色(这里我使用到原点的距离),将其重新缩放为 RGB 矢量(我也假设Bslice.cell(n).location是光源的方向surfl

clear all;close all;
for n = 1:100
    Bslice.cell(n).index = n; 
    Bslice.cell(n).type = 'Tyep1'; % Type2, Type3
    Bslice.cell(n).location = round(rand(1, 3)*10);
    color(n) = sqrt(sum(Bslice.cell(n).location.^2));
end 
color = repmat(color,3,1)/max(color);

[x,y,z] = sphere;

for n = 1:10
    hold on 
    grid on
    h(n) = surfl(x-Bslice.cell(n).location(1), ...
          y-Bslice.cell(n).location(2), ...
          z-Bslice.cell(n).location(3), ...
          Bslice.cell(n).location); 
set(h(n),'FaceColor',color(:,n))
view(3);
end

球体1

或者你的意思是每一套你都使用这样的不同colormap

球体2

球体3

球体4