我试图(尽可能有效地)生成一个内半径球体内部点的随机均匀的三维分布 r_min
和外半径 r_max
,即贝壳。我在这里找到了一个类似的解决方案:在一个球形体积内对均匀分布的随机点进行采样,然而这只适用于整个球体 r_min=0
以及 r_max=1
. 这是使用以下代码完成的:
r = r_max*np.cbrt(np.random.uniform(low=r_min,high=r_max,size=nsamp))
phi = np.random.uniform(0,2*np.pi,nsamp)
theta = np.arccos( np.random.uniform(-1,1,nsamp)
什么时候 r_min=0
以及 r_max=1.0
,生成预期结果(沿x-y的二维投影):
但是,当我改变 r_max
或者 r_min
对于0和1以外的任何对象,我都没有得到预期的结果,这可能是由于使用了 np.cbrt()
. 在指定内半径和外半径时,如何正确地在这个球壳上生成均匀的随机点?
2条答案
按热度按时间mlmc2os51#
对球形体积内均匀分布的随机点进行采样的蛮力适应是生成三个均匀变量
x, y, z
每个都结束了[-r_max, r_max]
,并且只有在r_min <= (x**2 + y**2 + z**2)**0.5 <= r_max
vu8f3i0k2#
从https://math.stackexchange.com/questions/1885630/random-multivariate-in-hyperannulus在n=3维的超环是一个内半径的球壳的几何结构中,可以从均匀分布中随机抽取半径
r_min
和外部r_out
. 执行此操作的代码是在指定
r_min
以及r_out
.