1

親愛なるstackoverflowers。

したがって、特定の x と y の値がそこにタイルがあるか (1) ないか (0) を表すグリッドがあるとします。

例えば、

100110100010
100100111110
111110000000
000010000000

また、既知の形状 A、B、C がいくつかあります。たとえば、

(A)  (B)  (C)
  1  1     1
111, 111, 11 

私が達成しようとしているのは、グリッド上のどの 1 がどの形状に属しているかを識別することです。すべての 1 を使い切る必要があります。形状の正確な数はわかっていますが、回転 (ミラーリングなし) が許可されているため、回転したバージョンを追加して、いくつかの形状がグリッドに見つからないと考えた方がよいと思います。

したがって、予想される結果は次のようになります (正確に 1xA、2xB、2xC であることがわかっています)。

A00CC0B000C0
A00C00BBBCC0
AABBB0000000
0000B0000000

一致する可能性のあるものが複数ある場合は、すべてのタイルが独自の形状に割り当てられる限り、どれでも適しています。

さらに、タイルが存在するかどうかを調べること (「発見」) はコストのかかる操作です (ただし、結果はキャッシュされ、タイルはどこにも表示されません)。可能な限り「発見」の数。(最適でなくても構いません。形状を識別するだけで十分です)。

明らかに、既知の形状のセットは変更される可能性があります (ただし、実装時までに判明し、一定のままであるため、特定のタイル セットのコードを調整したり、いくつかの検索戦略を開発したりすることが可能です)。大きく(〜5〜6)、グリッドも非常に小さい(〜15x15)。

ありがとう!

4

1 に答える 1

0

hereおよび/またはhereのアイデアを使用して(これを使用すると、オブジェクトの種類は と になる01思います)、収集したオブジェクトのカタログに対して独自のパターンを試して一致させることが 1 つの方法かもしれません。あなた自身の例を挙げると、

100110100010
100100111110
111110000000
000010000000

Shapes A, B and C:

(A)           (B)             (C)
  1      1     1       111     1      11
111  or  1     111  or   1     11  or  1 
         11

最初に収集されたオブジェクトは、

1  11
1  1
11111
    1    

=> represented as a set of numbers: [(0,0),(0,1),(0,2),(1,2)..etc]
   (the objects need not start or include (0,0) but object 
    bounds seem needed to calibrate the pattern matching)

Aオブジェクトの左上に対してオブジェクトをテストすると、[(0,0),(0,1),(0,2),(1,2)] と一致します。が一致した後A、プログラムは残りのポイントを調整する方法を見つけなければなりません - 右下隅は (4,3) ではなく (2,3) として効果的に測定されます - オブジェクトの残りのポイントの右下をテストすると、一致オブジェクトB。同様にすべてを一致させるために続行し、完全な一致が見つからない場合は別の組み合わせを試します。

于 2013-09-05T19:00:21.987 に答える