Filter löschen
Filter löschen

Generating randomly distributed cylindrical fibers in 3D

3 Ansichten (letzte 30 Tage)
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 Kommentare
Walter Roberson
Walter Roberson am 27 Nov. 2017
My browser is saying those .jpg contain errors :(
Abdolrasol Rahimi
Abdolrasol Rahimi am 26 Dez. 2017
Hi Walter,
I am sorry I thought that I posted the new version of images, but it seems not. Sorry for late response.
I have attached the new version of images. Please let me know if it works for you.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

KSSV
KSSV am 27 Dez. 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);
  1 Kommentar
Abdolrasol Rahimi
Abdolrasol Rahimi am 2 Jan. 2018
Thank you for the answer. The code is written nicely. I tried to modify the code to have a solid cylinder instead of being hollow, but I was not successful. How can I change it to have a solid cylinder?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Gabriel Gaal
Gabriel Gaal am 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 Kommentare
amira soliman
amira soliman am 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
Walter Roberson am 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);

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by