2013-02-14 17 views
7

को घुमाने के लिए कैसे करें [4,4]
एक्स एकमात्र ऐसा है जिसे मैं "जानता हूं", बाकी की गणना एक साधारण डबल फॉर-लूप के साथ की जाती है।4x4 मैट्रिक्स (सी #/एक्सएनए)

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

मैं एक समारोह है कि इस सरणी ले चाहते हैं, और यह 90 डिग्री बारी बारी से +/- एक्स की स्थिति रहती है, जबकि एक ही। (यह tetris माना जाता है)

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

मैं किसी तरह से क्रमपरिवर्तन लेकिन क्या है कि मुझे कुछ भी नहीं सीख जाएगा हार्डकोड करने को जानते हैं और यह स्पष्ट रूप से काफी उबाऊ है।

सहायता की सराहना करते हैं:>

+0

चेक बाहर Rot90 परिभाषा यहाँ: http://pastebin.com/k667ujJ8 – AlexFoxGill

उत्तर

10

मुझे यकीन है कि कैसे वास्तव में आप 90 डिग्री से एक मैट्रिक्स बारी बारी से करने का इरादा है और अभी तक अभी भी घुमाया संस्करण के शीर्ष बाईं ओर ऊपरी बाएँ एक्स नहीं हूँ, लेकिन बारी बारी से करने 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, 

अब इस एक विकर्ण फ्लिप है (संपादित करें: यह सिर्फ मेरे लिए होता है कि यह एक ही स्थिति में एक्स रखेंगे: शायद यह तुम क्या मतलब है?) है, लेकिन सिर्फ एक 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];)

:)

संबंधित मुद्दे