我有一个装满小立方体的3D立方体。用小立方体填充后,我可以看到它的面孔。我想通过x,y或z轴执行切割,这样我就可以在某些点看到内部结构。这是立方体的图像,
我想看看这个立方体的内部结构。搜索后,我发现可以使用slice
。我用过这段代码,
figure
[x,y,z] = meshgrid(1:100);
v = repmat(magic(100),[1 1 100]);
%
% % Define the slice plane
[xi, yi] = meshgrid(1:100);
zi = xi;
%
% % Slice it
slice(x,y,z,v,xi,yi,zi);
drawnow
但是我得到了完全不同颜色的结果。结果如下,
您能否告诉我如何修复上面的代码以产生通过轴的切割?另外,如果您能解释如何完成此过程,我将非常感激,因为我不完全理解上面的代码。
答案 0 :(得分:1)
重新。第一个问题 - 我不知道用Hoki的代码切割你的多重立方体的简单方法(但见下文)。 polyxpoly可能会有所帮助,但仍需要投影到切片的平面上。
重新。第二个问题 - 切片是切割体积数据,"意思是密度,它在体积的每个点都有一个值。 repmat(magic(...))
行正在制作100x100x100(3-d)阵列,阵列中每个100 * 100 * 100 = 1,000,000个网格点都有一个数字。碰巧这些点具有介于1和100 ^ 2之间的不同值,因此您获得了不同的颜色。
slice
的效果不佳,因为它使用patch
制作多边形而不是使用体积数据。另一种方法是以体积方式制作立方体。此代码应自行运行,但是 - 小心 - 未经过测试。它独立于你提到的Hoki代码。
face=ones(10,10); %make a small cube, 10x10x10
middle=zeros(10,10);
middle(1,1:10)=1;
middle(10,1:10)=1;
middle(1:10,1)=1;
middle(1:10,10)=1;
small_cube=cat(3,face,repmat(middle,1,1,8),face);
% Now make an array of them - ten in each direction, so 100x100x100
v=repmat(small_cube,10,10,10);
% Now define the slice plane and slice as above.
[xi, yi] = meshgrid(1:100);
zi = xi;
figure;
slice(x,y,z,v,xi,yi,zi);
drawnow
修改:在上文中,0
适用于不属于多维数据集的点,1
适用于点。这是多维数据集的voxel表示。 face
用于顶部和底部,middle
用于顶部和底部之间的边缘切片。第一个repmat
堆叠了八个中间片,就像一个汉堡馅饼。 cat
将face
放在该堆栈的顶部和底部,就像发髻的两半一样。然后第二个repmat
在大立方体中生成999个其他小立方体。
修改2 :在上面的代码中用zeros
替换NaN
应该使多维数据集的内部透明。 (也未经过测试!)