2011-06-08 8 views
4

ルールに基づいて2Dパターンを構築するのに役立つアルゴリズムを探しています。私は、与えられたパラメータのサイトを使ってスクリプトを書くことができ、与えられた長さまでランダムな2次元シーケンスを返すという考えがあります。2D PHPパターン作成ツールのアルゴリズム

私の計画は、ルールに基づいて画像パターンを生成することです。ゲームレベルの画像のフラクタルやスプライトのようなものは、おそらくこれを使うことができます。

たとえば、A、B、C、& Dを使用してパターンを作成できます。ルールは、CとAが互いに隣り合うことはできず、Dは常にCに従うということです。次に、サイズ4x4のパターンが必要です。その結果は、すべてのルールを尊重した次のようなものになる可能性があります。

A B C D 
B B B B 
C D B B 
C D C D 

このような計算を実行できる既存のライブラリはありますか?私が読むことができる数式はありますか?

+1

どのような「ルール」ですか?そのような "規則"の形式は何ですか? – mauris

+0

現在のシンボルの北/東/南/西へのシンボルに関するちょうど基本的なルール。私は、X個のスペース内のシンボルのサポートもきちんとしていると思います(しかし、おそらくもっと遅くなります)。 – Xeoncross

+0

http://properundead.com/2009/03/cave-generator.html – Xeoncross

答えて

2

かなり効率的ではない協同実行時間ですが、backtrackingはこのような問題によく使用されるアルゴリズムです。

これは単純なパターンに従います。正しく書かれていれば、ルールセットを簡単に置き換えることができます。

+1

この素晴らしい[JavaScriptで書かれた例](http://www.hbmeyer.de /backtrack/backtren.htm)。 – Xeoncross

+0

また、多くの[バックトラックの単一次元バージョン](http://stackoverflow.com/questions/2617055/how-to-generate-all-permutations-of-a-string-in-php)があるようです。 – Xeoncross

+0

[8-Queens](http://paulbutler.org/archives/n-queens-in-a-tweet/)にはこの話題がたくさんあるようですので、[PHPの解決法は303文字](http://files.dropbox.com/u/396326/nqueens.txt)。 – Xeoncross

1

ルールデータ構造を定義します。ルールがカプセル化できる操作のセットを定義し、実行可能な相互参照を定義する。これを実行したら、潜在的な結果セットにこれらのルールを適用するために使用するアルゴリズムのタイプをより明確に把握する必要があります。

1

あなたのルールがに制限されていると仮定すると、「タイプXはそのタイプの左/右/上/下にタイプYを持つことができます」可能なパターンを生成するのが計算上困難な場合があります。 Wang Tilesを見てください(GrunbaumとShephardによるTilings and Patternsが良い出典です)。状態のセットでは、Wang Tilesのセットを定義することができます。これらの適切なセットはTuring Completeです。

小さな四角形または一連のルールの場合、これは学術的な関心事に過ぎません。他の箇所で述べたように、バックトラッキング手法はルールセットに適しているかもしれません。その場合、新しいコンポーネントがグリッドに追加される順序に適切なヒューリスティックを考慮する必要があります。また、あなたのルールセットに応じて、他のアプローチも有効です。例えば。あなたのルールセットが多くの解決策を認めているならば、残りのギャップを埋めようとする前にグリッドに多くのアイテムを無作為に割り振ることで長い道のりが生まれるかもしれません。

関連する問題