2010-11-04 4 views
3

Commençons par un simple tableau de 16 x 16 po.
Comment est-ce que j'insérerais le 'SomeValue' dans le tableau dans un ordre de 90 degrés dans le sens des aiguilles d'une montre.Rotation du réseau dans le sens des aiguilles d'une montre

int[] image = new int[16 * 16]; 

for (int x = 0; x < 16; x++) 
{ 
    for (int y = 0; y < 16; y++) 
    { 
     int someValue = x * y; 

     // This is the line I think is wrong 
     image[x + (y * 16)] = someValue; 
    } 
} 

Le résultat devrait ressembler au tableau ci-dessous.

Ordre normal:
0, 1, 2,
3, 4, 5,
6, 7, 8,

pivotées dans le sens horaire:
6, 3, 0,
7, 4, 1,
8, 5, 2,

+1

Votre code ne compile pas, 'Z' n'a pas été déclarée. Vous devriez également vous simplifier la vie en utilisant un tableau à deux dimensions comme 'int [,] image = new int [16, 16];' –

+0

Qu'est-ce que 'z'? Voulez-vous faire pivoter la matrice ou y insérer des valeurs? Ce sont deux choses différentes. –

+0

Woops, a changé le z pour un y, Hehe ma faute;) –

Répondre

6

Vous cherchez quelque chose comme ça?

0 0 0 1 1 1 2 2 2 x 
0 1 2 0 1 2 0 1 2 y 
= = = = = = = = = 
6 3 0 7 4 1 8 5 2 m*(m-1-y)+x 

pour m = 3.


const int m = 16; 
int[] image = new int[m * m]; 

for (int x = 0; x < m; x++) 
{ 
    for (int y = 0; y < m; y++) 
    { 
     int someValue = x * y; 

     image[m*(m-1-y)+x] = someValue; 
    } 
} 
+0

Oui Merveilleux! : D: D: D –

+2

BTW, juste ne peux pas arrêter de sourire lors du verrouillage de ce code :) –

+1

Et qu'en est-il des tableaux rectangle? Et si au lieu de [16 * 16] nous devions faire pivoter un tableau [5 * 2]? – lvictorino

2
suggestion

Suivre @Albin Sunnanbos et en utilisant un réseau à deux dimensions. Alors jetez un oeil à this related question.

+0

Savez-vous comment le faire pivoter dans le sens inverse des aiguilles d'une montre? –

+0

Mon sens de la symétrie me dit d'utiliser '[3-j, i]' au lieu de '[j, 3-i]'. Dans ton cas c'est 15 au lieu de 3. – Dialecticus

+0

haha ​​donc c'était si simple: p –

1

Si vous voulez générer le tableau pivotée vous pouvez faire comme ce

int[,] image = new int[16 , 16]; 

int current = 0; 
for (int x = 15; x >= 0; x--) 
{ 
    for (int y = 0; y < 16; y++) 
    { 
     image[x, y] = current; 
     current++; 
    } 
} 

// Output 

for (int y = 0; y < 16; y++) 
{ 
    for (int x = 0; x < 16; x++) 
    { 
     Console.Write(image[x,y] + ", "); 
    } 
    Console.WriteLine(); 
} 
+0

Eh bien, il sort dans un tableau bidimensionnel mais je peux facilement le convertir: D –

+1

Le tableau bidimensionnel n'est pas un bug, c'est une caractéristique: -) (il améliore la lisibilité et l'intention du code) –

+0

Vous avez raison! Le tableau bidimensionnel actuel le rend plus facile: D –

Questions connexes