2

ランダムな世界を作りたいです。簡単にするために、それぞれ1mのエッジ長を持つセルの2次元グリッドに基づいているとしましょう。

現在、私は単純なアルゴリズムを使用してランダムなフォームを作成しています(森、湖など)。

1. fill a circle of radius r with the wanted property
2. choose 4 points on the edge of this circle and
3. goto (1.) with all those four points as center and r/1.3

ランダムな形の形を作り、円の基底形は通常見えないので、私はこれがやや好きです。

ただし、2つの問題があります。

  1. 時々(最初の4つのポイントが互いに近すぎるように選択された場合)、森林がどのような基本的な形でできているかが明らかになります
  2. アルゴリズムはひどくパフォーマンスが悪いです。円は常に重なっているため、セルは何度も何度も塗りつぶされます+これらすべての距離計算など。

だから:ランダムなフォームを作成するためにうまく使用されているアルゴリズムはありますか?私はこれをやりたいと思った最初の人ではないと確信しています...

ランダムな点を選んで凸包を作ることを考えましたが、凸包に限定したくありません。極座標でさまざまな角度にランダムな距離を選択すると、星状領域のみが作成されます。これも、私が望まない制限です...

4

2 に答える 2

2

もちろん、機能するものが必要な場合は、JoachimPileborgが推奨するようにこれを実行するライブラリがあります。ただし、このプロジェクトでもう少し楽しく学びたい場合は、ランダムな中間点変位フラクタル、別名ダイアモンドスクエアアルゴリズムを調べることをお勧めします。自然に見える風景を作り出すのに非常に優れています。また、パーリンノイズについても読んでおく必要があります。それはもう少し古いですが、基本を学ぶための良いスタートです。

于 2013-01-18T04:01:34.670 に答える
1

libnoiseのようなものを使用して高さマップを作成できますが、高さマップに使用する代わりに、さまざまなタイプの地形にさまざまな「高さ」を使用します。libnoiseを使用すると、地形の小さな領域を生成できます。次の部分が必要な場合は、前に生成された領域とシームレスに適合する領域を生成できます。

于 2013-01-17T17:22:43.623 に答える