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

4

我尝试使用以下代码在以原点为中心的球内生成随机点:

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

我得到的结果如下:随机点的球体 从图片中可以看出随机点集中在原点附近,看起来像高斯分布。我需要让随机点均匀地分布在球体内部,或将点的密集度从中心移动到另一点。怎么做呢?有人能帮忙吗? 提前感谢, Manu

可能是在球形体积内均匀分布随机点的采样的重复问题。 - buzjwa
1个回答

5

如果你调整你的radii行从:

radii = rand(no_of_spots,1)*radius;

至:

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

你应该获得一个更加统一的分布。
这是Knuth在《计算机程序设计艺术》第2卷中所描述的,并且在此处被引用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接