6

[4,4] の配列を持っています。私が
「知っている」のは X だけです。残りは単純な二重 for ループで計算されます。

x 0 0 0
0 0 1 0
0 1 1 0
0 1 0 0

この配列を取り、それを 90 度回転させる関数が必要です + / - x の位置は同じままです。(テトリスのはず)

x 0 0 0
1 1 0 0
0 1 1 0
0 0 0 0

順列をハードコーディングする方法は知っていますが、それでは何も学べず、率直に言って非常に退屈です。

助けていただければ幸いです:>

4

1 に答える 1

9

マトリックスを 90 度回転させるつもりなのに、回転したバージョンの左上に左上の X があるのか​​どうかはわかりませんが、何かを 90 度回転するには、新しい配列を作成するだけです。行と列を交換し、水平方向に反転します。

int[][] start = new int[4][];
start[0] = new int[4] { x, 0, 0, 0 }
start[1] = new int[4] { 0, 0, 1, 0 }
start[2] = new int[4] { 0, 1, 1, 0 }
start[3] = new int[4] { 0, 1, 0, 0 }

int[][] rotate = new int[4][];
for (int i=0; i<4; i++) rotate[i] = new int[4];
for (int i=0; i<4; i++)
    for (int j=0; j<4; j++)
        rotate[i][j] = start[j][i];

回転は次のように終了します:

0, 0, 0, 0,
0, 0, 1, 1,
0, 1, 1, 0,
0, 0, 0, 0,

これは斜めのフリップです(編集:これにより x が同じ位置に保持されることがわかりました。おそらくこれがあなたの言いたいことですか?)が、水平のフリップを行うだけで問題ありません。

for (int i=0; i<4; i++)
    for (int j=0; j<4; j++)
        rotate[i][3-j] = start[j][i];

回転は次のように終了します:

0, 0, 0, 0,
1, 1, 0, 0,
0, 1, 1, 0,
0, 0, 0, 0,

(他の方向に傾けるには: rotate[i][j] = start[j][3-i];)

:)

于 2013-02-14T13:21:36.067 に答える