Aggiungo:

Riguardo al calcolo degli indici in una matrice toroidale, il problema non c'è se sono sulla prima colonna o ultima colonna dove calcolo in questo modo il prossimo indice:

NewY=((y-1)+NColonne) % NColonne,
esempio:

in una matrice 3x3:

111
111
q11

sono nella prima colonna (2,0) , l'elemento che si trova sulla sua sinistra è: (2,2) quindi:

NewY=((0-1)+3) % 3 = 2 % 3 = 2 quindi va bene, analogamente se mi trovo nell'ultima colonna

(0,2)

NewY=((y+1) % NColonne)=((2+1) % 3) = 3 % 3 = 0

Il problema sorge se sono nella prima riga o ultima riga, se uso la stessa formula ho:
esempio sono in (0, 1) , l'elemento in alto dovrebbe essere (2,1) quindi:

NewX = ( (x-1) % NRighe ) = (2-1) % 3 = 1 % 3 = 1 e non va bene, mentre la formula va benissimo se tipo non mi trovo nella prima.