2Dグリッドマップでの道路/河川の生成


12

これは初心者の質問ですが、ここにそれがあります:

私のマップは2Dグリッドであり、道路と川を生成したいです。開始点から終了点までのルートは、タイル数で最適なルートであってはなりません。代わりに、一定レベルのランダム性(ターン)が必要です。

この種のものに標準的なアルゴリズムはありますか?

乾杯!

更新:

これは、グリッド上の重みで遊んで、jgraphtライブラリを使用して最短経路アルゴリズム(Bellman-Ford)を適用した結果です。結局、ドーナツの答えに行きました。

http://pastebin.com/AGQGK5ik


マップ上に障害物はありますか?
マイケルハウス

まだ、川は置かれるべき最初の障害になります。
マルコスFragkakis

回答:


18

A *を使用して最適なパスを生成してから、中点変位で歪みます。

ここに画像の説明を入力してください

これにより、エンドポイントが確実に満たされ、ランダム性を大幅に制御できます。たとえば、道路を川ほどランダム化することはしません。道路を構築する知性が何であれ、通常、それについて最適化を試みます。

マップに障害物がある場合は、反復のたびにそれらの障害物を越えていないことを確認してください。

別の方法は、最適なパスを見つけた後にパーリンノイズを生成し、生成されたノイズに基づいてポイントをシフトすることです。たとえば、次のノイズを使用します。

ここに画像の説明を入力してください

次に、最適なパスを赤で、シフトしたパスを青で表示します。

ここに画像の説明を入力してください

シフトされたパスがノイズの暗い領域にどのように「収まった」ことに注目してください。川が谷を流れるのと同じ方法。

パーリンノイズを選択する利点の1つは、アルゴリズムの一部として障害物を考慮に入れて回避できることです。


1
ノイズに基づいてこのポイントシフトをどのように行いますか?
コイ

1
ノイズと生成されたラインをどのように保存しているかに依存します。最初に中央で線に垂直な最も近い/最も低いノイズを見つけ、次に中央と端の間の中間点で見つけることができます。
マイケルハウス

3

A *アルゴリズムを使用すると、タイルの適切性を示す値をタイルに割り当てることもできます。たとえば、最低コストスコアを川の低地、道路の平地(沼地ではない)に割り当て、それに基づいて生成できます。これは最短ルートではありませんが、最も効率的なルートを提供します。タイル値に少しランダム性を適用すると、次善のルートを取得できます。


2

高さが要因である場合はどうですか?ダイアモンドスクエアアルゴリズムでハイトマップを作成できます。ランダムな水を各タイルに追加してから、繰り返し処理し、水がすべて落ち着くまで低地に移動することを考えていましたが、それは遅くなり、おそらく川ではなく湖になります。

また、各タイルの法線を見ることも考えていました。2つの法線が互いに向かっている場合、それは谷でなければなりません。谷に水がたまります。それらが同じ方向を向いている場合、または互いに離れている場合、水はたまりません。これはおそらく反復法よりも高速ですが、湖を作成せず、川のみを作成する場合があります。タイルポイントのすべてのインスタンスが互いに向かい合って川になるのを防ぐために、それをいじる必要があります。


各タイルに重みを追加できるドキュメントの1つを読みましたが、特定のタイルは単に通れません。
ジョープランテ2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.