2013-02-14 20 views
7

Bir dizi var [4,4]
X bildiğim tek tane, geri kalanı basit bir çift döngü için hesaplanır.Bir 4x4 matrisini döndürme (C#/XNA)

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

bu diziyi almak bir işlevi istiyor ve bunu 90 derece döndürmek +/- x'in pozisyonu aynı kalırken. Ben permütasyon ama ne olduğunu bana bir şey öğrenmek olmaz hardcode için bir yol biliyorum ve bu açıkçası oldukça sıkıcı

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

(O tetris olması gerekiyordu).

yardımını takdir ederim:>

+0

Kontrol dışarı Rot90 tanımını: http://pastebin.com/k667ujJ8 – AlexFoxGill

cevap

10

Sana 90 derece bir matris döndürmek niyetinde ve henüz hala döndürülmüş sürümü sol üst sol üst X kaç tam olarak emin değilim ama döndürmek için 90 derece bir şey, ben sadece yeni bir dizi yapmak, satır ve sütun takas ve hokey olarak çevirmek istiyorum. ile

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]; 

Döndür bitirir:

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

Şimdi bu diyagonal flip (Düzeltme: Sadece bu aynı konumda x tutacak diye düşündüğüm oluyor: belki de bu ne demek nedir?) ama sadece bir horisontal flip yapmak ve ince olmalıdır:

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]; 

Döndürme ile bitirir

(başka bir yol yatırmak için: rotate[i][j] = start[j][3-i];) Buraya

:)