可能的重复:
在环内创建随机数
我想获得一个均匀获得的随机点annulus,即位于半径圆内的面积R1
,但在半径圆之外R2
, where R1 > R2
并且两个圆的圆心都在同一点。我想避免使用拒绝抽样。
如果可能的话,我希望解决方案类似于this one- 用于计算圆内的随机点 - 我发现它非常优雅和直观。也就是说,我也想避免使用平方根.
这很容易。使用极坐标,即为角度值 theta 生成一个随机值,并为距原点的距离生成一个随机值。由于您的圆圈都位于同一原点,因此这变得非常容易。
但请注意:您可以通过均匀随机函数生成 theta 值,这很好,但对于距离,您不能这样做,因为这样这些点将聚集在原点周围。
您必须考虑到圆的周长以 ^2 增长(您必须使用平方根的倒数)。
使用均匀分布随机函数rnd
(0..1) 会是这样的:
theta = 360 * rnd();
dist = sqrt(rnd()*(R1^2-R2^2)+R2^2);
EDIT:要转换为笛卡尔坐标,您只需计算:
x = dist * cos(theta);
y = dist * sin(theta);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)