簡體   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