[英]Performing 2D cut on 3D cube in MATLAB
我有一个充满小立方体的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
但是我得到的结果是完全不同的颜色。 结果是这样
您能告诉我如何修复上面的代码以产生穿过轴的切口吗? 另外,如果您能解释一下此过程是如何完成的,因为我不完全理解上面的代码,我将不胜感激。
回覆。 第一个问题-我不知道直接使用Hoki的代码分割多多维数据集的简单方法(但请参见下文)。 polyxpoly可能会有所帮助,但仍然需要投影到切片的平面上。
回覆。 第二个问题-切片正在切割“体积数据”,这意味着诸如密度之类的东西在体积的每个点上都有值。 repmat(magic(...))
行正在制作一个100x100x100(3-d)数组,该数组在数组的100 * 100 * 100 = 1,000,000个网格点中的每个点都有一个数字。 碰巧这些点的值在1到100 ^ 2之间,因此您得到的颜色也不同。
Hoki的代码不适用于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
表示属于立方体的点。 这是多维数据集的体素表示。 face
用于顶部和底部, middle
用于顶部和底部之间的一部分边缘。 第一个repmat
像汉堡肉饼一样堆积了八层中间的东西。 cat
在面包堆的顶部和底部都放了一张face
,就像面包的两半一样。 然后第二个repmat
在大立方体中制作出其他999个小立方体。
编辑2 :在上面的代码中用NaN
替换zeros
应使多维数据集的内部透明。 (也未测试!)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.