【问题标题】:Generate random points inside hollow sphere with MATLAB使用 MATLAB 在空心球内生成随机点
【发布时间】:2017-04-14 19:24:48
【问题描述】:

我有一个函数(从 MATLAB 文档中复制)可以在球体内生成随机点。但是,球内的某些点是不允许的。如何在允许半径1<r<2 的空心球内生成随机点。换句话说,这些点应该位于 1 到 2 的半径上,因此 r = [0 1] 之间不允许有任何点。

编辑:完全忘记包含函数

function [x,y,z] = PointsInSphere(r,n)

rvals = 2*rand(n,1)-1;
elevation = asin(rvals);
azimuth = 2*pi*rand(n,1);
radii = r*(rand(n,1).^(1/r));
[x,y,z] = sph2cart(azimuth,elevation,radii);
end

【问题讨论】:

  • 您是否尝试在 3D 中生成半径为 1 的球和半径为 2 的球之间的随机位置?
  • @StackPlayer 完全正确。

标签: matlab math random probability


【解决方案1】:

换行

radii = r*(rand(n,1).^(1/r));

通过

x = (s/r)^r;
radii = r*(x+(1-x)*rand(n,1)).^(1/r);

其中r 是外半径,s 是内半径(新函数参数)。

这用 (x,1)-uniform 变量替换了用于在原始函数中获取半径的 (0,1)-uniform 变量。计算值 x 使得获得的半径具有原始分布,但 截断 到区间 (s,r)。这可确保生成的 3D 分布在所需区域上均匀

【讨论】:

    【解决方案2】:

    您可以轻松生成 2 个介于 0 和 1 之间的随机数。 使用第一个作为半径(将 1 添加到它,使其位于 [1,2] 中)。 将第二个随机数乘以 2pi。 将其从极坐标转换为笛卡尔坐标,您就应该完成了。

    编辑:对第二个角度执行相同操作以移动到 3D。

    【讨论】:

      猜你喜欢
      • 2018-03-31
      • 2019-06-29
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 2020-05-14
      • 2016-09-03
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多