如何使用 MATLAB 在球体内生成随机点
How to generate random points inside sphere using MATLAB
我尝试使用以下代码在原点使用以下命令在球体内生成随机点
no_of_spots = 3000
radius=20
rvals = (2)*rand(no_of_spots,1)-(1);
elevation = asin(rvals);
azimuth = 2*pi*rand(no_of_spots,1);
radii = rand(no_of_spots,1)*radius;
[point_x,point_y,point_z] = sph2cart(azimuth,elevation,radii);
我得到的结果是
从图中可以看出随机点集中在原点附近,即看起来像高斯分布。我需要均匀分布在球体内的随机点,或者需要将点的集中度从中心转移到另一个点。我该怎么做/谁能帮忙/
提前致谢,
马努
如果您从以下位置调整 radii
行:
radii = rand(no_of_spots,1)*radius;
收件人:
radii = (rand(no_of_spots,1).^(1/3))*radius;
你应该得到一个看起来更统一的分布。
这就是 Knuth 在 The Art of Computer Programming 中描述的内容。卷。 2 并被引用 here.
我尝试使用以下代码在原点使用以下命令在球体内生成随机点
no_of_spots = 3000
radius=20
rvals = (2)*rand(no_of_spots,1)-(1);
elevation = asin(rvals);
azimuth = 2*pi*rand(no_of_spots,1);
radii = rand(no_of_spots,1)*radius;
[point_x,point_y,point_z] = sph2cart(azimuth,elevation,radii);
我得到的结果是
从图中可以看出随机点集中在原点附近,即看起来像高斯分布。我需要均匀分布在球体内的随机点,或者需要将点的集中度从中心转移到另一个点。我该怎么做/谁能帮忙/ 提前致谢, 马努
如果您从以下位置调整 radii
行:
radii = rand(no_of_spots,1)*radius;
收件人:
radii = (rand(no_of_spots,1).^(1/3))*radius;
你应该得到一个看起来更统一的分布。
这就是 Knuth 在 The Art of Computer Programming 中描述的内容。卷。 2 并被引用 here.