代码之家  ›  专栏  ›  技术社区  ›  Iain

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

  •  2
  • Iain  · 技术社区  · 14 年前

    假设你有一个二维区域,你想通过设置在其中生成随机点

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

    这些点围绕区域的中心成丛吗?我记得我读过一些东西,说他们会的,但我不太明白为什么,以及如何预防。

    8 回复  |  直到 7 年前
        1
  •  3
  •   Gian    14 年前

    这取决于随机数生成器的分布。假设一个完全均匀的分布,那么这些点很可能以一种合理的均匀的方式分布。

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

        2
  •  4
  •   ChrisF toni    14 年前

    真正的随机点会产生簇(或簇)-这是在绘制真实数据(如癌症病例)时可能导致混淆的效果,并导致人们认为存在一定由某种东西引起的“热点”。

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

        3
  •  4
  •   geon    14 年前

    对。你拥有的点越少,它们形成的簇就越多。

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

    对于您的示例,您将以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);
    
        }
    }
    

    这样做的原因是你实际上不想要随机性。(束是随机的。)您希望点均匀分布,但不使用常规图案。将这些点放在网格上并稍微偏移,可以隐藏规则性。

        4
  •  1
  •   sum1stolemyname    14 年前

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

    使用random()生成的数字不是 真实地 随机的,他们将足够随机地把对象放在你的屏幕上。

        5
  •  1
  •   Dave    14 年前

    如果随机数生成器的random()函数生成高斯分布,则返回yes。

        6
  •  1
  •   MSalters    14 年前

    如果使用极坐标而不是卡塔希斯坐标,则会在原点处得到一个束:

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

    原因是,从统计上看,这个圆圈 r=[0,1] 将包含与环一样多的点 r=[1,2] 即使这个戒指比它大三倍。

        7
  •  1
  •   Peter O. Manuel Pinto    7 年前

    伪随机点不一定在一个区域的“中心”周围聚集,但是它们 倾向于聚集在一个区域的各种随机点上;事实上,这些团块的发生频率比人们想象的要高。空间的更均匀分布通常是通过使用所谓的 拟随机数 low-discrepancy sequences ,比如 Sobol sequence 他的维基百科文章展示了一个说明Sobol和伪随机序列之间区别的图形。

        8
  •  -1
  •   Daniel MoÅ¡mondor    14 年前

    它们不会结块,但会形成各种有趣的模式,在二维或三维,取决于您使用的生成器。