使用 MATLAB 在空心球内生成随机点
Generate random points inside hollow sphere with MATLAB
我有一个函数(从 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
您可以轻松生成2个介于0和1之间的随机数。
使用第一个作为半径(向其添加 1,使其在 [1,2] 中)。
将第二个随机数乘以 2pi。
将其从极坐标转换为笛卡尔坐标,您应该完成了。
编辑:对第二个角度执行相同操作以移动到 3D。
替换行
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
) 替换了用于获取原始函数中的半径的 (0
,1
)-uniform 变量-统一变量。计算值 x
使得获得的半径具有原始分布,但 截断 到区间 (s
,r
)。这可确保生成的 3D 分布在所需区域上 均匀 。
我有一个函数(从 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
您可以轻松生成2个介于0和1之间的随机数。 使用第一个作为半径(向其添加 1,使其在 [1,2] 中)。 将第二个随机数乘以 2pi。 将其从极坐标转换为笛卡尔坐标,您应该完成了。
编辑:对第二个角度执行相同操作以移动到 3D。
替换行
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
) 替换了用于获取原始函数中的半径的 (0
,1
)-uniform 变量-统一变量。计算值 x
使得获得的半径具有原始分布,但 截断 到区间 (s
,r
)。这可确保生成的 3D 分布在所需区域上 均匀 。