Fill cylinder inside a matrix

조회 수: 2 (최근 30일)
DG
DG 2019년 2월 12일
댓글: Matt J 2021년 1월 3일
Given a 3d matrix:
vx = 1; % mm
vy = 1; % mm
vz = 1; % mm
nx = 500; %Number of elements in x direction
ny = 500; %Number of elements in y direction
nz = 100; %Number of elements in z direction
x = linspace(-vx/2,vx/2,nx);
y = linspace(-vy/2,vy/2,ny);
z = linspace(-vz/2,vz/2,nz);
[X,Y,Z] = ndgrid(x,y,z);
mat= zeros(size(X)); %Matrix to fill with cyliinders
and 2 random points on the edge of the cube,
How can I make a cylinder of radius R between those 2 points?
I want to fill up the binary matrix with 1 where the cylinder is placed and 0 everywhere else.
Thank you for your help.

채택된 답변

Matt J
Matt J 2019년 2월 13일
편집: Matt J 2019년 2월 13일
Suppose the two end points are r1=[x1,y1,z1], r2=[x2,y2,z2]
[X,Y,Z] = ndgrid(x,y,z);
dXYZ=[X(:),Y(:),Z(:)].'-r1(:);
u=r1-r2;
u=repmat(u(:)./norm(u),1,nx*ny*nz);
mat=vecnorm( cross(dXYZ,u) ,2,1 )<=R;
mat=reshape(mat,nx,ny,nz);
  댓글 수: 3
Matt J
Matt J 2019년 2월 13일
편집: Matt J 2019년 2월 13일
Yes, u is the direction vector of the central line of the cylinder. The left hand side of the inequality is the formula for the distance of points in your ndgrid to that line.
Matt J
Matt J 2021년 1월 3일
It should be giving you filled cylinders.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Matt J
Matt J 2019년 2월 12일
편집: Matt J 2019년 2월 12일
Choose a coordinate (xcenter,ycenter) where the cylinder will be centered and do,
mat = ( (x-xcenter).^2 + (y-ycenter).^2 <= R^2 );
  댓글 수: 1
DG
DG 2019년 2월 12일
But I want cylinder between two locations. This won't work for a tilted cylinder, I think. Something like the attached picture. In this case, if I take a slice in z axis, it will form some kind of ellipse and not a circle.
Hope this makes it clear.
Thank you!

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Computational Geometry에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by