2013-02-14 9 views
7

[4,4]
の配列があります。Xは私が "知っている"唯一のものです。残りは単純なdouble forループで計算されます。4x4行列(C#/ XNA)を回転させる方法

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 

(テトリスことになっています)。私はあなたが90度行列を回転させるつもりか正確にはわからないし、まだ、まだ回転したバージョンの左上に左上Xを持っていますが、回転させるように>

+0

ここRot90定義チェックアウト:http://pastebin.com/k667ujJ8を – AlexFoxGill

答えて

10

はヘルプをお願い申し上げます90度何か、私はちょうど新しい配列を作ると、行と列を交換しhorisontallyフリップします。回してで終了

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を維持するように私には発生します。EDIT?おそらくこれはあなたが何を意味するかです)が、ちょうどhorisontalフリップを行うと、それは問題ないはずです。

0, 0, 0, 0, 
1, 1, 0, 0, 
0, 1, 1, 0, 
0, 0, 0, 0, 
0123:

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

回してで終了

(他の方法で傾きに:rotate[i][j] = start[j][3-i];)を

:)

関連する問題