繁体   English   中英

在MATLAB中的3D立方体上执行2D切割

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM