私はあなたの出力が何であるかは完全にはわかりませんが、形状が形状の内部にあるかどうかを示す論理値を返す関数によって定義されるない。この方法で、必要なグリッド解像度を自由に設定できます。
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
結果:
また3d triangulationを使用して、同様の何かを行うことができます。
2次元画像から3次元モデルに移行しようとしていますか?あるいは、シリンダーなどの数式を使用するだけですか? – AnonSubmitter85
私は形状が必要ではありません...私は内部構造も必要です。それが3Dマトリックス、すなわちボクセルを探している理由です。私は円筒と球の方程式を使ってオブジェクトを作成しようとしました。しかし、私はデカルト座標系でポイントを見つけることができます、私は各ボクセルの値を定義することはできません。 – manoos
私はあなたが言っていることに完全に従っていません。あなたがシェイプのためのeqautionからそれを行うことができれば、問題は何ですか?たとえば球がある場合、その方程式はr <= sqrt(x^2 + y^2 + z^2)です。これは単純なless-than-or-equal-to-matlabのテストです。 3つの座標キューブを定義します.1つは各ボクセルのx座標、もう1つは各ボクセルのy座標、もう1つはz座標です。次に、上の方程式を評価します。シリンダー、ピラミッド、または方程式で記述できるソリッドについても同じことができます。 – AnonSubmitter85