Salut,
Je crois avoir compris, mais je reconnais qu'il faudrait que tu sois plus rigoureux dans ta description. Typiquement, tu as fait une erreur dans le vecteur direction que tu donnes pour que ce soit cohérent avec ce que tu dis.
Pour répondre à ta question, tu peux déjà découper ton problème en 3 parties, selon les 3 "directions" possibles. Je prendrai cette norme (différente de la tienne) pour être compréhensible par tous :
+1 pour aller à droite
0 pour rester sur place
-1 pour aller à gauche
Ce que tu peux faire, c'est traiter les directions les unes après les autres. Donc pour la direction "vers la droite" par exemple, tu peux repérer les indices des endroits où tu as +1 dans ta matrice :
indices = find(direction == +1)
Du coup, tu peux récupérer les éléments que tu dois déplacer vers la droite via
Enfin, tu peux créer une nouvelle variable :
1 2
| [l, c] = size(valeurs);
valeurs_finales = zeros(l+2, c+2); |
Tu remarqueras que j'ai augmenté la taille de la matrice pour pouvoir gérer les bords en créant une matrice plus grande.
Et, pour chaque direction (ici, vers la droite donc) :
valeurs_finales( 1+1:l+1 , 1+2:c+2 ) = valeurs_finales( 1+1:l+1 , 1+2:c+2 ) + valeurs(indices)
Une fois que tu as fait toutes tes directions (y compris les 0 pour dire qu'il n'y a pas de déplacements), alors tu supprimes les bords pour récupérer la matrice à la bonne taille :
valeurs_finales = valeurs_finales( 1+1:l+1 , 1+1:c+1 )
Cordialement,
ps: simple curiosité, c'est pour faire quoi ?
Partager