在矩形内生成随机点(均匀)

Lio*_*gan 5 random algorithm geometry 2d distribution

在矩形内生成随机点(均匀)

这假设是一个简单的问题.

但是,在RANDOM_DATA主页中,我发现了以下注释:

但是,如果我们将随机值(u1,u2)天真地缩放为(A*u1,B*),我们将无法在非等边[0,A] x [0,B]的矩形的简单情况下实现均匀分布. U2).在这种情况下,宽的短区域的预期点密度将不同于窄的高区域的预期点密度.如果绘制点,则没有均匀性是最明显的.

我发现它很奇怪......我无法弄清楚为什么这种缩放会影响均匀性.

我错过了什么?

编辑:

谢谢Patrick87和missingno.我正在寻找声明的理论原因.我现在明白,原因不是理论上的,而是实际的 - 浮点值的粒度.

如果我将在0和1之间生成两个统一的浮点(由于浮点值表示的性质,这本身就是个问题.在这里查看算法) - 粒度将受到限制.

假设在0和1之间存在X个不同的值.通过缩放(u1,u2)到(u1,2*u2),我们将在[0,u1]范围内具有X个不同的值,并且在范围内具有X个不同的值[ 0,2*U2.对于面积均匀性,[0,2*u2]中的不同值应比[0,u1]中的两倍多.

鉴于此,请允许我更改我的问题:

我应该如何在矩形内生成随机点(按区域均匀分布)?

unk*_*ulu 5

该陈述是不正确的,两个独立统一措施的直接产品是一个统一的衡量标准.这可以显示如下:

一种用于随机点概率击中边的矩形ab等于概率第一坐标击中与长度段a和第二坐标击中与长度段b.(我们正在讨论矩形到轴的投影).

第一个概率是a / A,第二个概率是b / B.由于这些变量是独立的,概率乘以,因此产生的概率是ab / AB,所以我们有一个统一的2D分布,因为概率与矩形的面积成正比.该公式相对于a和是对称的b,因此引用中的观察对于窄矩形和宽矩形是错误的.


Pat*_*k87 2

我应该如何在矩形内生成随机点(按区域均匀分布)?

这应该有效:

  // given A, B, dimensions of rectangle
  // given g, granularity of shorter side

  if A > B then
     bm := g
     am := floor(g * A / B)
  else then
     am := g
     bm := floor(g * B / A)

  for i := 1 to n do
     av := A * RandomInt(0..am) / am
     bv := B * RandomInt(0..bm) / bm
     print (av, bb)
Run Code Online (Sandbox Code Playgroud)

编辑:一个更简单的替代方案是简单地按相同因子缩放随机浮点值,随机选择点,并丢弃落在矩形之外的点。然而,你不知道在矩形中得到 N 个点之前需要进行多少次试验......