0

シンプレックス ノイズを使用して「大陸」を生成するアルゴリズムがあるため、高さマップが生成され、ピクセル/タイルが特定のレベルを超えると陸地として認識され、それ以外の場合は水域として認識されます。

私が抱えている問題は、土地が海面下のセクションを取り囲む場合があることです。海ではなく、陸か湖なので、それらの領域を特定できるようにしたいと思います。

したがって、次の 0 は水を表し、1 は土地を表します。

000000000
001110100
011111110
011001110
001101100
001111000
000000000

真ん中の 3 つの 0 は非海として識別されます。

フラッド フィル アルゴリズムに精通しています。だから私ができる1つの方法は、ランダムなポイントを繰り返し、水が見つかったら洪水の塗りつぶしを使用し、それが特定のサイズを超えている場合は海になることです. 次に、海が認識されたら、海以外の水域を調べて識別できます。

ロードされたものよりも広い領域で作業する必要があるため、これは効率が悪いように思えます。

より良い方法はありますか?

4

2 に答える 2

2

あなたはすでにフラッドフィルに精通していると言いました。マップの端から海を埋めるために塗りつぶしてみませんか?端から水が溢れない水域は、湖になります。

于 2012-12-17T18:10:45.983 に答える
2

すべてのセルの連結成分を計算したいだけです。0最大の構成要素は海で、それ以外の構成要素は湖になります。これは線形時間で行うことができます (リンクされたページのアルゴリズムのセクションを参照してください)。

于 2012-12-17T20:32:15.147 に答える