Randomly generated cubes in cylindrical volumes in MATLAB
2 views (last 30 days)
Show older comments
Hey
I want to generate n cubes of a given side length at any position within a given cylinder volume. Following the condition of not intersecting each other.
Can someone help me with this.
Regards
Om
5 Comments
Accepted Answer
KSSV
on 26 Sep 2023
% Draw cyliner
Radius = 1. ; % Radius of the cylindrical shell
Height = 2. ; % Height of the Cylinder
%
NH = 7 ; % Number of Elements on the Height
NT = 10 ; % Number of Angular Dicretisation
% Discretizing the Height and Angle of the cylinder
nH = linspace(0,Height,10) ;
nT = linspace(0,2*pi,100) ;
[H, T] = meshgrid(nH,nT) ;
% Convert grid to cylindrical coordintes
X = Radius*cos(T);
Y = Radius*sin(T);
Z = H ;
% DRaw randoom cubes
% First make random points so that cubes donot intersect
L = 0.2 ; % L, B, H of cube
dL = L+0.1 ;
x = -(Radius-L):dL:(Radius-L) ;
y = x ;
z = L:dL:Height-L ;
%
[xx,yy,zz] = meshgrid(x,y,z) ;
xx = xx(:) ; yy = yy(:) ; zz = zz(:) ;
% Remove points lying outside the cylinder
idx = inpolygon(xx,yy,(Radius-L)*cos(nT),(Radius-L)*sin(nT)) ;
xx = xx(idx) ; yy = yy(idx) ; zz = zz(idx) ;
% randomly select few points
N = 100 ;
idx = randsample(1:length(xx),N) ;
xc = xx(idx) ; yc = yy(idx) ; zc = zz(idx) ;
figure
hold on
plot3(X',Y',Z,'k')
plot3(X,Y,Z,'k')
axis equal
for i = 1:N
plotcube([L L L],[xc(i) yc(i) zc(i)]);
drawnow
end
2 Comments
More Answers (0)
See Also
Categories
Find more on Curve Fitting Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!