2010-10-06 5 views
3

J'essaie d'écrire une fonction pour faire pivoter une matrice d'image en utilisant la technique de pavage en boucle. Cependant, je rencontre quelques problèmes avec le faire fonctionner correctement.Mise en boucle pour faire pivoter une matrice

EDIT: Voici mon code mis à jour qui fonctionne, mais seulement lorsque n est un multiple de la taille du bloc. Comment pourrais-je gérer les différentes tailles de matrices? En ce moment, je n'utilise que des blocs carrés, et cela fonctionne très bien pour ces blocs carrés. Comment pourrais-je changer cela pour utiliser des blocs rectangulaires basés sur la taille du tableau que je reçois. Plus précisément, si on me donne un tableau n x n, comment choisir les dimensions du bloc rectangulaire pour le diviser?

//Block size to tune 
    int block = 20; 
    int i1, j1, k1, i, j, k; 

    for(i1 = 0; i1 < n; i1 += block) { 
    for(j1 = 0; j1< n; j1 += block) { 
      for(i = i1; i < i1 + block; i++){ 
       for(j = j1; j < j1 + block; j++){ 
        dest[getInd(j, i, n)] = src[getInd(i, n - 1 - j, n)]; 

       } 
      } 
     } 
    } 

}

+2

bien ... où est le problème? quels résultats * obtenez-vous? –

+0

Ajout de l'image des résultats avec la matrice d'origine en haut, mal tournée en bas. – CCSab

+0

+1 pour le pavage en boucle! –

Répondre

1

Les deux premières pour les boucles regard mal:

for(i1 = 0; i1 < n/block; i1 += block) { 
    for(j1 = 0; j1< n/block; j1 += block) { 

devrait probablement:

for(i1 = 0; i1 < n; i1 += block) { 
    for(j1 = 0; j1 < n; j1 += block) { 

Quand cela est corrigé si vous aurez probablement juste besoin à l'étape à travers le code dans votre débogueur pour trouver ce qu'il faut réparer.

+0

J'ai fait ce changement, et je me suis débarrassé de la boucle k, au lieu d'utiliser n comme la foulée de ma rangée (dont je ne suis pas sûr). Faire cela et changer la taille du bloc fait fonctionner mon code, mais seulement pour certaines matrices. Par exemple, mon code ne fonctionne correctement que si la taille de la matrice est un multiple de ma taille de bloc. Comment irais-je gérer cela? – CCSab

+0

Je suppose que vous devrez juste accepter la limitation que 'n' doit être un multiple entier de' block'. Vous pouvez toujours remplir votre image pour répondre à cette contrainte s'il s'agit d'une taille impaire. –

Questions connexes