Randomly generated cubes in cylindrical volumes in MATLAB

2 Ansichten (letzte 30 Tage)
hongtao xu
hongtao xu am 23 Sep. 2023
Kommentiert: KSSV am 9 Okt. 2023
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 Kommentare
hongtao xu
hongtao xu am 25 Sep. 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.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

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

Weitere Antworten (0)

Kategorien

Mehr zu Curve Fitting Toolbox finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by