随机生成的2D点是否聚集在一起,我该如何阻止它?

时间:2010-09-08 12:55:33

标签: random geometry 2d

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

在其中生成随机点
x = random() * width 
y = random() * height 

这些点聚集在该区域的中心周围?我记得读过一些他们会说的话,但我不知道为什么,以及如何防止它。

8 个答案:

答案 0 :(得分:4)

真正的随机点会产生聚类(或团块) - 这种效果可能会在绘制真实世界数据(如癌症病例)时引起混淆,并导致人们认为存在必须由某些事物引起的“热点”。

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

答案 1 :(得分:4)

是。您拥有的点数越少,它们就越能形成集群。

为避免这种情况,您可以使用“分层抽样”。它基本上意味着你将表面均匀分布在较小的区域,并将你的点放在那里。

对于您的示例,您可以将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);
        x = regularity + randomnessFactor * random() + xSub / (float) (n-1);

        plot(x, y);

    }
}

这样做的原因是你实际上并不想要随机性。 (团块是随机的。)你想要点均匀分布,但没有规则的模式。将点放在网格上并稍微抵消它们会隐藏规律性。

答案 2 :(得分:3)

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

另外,询问他们是否在中间聚集是假设你没有能力测试这个!

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

如果你使用极坐标而不是carthesian,你会在原点得到一个丛:

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

原因是从统计上来说,圈r=[0,1]将包含与圈r=[1,2]一样多的点,即使戒指是三倍大。

答案 6 :(得分:1)

伪随机点不一定会聚集在一个区域的“中心”周围,但是它们倾向于聚集在一个区域中的各个随机点上;事实上,这些团块经常比人们想象的更频繁地发生。通常使用所谓的 quasirandom low-discrepancy sequences来实现更均匀的空间分布,例如Sobol sequence,其维基百科文章显示的图形说明了Sobol和伪随机序列。

答案 7 :(得分:-1)

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