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

15 ビュー (過去 30 日間)
Musa Mustapha
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
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
John D'Errico 2019 年 6 月 24 日
I showed you how to rotate vectors in 3-d space.

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

採用された回答

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 件)

カテゴリ

Help Center および File ExchangeSpectral Measurements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by