フィルターのクリア

Generating randomly distributed cylindrical fibers in 3D

3 ビュー (過去 30 日間)
Abdolrasol Rahimi
Abdolrasol Rahimi 2017 年 11 月 7 日
コメント済み: Walter Roberson 2021 年 8 月 30 日
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 件のコメント
Walter Roberson
Walter Roberson 2017 年 11 月 27 日
My browser is saying those .jpg contain errors :(
Abdolrasol Rahimi
Abdolrasol Rahimi 2017 年 12 月 26 日
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.

サインインしてコメントする。

採用された回答

KSSV
KSSV 2017 年 12 月 27 日
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 件のコメント
Abdolrasol Rahimi
Abdolrasol Rahimi 2018 年 1 月 2 日
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?

サインインしてコメントする。

その他の回答 (1 件)

Gabriel Gaal
Gabriel Gaal 2018 年 9 月 23 日
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 件のコメント
amira soliman
amira soliman 2021 年 8 月 30 日
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 2021 年 8 月 30 日
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);

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeGeometry and Mesh についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by