MATLAB Answers

0

How to generate a random point in the volume of a cylinder

Musa Mustapha さんによって質問されました 2019 年 6 月 24 日
最新アクティビティ John D'Errico
さんによって コメントされました 2019 年 6 月 24 日
I have a cylinder in three-dimensions with a long-axis defined by the endpoints 𝑝1 and 𝑝2, and radius 𝑅. p1=[0.5, 0.3, 1]; p2=[0.4, 0.5, 0.7]; R=0.5;

  2 件のコメント

James Tursa
2019 年 6 月 24 日
What have you done so far? What specific problems are you having with your code? Do you know how to generate a random point inside a circle? Do you know how to rotate vectors in 3D space?
John D'Errico
2019 年 6 月 24 日
I showed you how to rotate vectors in 3-d space.

サインイン to comment.

1 件の回答

John D'Errico
回答者: John D'Errico
2019 年 6 月 24 日
 採用された回答

Since you already have an answer posted... Pretty easy, actually. So two points that define the ends of the cylinder, and a known radius.
p1=[0.5, 0.3, 1];
p2=[0.4, 0.5, 0.7];
R=0.5;
N = 100000; % # of points to generate
First, generate a random point along the cylinder axis. The vector that defines the axis is given by:
axialvec = p2 - p1;
axialvec = axialvec/norm(axialvec);
axialpoints = p1 + (p2 - p1).*rand(N,1);
Next, we work in a cylindrical coordinate system around the centerline. Generate points at random inside a circle of radius R, in TWO dimensions.
circr = sqrt(rand(N,1))*R;
circtheta = rand(N,1)*2*pi;
circpoints = [cos(circtheta).*circr,sin(circtheta).*circr];
Rotate the points into the plane perpendicular to the axis.
axnull = null(axialvec);
points = axialpoints + circpoints*axnull.';
And plot.
plot3(points(:,1),points(:,2),points(:,3),'.')
grid on
box on
axis equal
Rotate it around to convince yourself the points form a cylinder.
untitled.jpg

  0 件のコメント

サインイン to comment.



Translated by