Generating randomly distributed cylindrical fibers in 3D
3 views (last 30 days)
Show older comments
Abdolrasol Rahimi
on 7 Nov 2017
Commented: Walter Roberson
on 30 Aug 2021
Hello,
I am trying to Generate a 3D structure with randomly distributed cylindrical fibers. I would appreciate any help or any code that help me to have a quick start.
Thanks, Hamed
4 Comments
Accepted Answer
KSSV
on 27 Dec 2017
With the below code..you can draw a cylinder of given radius and height....ans also you can rotate this cylinder to any arbitrary angle.
% Units are considered in MKS system
Radius = 0.1 ; % Radius of the cylindrical shell
theta = 360. ; % Angle of the Cylinder
Height = 20. ; % Height of the Cylinder
%
NH = 20 ; % Number of Elements on the Height
NT = 50 ; % Number of Angular Dicretisation
%
nel = NH*NT ; % Total Number of Elements in the Mesh
nnel = 4 ; % Number of nodes per Element
% Number of points (nodes) on the Height and Angluar discretization
npH = NH+1 ;
npT = NT+1 ;
nnode = npH*npT ; % Number of nodes
% Discretizing the Height and Angle of the cylinder
nH = linspace(0,Height,npH) ;
nT = linspace(0,theta,npT)*pi/180 ;
[H, T] = meshgrid(nH,nT) ;
% Convert grid to cylindrical coordintes
X = Radius*cos(T);
Y = Radius*sin(T);
Z = H ;
surf(X,Y,Z) ;
% axis equal
% axis([-5 5 -5 5 -10 10])
%%Rotate cylinder
% set up rotation matrix:
theta = 90; % angle in degrees
theta = theta* pi/180;
R = [cos(theta) 0 sin(theta); 0 1 0; -sin(theta) 0 cos(theta)];
% get points at the two rings and rotate them separately:
P = [X(:) Y(:) Z(:)] ;
Q = P*R;
% reassemble the two sets of points into X Y Z format:
X1 = reshape(Q(:,1),npT,npH) ;
Y1 = reshape(Q(:,2),npT,npH) ;
Z1 = reshape(Q(:,3),npT,npH) ;
figure;
surf(X1,Y1,Z1);
More Answers (1)
Gabriel Gaal
on 23 Sep 2018
Hi KSSV,
I am trying to use your code, and despite the fact it generates a hollow cylinder, it does not rotate under a arbitrary angle. This code only works for 90, 180, 270 and 360. I am trying to fix it but I am new at MatLab and I having a hard time to doing it. Can you spare a few more thoughts on it?
2 Comments
amira soliman
on 30 Aug 2021
can you please help me to do that if you have a solution because i am trying to have a code to draw randomly oriented fiber in a box
Walter Roberson
on 30 Aug 2021
Create a cylinder in fixed coordinates, and then apply a general rotation matrix to the coordinates
RA = rand(1,3) * 2*pi;
M = makehgtform('xrotate', RA(1), 'yrotate', RA(2), 'zrotate', RA(3));
XYZ0 = [X1(:), Y1(:), Z1(:), zeros(numel(X1),1)];
RXYZ0 = XYZ0 * M; %matrix multiplication
X1R = RXYZ0(:,1);
Y1R = RXYZ0(:,2);
Z1R = RXYZ0(:,3);
See Also
Categories
Find more on Geometry and Mesh 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!