2013-10-11 8 views
7

* 100平面に一様に分布した円/点/ノードを生成したい。そのために、私はJavaでRandom()メソッドを使用しています。具体的に私は次のようにそれをやっている:飛行機の一様分布ポイントがJavaでクラスタリングされているのはなぜですか?

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

しかし、問題は、私は何度も何度もコードを実行すると、ノードが一様平面上に間隔を置いて配置されていないということである、すなわち、濃度のクラスターがありますそして占領されていない空間のいくつかの塊。

ご意見、ご提案は高く評価されます。 以下の画像は、クラスタとホワイトスペースの典型的な出力を示しています。円の数は、円のIDだけです。 enter image description here

+6

乱数がクラスター化されていないのはよくある誤解です。それらが十分でない場合は、最も正確にクラスターを形成します。均一性が必要な場合は、均一なジェネレータをコード化します(平面を均等に分割し、それに応じてポイントを配置します)。 – Adam

+0

お返事ありがとうございました。もっと詳しくお聞かせください。私は、平面を均等に分割し、それに応じてノードを配置すると言った部分を取得しませんでした。 – OAH

+0

@Anderson [誕生日の問題](http://en.wikipedia.org/wiki/Birthday_problem)を見てください。 – SpaceTrucker

答えて

5

あなたはランダムにしたい場合より均等に空間をカバーしたいと思っているので、@Adamが指摘しているように、「ギャップ」を含んでいるので完全に一様な分布を使うことはできません。

代わりに、Low-discrepancy sequenceHalton sequenceと呼ばれるもの、またはSobol sequenceと呼ばれるものを使用できます。 Wikipediaのサンプル画像で見られるように、クラスタと均一なディストリビューションで得られるギャップを避けることができます。

+0

ありがとう、私はすぐにウィキペディアの写真を見て、それはまさに私がランダムを探しているが、ギャップがない。これらの「低不一致シーケンス」は一様分布の実装と見なされますか?彼らは私に一様に配られているからです。ありがとうございました。 – OAH

+1

彼らは一様です。 Haltonシーケンスを見るのは簡単ですが、x上で均等に範囲を細分し、y上で均等に範囲を細分するだけです。ちょうど異なる "均等"です。 – Adam

+0

@Flavioあなたはジッタを追加する最良の方法は何でしょうか?明らかに座標をランダムに乱すことができますが、それがどのように均一性に影響しますか? – Adam

1

あなたは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; 
} 
+0

ありがとうございました。しかし、私はグリッドではないものを探しています。私は、添付の図の円を見て、いくつかの部分が重いので、他の部分はいくつかではありませんが、私は今ある種類の極端な設定から、より均一な分布(ただしグリッドではない)に移動する方法を探しています。 )。乱数ジェネレータで何かできることはありますか?つまり、Y座標などの2番目のR.N.Gを使用することはできますか? Thx – OAH

+0

第2のアプローチは、より大きな/より小さなグリッドを使用して均一性を制御することによって調整できます。 1ボックスあたり4つのランダムな点を持つ5×5のグリッドを使用すると、ランダム性が増し、均一性は低下しますが、ソリューションの場合ほどにはなりません。実際、あなたのソリューションは1x1グリッドで起こることです。 – Adam

関連する問題