如何使用MATLAB在球体内生成随机点

时间:2017-10-19 01:59:14

标签: matlab random distribution

我尝试使用以下命令在中心位置生成随机点,使用以下代码

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

我的结果为sphere with random points

从图中可以看出随机点集中在原点附近,即看起来像高斯分布。我需要在球体内均匀分布的随机点,或者需要将点的浓度从中心移到另一点。我怎么能这样做/任何人都可以帮助/ 提前致谢, 马努

1 个答案:

答案 0 :(得分:5)

如果您从以下位置调整radii行:

radii = rand(no_of_spots,1)*radius;

要:

radii = (rand(no_of_spots,1).^(1/3))*radius;

您应该获得更加统一的分布。

这就是Knuth在计算机编程艺术中所描述的。卷。 2 并引用here