首页 > 解决方案 > 内外半径球壳内点的随机均匀 3D 分布

问题描述

我正在尝试(尽可能有效地)生成随机均匀的 3D 点分布在一个内半径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,它产生预期的结果(沿 xy 的二维投影):

在此处输入图像描述

但是,当我更改为0 和 1 以外的任何一个r_maxr_min任何一个时,我都没有得到预期的结果,这可能是由于使用了np.cbrt(). 如何在指定内半径和外半径的同时在这个球壳上正确生成均匀的随机点?

标签: pythonnumpymatplotlibrandomcoordinates

解决方案


对球形体积内均匀分布的随机点进行采样的蛮力适应将是在x, y, z每个上方生成三个均匀变量[-r_max, r_max],并且仅在以下情况下保持 r_min <= (x**2 + y**2 + z**2)**0.5 <= r_max


推荐阅读