这个问题在这里已经有了答案:
8年前关闭。
Possible Duplicate:
Create random number within an annulus
我想在 annulus 内获得一个统一获得的随机点,即位于半径为
R1
的圆内的面积,但在半径为 R2
的圆之外,其中 R1 > R2
并且两个圆都以同一点为中心。我想避免使用拒绝抽样。如果可能,我希望解决方案类似于 this one - 用于计算圆内的随机点 - 我觉得它非常优雅和直观。也就是说,我也想避免使用平方根。
最佳答案
它很容易。使用极坐标,即为角度值 theta 生成一个随机值,为距原点的距离生成一个随机值。由于您的圈子都在同一个原点,这变得非常容易。
但注意:您可以通过均匀随机函数生成 theta 值,这很好,但是对于距离,您不能这样做,因为点将围绕原点聚集。
您必须考虑到圆的周长以 ^2 增长(您必须使用平方根的倒数)。
使用均匀分布的随机函数 rnd
(0..1) 它会是这样的:
theta = 360 * rnd();
dist = sqrt(rnd()*(R1^2-R2^2)+R2^2);
编辑 :要转换为笛卡尔坐标,您只需计算:
x = dist * cos(theta);
y = dist * sin(theta);
关于math - 在环(环)内生成均匀随机点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13064912/