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が指摘したように、ランダム分布をより「均一」に見せたい、つまりスペースをより均一にカバーしたい場合は、「ギャップ」が含まれるため、完全に均一な分布を使用することはできません。

代わりに、低不一致シーケンスと呼ばれるものを使用できます。たとえば、ハルトン シーケンス、またはソボル シーケンスです。ウィキペディアの例の写真でわかるように、均一な分布で発生するクラスターとギャップを回避します。

于 2013-10-11T07:29:58.993 に答える
2

100 ポイントの 100x100 単位平面を意味していると思います。

平面上に重ねられた 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 に答える