python - 内外半径球壳内点的随机均匀 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_max
或r_min
任何一个时,我都没有得到预期的结果,这可能是由于使用了np.cbrt()
. 如何在指定内半径和外半径的同时在这个球壳上正确生成均匀的随机点?
解决方案
对球形体积内均匀分布的随机点进行采样的蛮力适应将是在x, y, z
每个上方生成三个均匀变量[-r_max, r_max]
,并且仅在以下情况下保持 r_min <= (x**2 + y**2 + z**2)**0.5 <= r_max
推荐阅读
- java - 函数发送不可解码的文本 Android / Java
- java - Java Maven 项目无法将数据写入 Firebase 实时数据库
- javascript - 未调用脚本标记上的危险SetInnerHtml 中的函数
- c# - 在调用 C# winforms 应用程序时使用更新的数据重新加载表单
- shell - 这个 shell 脚本只处理一个文件
- android - BLE 广告数据在一段时间后停止工作(溢出?)
- angularjs - 每当输入字段更改时,如何将输入字段的值记录到控制台
- automation - 黄瓜功能插件给出“步骤'xxxxx'没有匹配的胶水代码”
- c# - 向 Microsoft Visual Studio 安装程序项目添加启动条件(检查应用程序是否正在运行)
- php - 反向显示 .tpl 循环