Randomly generated cubes in cylindrical volumes in MATLAB

3 visualizzazioni (ultimi 30 giorni)
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 Commenti
hongtao xu
hongtao xu il 25 Set 2023
@Image AnalystI need to output a 3D stereogram because I need to import into comsol.just randomly place them one-by-one at a random location wherever they might fit,Because the volume of these cubes doesn't need to fill the entire cylinder,the cube I set is about 85 percent volume,and the rest is air.

Accedi per commentare.

Risposta accettata

KSSV
KSSV il 26 Set 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
You may download the function plot cube.

Più risposte (0)

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by