Random 随机生成的二维点是否聚集在一起,如何停止?

Random 随机生成的二维点是否聚集在一起,如何停止?,random,geometry,2d,Random,Geometry,2d,假设您有一个二维区域,并且希望通过设置 x = random() * width y = random() * height 点是否围绕区域中心聚集?我记得读到一些文章说他们会的,但我不太明白为什么,以及如何防止它。这取决于随机数生成器的分布。假设分布完全均匀,则点可能以合理均匀的方式分布 此外,询问它们是否在中间聚集是预先假设您没有能力测试这一点 根据我的经验,随机生成的点不会聚集在区域中心,因为屏幕上的每个像素都有相同的被选中概率 虽然使用random()生成的数字不是真正随机的,但它

假设您有一个二维区域,并且希望通过设置

x = random() * width 
y = random() * height 

点是否围绕区域中心聚集?我记得读到一些文章说他们会的,但我不太明白为什么,以及如何防止它。

这取决于随机数生成器的分布。假设分布完全均匀,则点可能以合理均匀的方式分布


此外,询问它们是否在中间聚集是预先假设您没有能力测试这一点

根据我的经验,随机生成的点不会聚集在区域中心,因为屏幕上的每个像素都有相同的被选中概率


虽然使用random()生成的数字不是真正随机的,但它们足以在屏幕上随机放置对象。

真正随机的点会创建簇(或簇)-这种效果可能会在绘制真实世界数据(如癌症病例)时引起混乱,并导致人们认为存在“热点”一定是什么原因造成的


但是,在生成随机数时也需要小心,不要每次需要一个新数时都创建一个新生成器-这将使用相同的种子值,这将导致所有值围绕一个点聚集。

如果随机数生成器的random()函数产生高斯分布,然后是。

是的。您拥有的点越少,它们形成簇的可能性就越大

为了避免这种情况,您可以使用“分层抽样”。它基本上意味着你在更小的区域内均匀地分割你的表面,然后把你的点放在那里

对于您的示例,您可以将正方形除以n*n子正方形。每个点将随机放置在其子正方形内。您甚至可以调整随机性因子,使图案或多或少具有随机性/规则性:

// I assume random() return a number in the range [0, 1).

float randomnessFactor = 0.5;
int n = 100;

for(int ySub=0; ySub<n; ++ySub){
    for(int xSub=0; xSub<n; ++xSub){

        float regularity = 0.5 * (1-randomnessFactor);

        x = regularity + randomnessFactor * random() + xSub / (float) (n-1);
        y = regularity + randomnessFactor * random() + ySub / (float) (n-1);

        plot(x, y);

    }
}
//我假设random()返回一个范围为[0,1]的数字。
浮动随机系数=0.5;
int n=100;

对于(int ySub=0;ySub,如果使用极坐标而不是carthesian坐标,则在原点处获得一个束:

r = rand() * Radius;
phi = rand() * 2 * Pi;

原因是,从统计学上讲,圆
r=[0,1]
包含的点与环
r=[1,2]
包含的点一样多,即使环是环的三倍大。

它们不会聚集,但会形成各种有趣的图案,在2d或3d中,这取决于您使用的生成器。

伪随机点不一定会聚集“围绕中心"但它们往往会聚集在一个区域内的各种随机点上;事实上,这些聚集的发生频率往往比人们想象的要高。通常通过使用所谓的准随机分布来实现更均匀的空间分布,或者,例如,其维基百科文章中显示了说明Sobol和伪随机之间差异的图形序列。

哈哈,是的,我只是用100000点测试了它们。它们是形成团块的,而不是中间的。如果它们没有形成团块,它就不是随机的。因为这些点是随机的,它们之间的距离也必须变化。因此,必须有一些小的距离=点的聚集在一起。(这个范围当然太窄了,无法提供真正的神奇证明)有一个数学证明,随机事件会在群体中发生。我几年前读过它,不记得细节,但我相信我在《运筹学的伟大想法》一书中看到过它。(我记得标题比证明更好…)+1感谢你跳出框框,给我指出一个有趣的、出乎意料的现象。这是一个出人意料的好主意。到今天为止,代码有一些打字错误/复制粘贴错误,但我能够利用这个想法获得一些不错的结果,对此我表示感谢。感谢~10年前@geon。请注意,这段代码产生的结果范围为0。5-1.5.从得到的x和y值中减去0.5,得到0-1,如帖子所示。谢谢@geon,这太完美了。