2012-01-19 5 views
4

ポイント間の最小と最大の可能な距離を定義して、2D空間の点を生成するアルゴリズムのアイデアが必要です。定義された最小と最大の距離を持つランダムな点の生成

Bassicaly、ポイントがランダムな場所を持つような方法で、ポイントで満たされた2Dスペースにポイントを挿入する良い方法を見つけたいと思いますが、最も近いポイントからMINIMUM_DISTANCE_NUM以上でMAXIMUM_DISTANCE_NUM未満です。

私はゲームのためにそれが必要なので、速く、ランダム確率に依存しないでください。

+0

さらに詳しい情報を追加してくださいランダムな場所に追加する必要がありますか、あらかじめレンダリングして昇順で追加することは可能ですか?挿入する必要がある固定量のポイントがあるか、またはこれらの制約の下に可能な場所がなくなると停止する必要がありますか? –

答えて

2

をあなたは上限があり、ゲームがロードされる前にポイントをprecomputerできる場合は、ポイントの2D規則的な格子(P0、P1、P2、P3、...、Pを使用することができます。この唯一の作品(m * n)、幅と高さがこのグリッドの高さである場合

各ポイントは、1)このグリッドポイントが使用されたかどうかを示す論理値、2)このグリッドからの「シフト」あまりにも多くの規則性を避けるために位置。 (またはあなたのグリッドにポイント+シフト座標をオールインすることができます)

新しいポイントが必要なときは、使用されなかったグリッドのランダムなポイントを選択し、このポイントを「使用済み」と指定し、ポイント+あなたのゲームのシフト。

2D空間のn、m、幅/高さ、使用するポイントの数によっては、これは問題ありません。

+0

これは実際には素晴らしいと簡単な解決策です!ありがとう! – deloki

+1

うれしかったです。私は1)ランダムな順序で別の配列のすべてのグリッドポイントを1つずつ入れてランダムなポイントを事前に計算できることを追加します(同じポイントを2回置かないようにフラグを使います)ので、n + 1ポイントあなたが必要なときに。 (Faster)と2)これをanwerとしてフラグを立てるかもしれません:-)。 – GameAlchemist

1

あなたは何点について話していますか?ポイント数の上限がある場合は、ポイントの配列を生成(事前計算)して配列に格納することができます。配列をとり、ファイルに格納します。

地図が読み込まれる前にすべての難しい計算処理が行われるため(任意のランダム点生成アルゴリズムを使用できるように)、ポイントを得るための素早い方法があります。

このようにして、1トンの異なるマップを生成してから、ランダムに1つのマップを選択してポイントを生成することができます。

3

Kd treeにポイントのセットを格納します。ランダムに新しいポイントを生成し、Kdツリーですばやく検索できる最近隣のポイントを調べます。ポイントが受け入れられた場合(つまり、MIN_DIST <の最寄りの< MAX_DIST)、それをツリーに追加します。

ポイントがあまりにもきつく詰め込まれていない条件、MIN * N < < Lの場合、これは最適です。ここで、Nはポイントの数、Lは入れているボックスのディメンションですこれが真でない場合、ほとんどの新しいポイントは拒否されます。しかし、この限界では、大理石を箱に詰め込んでいます。その配列は、一定の密度以上ではあまり「ランダム」にはなりません。

関連する問題