algorithm - 在矩形内生成一个随机点(均匀地)

标签 algorithm random geometry 2d distribution

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

这应该是一个简单的问题。

然而,在RANDOM_DATA homepage我发现了以下注释:

However, we will not achieve uniform distribution in the simple case of a rectangle of nonequal sides [0,A] x [0,B], if we naively scale the random values (u1,u2) to (A*u1,B*u2). In that case, the expected point density of a wide, short region will differ from that of a narrow tall region. The absence of uniformity is most obvious if the points are plotted.

我觉得很奇怪...我想不通为什么这样缩放会影响均匀性。

我错过了什么?

编辑:

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

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

假设在 0 和 1 之间有 X 个不同的值。通过将 (u1,u2) 缩放到 (u1,2*u2) 我们将在 [0,u1] 范围内有 X 个不同的值,在 [0,u1] 范围内有 X 个不同的值范围 [0,2*u2]。对于区域均匀性,[0,2*u2] 中的不同值应该是 [0,u1] 中的两倍。

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

我应该如何在矩形内生成一个随机点(按面积均匀分布)?

最佳答案

这种说法是不正确的,两个独立均匀测度的直积是一个均匀测度。这可以显示如下:

随机点命中边长为 ab 的矩形的概率等于第一个坐标命中长度为 的线段的概率a 和长度为 b 的段的第二个坐标。 (我们正在谈论矩形到轴的投影)。

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

关于algorithm - 在矩形内生成一个随机点(均匀地),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6884003/

相关文章:

重写修改后的 goto 语义的算法

c - 马氏距离反转协方差矩阵

javascript在随机时间后重定向到url

c - 在 C 中打印和填充二维数组

sas - SAS中PROC SURVEYSELECT后如何获取未采样的样本?

c# - 如何做半圆运动?

c++ - std::__gcd 和 std::gcd 有什么区别?

javascript - 根据内容长度设置显式模式宽度

c# - 确定圆上的线段选择

java - Android Circle 在屏幕上触摸并拖动后