菱形のアイソメトリック マップを想像してみてください。これは基本的に (x,y) 座標を持つ 2D 配列であり、セル内にマークされているように、上のセルが原点です。
次の順序で、これらのセルを後ろから前に繰り返します。
未知の同面図をこのようにループするアルゴリズムは何ですか?
期待される出力: [0,0]、[0,1]、[1,0]、[0,2]、[1,1]、[2,0]、[0,3] など
菱形のアイソメトリック マップを想像してみてください。これは基本的に (x,y) 座標を持つ 2D 配列であり、セル内にマークされているように、上のセルが原点です。
次の順序で、これらのセルを後ろから前に繰り返します。
未知の同面図をこのようにループするアルゴリズムは何ですか?
期待される出力: [0,0]、[0,1]、[1,0]、[0,2]、[1,1]、[2,0]、[0,3] など
python疑似コード:
def iterate_cells(n):
for i in range(n):
for j in range(i+1):
yield (j, i-j)
for i in range(1, n+1):
for j in range(n - i):
yield(i+j, n-j-1)
出力:
In [119]: list(iterate_cells(5))
Out[119]:
[(0, 0),
(0, 1),
(1, 0),
(0, 2),
(1, 1),
(2, 0),
(0, 3),
(1, 2),
(2, 1),
(3, 0),
(0, 4),
(1, 3),
(2, 2),
(3, 1),
(4, 0),
(1, 4),
(2, 3),
(3, 2),
(4, 1),
(2, 4),
(3, 3),
(4, 2),
(3, 4),
(4, 3),
(4, 4)]
map が行列 M(n,n) に含まれているとします。
// lateral loop above diagonal
for (int i=0; i<n; i++) {
// diagonal loop
for (int j=0; j<i; j++) {
// the coords you are looking for are: row=(i-j), col=(i+j)
int currentTileValue = M[i-j, i+j];
}
}
// sub-diagonal lateral loop
for (int j=1; j<n; j++) {
// diagonal loop
for (int i=0; i<(n-j); i++) {
// the coords you are looking for are: row=(j-i), col=(j+i)
int currentTileValue = M[j-i, j+i];
}
}
詳細にテストしていませんが、うまくいくと思います。とにかく、あなたはアイデアを得る。