2017-12-14 8 views
1
穴またはドーナツ形状等を有するシリンダと、シリンダのような図の下に与えられるように、私は enter image description here

MATLABを使用してさまざまな図形の3D行列を生成するにはどうすればよいですか?

Iは以下のように以下のコードを使用して3Dの一部の内部キューブとキューブを生成しようとした異なる形状のための3Dマトリックスを生成しようとしてい

% numbers are arbitrary 
cube=zeros(11,11,11); 
cube(3:9,3:9,3:9)=5; % Create a cube inside the region 
% Boring: faces of the cube are a different color. 
cube(3:9,3:9,3)=2; 
cube(3:9,3:9,9)=2; 
cube(3:9,3,3:9)=2; 
cube(3:9,9,3:9)=2; 
cube(3,3:9,3:9)=2; 
cube(9,3:9,3:9)=2; 
vold3d('Cdata',cube,'alpha',cube/5) 

と私も、私はデカルト座標系におけるこれらの形状を生成することができ enter image description here

以下のような結果を得ました。しかし、私は行列として生成することができませんでした。

どのように上記の形状の3Dマトリックスを生成できますか?この行列は、128x128x128または512x512x512サイズにすることができます。誰も助けることができますか?事前に感謝します

+0

2次元画像から3次元モデルに移行しようとしていますか?あるいは、シリンダーなどの数式を使用するだけですか? – AnonSubmitter85

+0

私は形状が必要ではありません...私は内部構造も必要です。それが3Dマトリックス、すなわちボクセルを探している理由です。私は円筒と球の方程式を使ってオブジェクトを作成しようとしました。しかし、私はデカルト座標系でポイントを見つけることができます、私は各ボクセルの値を定義することはできません。 – manoos

+0

私はあなたが言っていることに完全に従っていません。あなたがシェイプのためのeqautionからそれを行うことができれば、問題は何ですか?たとえば球がある場合、その方程式はr <= sqrt(x^2 + y^2 + z^2)です。これは単純なless-than-or-equal-to-matlabのテストです。 3つの座標キューブを定義します.1つは各ボクセルのx座標、もう1つは各ボクセルのy座標、もう1つはz座標です。次に、上の方程式を評価します。シリンダー、ピラミッド、または方程式で記述できるソリッドについても同じことができます。 – AnonSubmitter85

答えて

0

私はあなたの出力が何であるかは完全にはわかりませんが、形状が形状の内部にあるかどうかを示す論理値を返す関数によって定義されるない。この方法で、必要なグリッド解像度を自由に設定できます。

function q47822954 
RESOLUTION = 5E-2; 
[XX,YY,ZZ] = meshgrid(-5:RESOLUTION:5); 
%% Cylinder 
% Define cylinder: 
x0 = 1; y0 = 0; 
r_min = 0.8; r_max = 1; 
h_min = -1; h_max = 1; 

cyl = inCylinder(x0,y0,r_min,r_max,h_min,h_max,[XX(:),YY(:),ZZ(:)]); 
figure(); scatter3(XX(cyl),YY(cyl),ZZ(cyl)); 
%% Torus 
% Define torus: 
R = 3; 
r = 1; 
z0 = -1; 
tor = inTorus(x0,y0,z0,R,r,[XX(:),YY(:),ZZ(:)]); 
figure(); scatter3(XX(tor),YY(tor),ZZ(tor)); 
%% Ellipsoid 
% Define ellipsoid: 
a = 1; b = 2; c = 3; 
ell = inEllipsoid(x0,y0,z0,a,b,c,[XX(:),YY(:),ZZ(:)]); 
figure(); scatter3(XX(ell),YY(ell),ZZ(ell)); 
end 

function tf = inCylinder(x0,y0,r_min,r_max,h_min,h_max,xyz) 
    % xyz is a N-by-3 vector of cartesian coordinates to test 
    [~,rho,z] = cart2pol(xyz(:,1)-x0,xyz(:,2)-y0,xyz(:,3)); 
    tf = rho >= r_min & rho <= r_max & z >= h_min & z <= h_max; 
end 

function tf = inTorus(x0,y0,z0,R,r,xyz) 
    % Torus around the z axis 
    assert(R>r); % make sure that this is a torus and not something else 
    tf = (R - sqrt((xyz(:,1)-x0).^2 + (xyz(:,2)-y0).^2)).^2 + (xyz(:,3)-z0).^2 < r^2; 
end 

function tf = inEllipsoid(x0,y0,z0,a,b,c,xyz) 
    tf = (xyz(:,1)-x0).^2/a^2 + (xyz(:,2)-y0).^2/b^2 + + (xyz(:,3)-z0).^2/c^2 <= 1; 
end 

結果:

Cylinder

Torus

Ellipsoid

また3d triangulationを使用して、同様の何かを行うことができます。

+0

ご返信ありがとうございます。上のプログラムでは、デカルト座標系で球または円柱を開発しました。しかし、私はShepp-Loganのファントムのようなものを探しています。すなわち3Dボクセルとして使用される。 – manoos

+0

@manoosこれはあなたの質問で言及すべきことのようなものです。 –

関連する問題