You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

环形区域随机点生成两种方案的分布差异原因解析

环形区域内生成均匀随机点的两种方案差异解析

在由minRadius和maxRadius构成的环形区域内生成随机点时,常用转换公式为:

x = x' + r*cos(a)
y = y' + r*sin(a)

其中(x', y')是环形的原点,r是点到原点的距离,a是点对应的角度。下面解析两种生成方案的差异:

第一种方案:点偏向中心的本质原因

方案代码

function get_point_in_circle(x', y', minRadius, maxRadius)
{
  var a = random(360);
  var r = random_range(minRadius, maxRadius);
  return { 
    x : x' + r * cos(a),
    y : y' + r * sin(a),
  }
}

偏向中心的原因

这个方案的问题出在半径r的采样方式:它直接在[minRadius, maxRadius]范围内均匀取随机值,但环形区域的面积分布是随半径增大而增加的——半径为r附近的环形细带,面积是2πrΔr,也就是说,半径越大,对应的环形带面积越大。

如果要实现均匀分布,落在每个环形带里的点数量应该和带的面积成正比。但这个方案里,不管是小半径还是大半径的环形带,被选中的概率是一样的,导致小半径区域(靠近中心)的点密度远高于大半径区域,最终呈现出点偏向中心的结果,这不是视觉错觉,是实际的密度分布问题。

第二种方案:实现均匀分布的逻辑

方案代码

x = random_range(-maxRadius, maxRadius);
y = random_range(-maxRadius, maxRadius);

// 筛选出到原点距离在(minRadius, maxRadius)之间的点

均匀分布的原因

这个方案是先在以原点为中心、边长为2*maxRadius的正方形区域内均匀生成随机点,再过滤掉不在目标环形里的点。

正方形内的均匀采样,本质是平面上的面积均匀分布——每个单位面积内的点数量相同。过滤后,留在环形区域内的点自然也保持了这种均匀性:大半径附近的环形带面积大,自然会留下更多点;小半径区域面积小,留下的点也更少,完全符合环形区域内均匀分布的要求,所以不会出现偏向中心的情况。

内容的提问来源于stack exchange,提问作者Game Development

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 16:24:49