我有两个3D阵列,一个包含电场的3D数据,另一个是我感兴趣的对象的3D蒙版,取这两个阵列的产品给我一个带有电场的阵列只是面具。我已经成功地创建了掩模的等值面,但是当我尝试制作掩模和电场阵列产品的等值面时,我得到的图形与我绘制掩模时的图形相同(这只是一个零的数组和1& #39; S)。有没有办法在isosurface上表示数据?
目前我只是将我的数组放入isosurface函数:
isosurface(mask)
,它给了我:
然后我尝试绘制我的蒙版和数据数组的产品:
isosurface(mask.*EArr)
我得到以下内容:
但是,如果我只使用代码查看一个切片
imagesc(mask(:,:,35).*EArr(:,:,35))
我明白了:
我要做的是将最后一张照片的切片视为3D对象,类似于我在第一张照片中将我的遮罩视为3D对象的方式。
答案 0 :(得分:3)
如果我理解得很好,你想在你的面具表面绘制你的场地。 为此,获取isosurface返回的补丁,然后在此补丁的顶点上插入字段。最后,使用生成的插值数据绘制它作为'FaceVertexCData'。 以下是虚拟数据的示例:
% PREPARATION
% ===========
% GENERATE A GRID
[X Y Z] = meshgrid([0:1/100:1],[0:1/100:1],[0:1/100:1]);
% GENERATE RANDOM DATA
DATA = zeros(101,101,101);
DATA(:) = interp3([0:1/10:1],[0:1/10:1],[0:1/10:1],rand(11,11,11),X(:),Y(:),Z(:),'cubic');
% GENERATE A RANDOM MASK
MASK = zeros(101,101,101);
MASK(:) = sqrt(sum([X(:)-0.5 Y(:)-0.5 Z(:)-0.5].^2,2)) - 0.3 - interp3([0:1/10:1],[0:1/10:1],[0:1/10:1],0.1*rand(11,11,11),X(:),Y(:),Z(:),'cubic');
%
% ACTUAL PROBLEM
% ==============
% EXTRACT THE MASK SURFACE
SURF = isosurface(X,Y,Z,MASK,0);
% INTERPOLATE DATA ON MASK SURFACE
DATA_SURF = interp3(X,Y,Z,DATA,SURF.vertices(:,1),SURF.vertices(:,2),SURF.vertices(:,3));
% PLOT THE MASK SURFACE AND DATA
hold on; axis square; axis([0 1 0 1 0 1]); view(3); camlight
patch('Faces',SURF.faces,'Vertices',SURF.vertices,'EdgeColor','none','FaceColor','interp','FaceVertexCData',DATA_SURF);
这给出了类似的东西:
答案 1 :(得分:0)
尝试使用isosurface(mask,th)
,其中th
是将创建isosurface的值。由于我不知道您的数据量,我不能建议您一个值。尝试不同的值,例如0.01