我正在尝试使用3D MATLAB
函数在isosurface
的一个图中绘制两个框。
因此,以下代码用于定义值为1的两个不同框的“内部”区域。
[x, y, z] = meshgrid (-3:0.1:3, -3:0.1:3, -3:0.1:3);
BoxA = (x(:) >= -2 & x(:) <= 1) & (y(:) >= -2 & y(:) <= 1) & (z(:) >= -2 & z(:) <= 1);
BoxA = reshape(BoxA, size(x));
BoxB = (x(:) >= -1 & x(:) <= 2) & (y(:) >= -1 & y(:) <= 2) & (z(:) >= -1 & z(:) <= 2);
BoxB = reshape(BoxB, size(x));
这是用于在同一图上绘制上述框的代码。
figure; hold on;
colormap('autumn');
isosurface(BoxA,0.5);
colormap('winter');
isosurface(BoxB,0.5);
legend('BoxA', 'BoxB');
alpha(0.3); hold off;
我定义了两个不同的色图autumn
和winter
,但是我只有两个带有相同色图winter
的模糊框。
有些人可能认为isosurface
对于绘制3D框是一个过大的杀伤力,但我也想对3D椭球做类似的工作。
有没有人提供建议?
答案 0 :(得分:2)
函数colormap
将颜色映射应用于图形(整个窗口)。自从几年前,有可能在一个窗口内不同颜色的地图应用到各轴,通过明确赋予colormap
功能的轴手柄。但是无法为轴内的各个组件分配颜色图。
可以为面片中的每个多边形(或实际上每个顶点)分配自己的颜色。也可以指定一个单一的颜色所有多边形。这可能就是您想要的。
这是修改您创建的补丁的一种方法:
figure; hold on;
h1 = patch(isosurface(BoxA,0.5));
h1.EdgeColor = 'none';
h1.FaceColor = [1,0,0];
h1.FaceAlpha = 0.7;
h2 = patch(isosurface(BoxB,0.5));
h2.EdgeColor = 'none';
h2.FaceColor = [0,1,0];
h2.FaceAlpha = 0.5;
legend('BoxA', 'BoxB');
我们不是在没有输出参数的情况下使用isosurface
(它会创建补丁对象),而是将其与一个输出参数一起使用。此输出是绘制补丁对象的信息。我们将其传递到patch
函数中,该函数又返回补丁对象的句柄。我们需要此句柄来修改补丁。