출력을 원하는 항목이 무엇인지 확실하지 않지만 다음과 같은 방법으로 모양을 정의 할 수 있습니다. 여기서 모양은 모양이 모양 안에 있는지 또는 논리 값이 반환되는지를 나타내는 함수에 의해 정의됩니다. 아니. 이렇게하면 원하는 그리드 해상도를 가질 수 있습니다.
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
나는 당신이 말하는 것을 완전히 따르지 않습니다. 모양에 대한 공평성에서 그렇게 할 수 있다면 문제는 무엇입니까? 예를 들어, r = sqrt (x^2 + y^2 + z^2) 인 구를 예로 들자. 그건 간단하지 미만 - 또는 - 평등에 matlab에 테스트입니다. 3 개의 좌표 큐브를 정의하십시오. 하나는 각 복셀의 x 좌표로, 다른 하나는 각 복셀의 y 좌표로, 다른 하나는 z 좌표로 정의하십시오. 위의 방정식을 평가하십시오. 실린더, 피라미드 또는 방정식 세트로 설명 할 수있는 모든 솔리드에 대해 동일한 작업을 수행 할 수 있습니다. 답장을 보내 주셔서 감사합니다. – AnonSubmitter85