10

我想在 *100 平面上生成均匀分布的圆/点/节点。为此,我在 java 中使用 Random() 方法。具体来说,我以以下方式进行操作:

Random r1=new Random();
  for(int i=0;i<100;i++){
  x=100*r1.nextDouble();
  y=100*r1.nextDouble();
} 

但问题是,当我一遍又一遍地运行代码时,节点在平面上的间距并不均匀,即存在集中的集群和一些未占用的空间块。

任何想法,建议将不胜感激。下图显示了带有集群和空白的典型输出。圈子的数量只是圈子的ID。 在此处输入图像描述

4

2 回答 2

7

如果你想让你的随机分布看起来更“均匀”,也就是说你想更均匀地覆盖空间,你不能使用完全均匀的分布,因为它会包含“间隙”,正如@Adam 指出的那样。

您可以改用称为Low-discrepancy sequence 的东西:例如Halton 序列Sobol 序列。正如您在 Wikipedia 示例图片中看到的那样,它们避免了均匀分布的集群和间隙。

于 2013-10-11T07:29:58.993 回答
2

我假设你的意思是一个 100x100 的单位平面,有 100 个点。

一个 10x10 的网格覆盖在您的平面上,每个网格框 1 个点意味着 100 个均匀分布的点。

将点放在中心以获得漂亮的精确均匀性:

for(int i=0;i<100;i++){
    x = 5 + 10*(i/10);
    y = 5 + i % 10;
} 

或者为了一点点抖动,随机化每个网格框内的位置:

Random r1=new Random();
for(int i=0;i<100;i++){
    x = 10*r1.nextDouble() + 10*(i/10);
    y = 10*r1.nextDouble() + i % 10;
} 
于 2013-10-11T07:23:05.857 回答