我试图在MATLAB中用3D 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椭球做类似的工作。
有谁能给我建议吗?
发布于 2019-02-02 08:13:56
函数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函数,该函数反过来返回修补程序对象的句柄。我们需要这个句柄来修改补丁。
https://stackoverflow.com/questions/54489853
复制相似问题