Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    15

    Help inversione matrice

    salve a tutti io ho una bufferedImage e considerandola come una matrice devo invertire le righe(la prima riga del rettangolo diviene l'ultima e ordinatamente tutte le altre) e le colonne(la prima
    colonna diventa l'ultima e ordinatamente tutte le altre), io ho rpovato così..

    public BufferedImage riflettiPixel(BufferedImage im)
    {
    int temp;
    for(int i=0;i<im.getWidth()/2;i++)
    for(int j=0;j<im.getHeight()/2;j++)
    {
    temp=im.getRGB(i,j);
    im.setRGB(i,j,im.getRGB(w-i-1,h-j-1));
    im.setRGB(w-i-1,h-j-1,temp);
    }
    //FrameVisual prova=new FrameVisual(im);
    //prova.setVisible(true);
    return im;
    }
    ma ninete non so dove sbattere la testa .. grazie a tutti.. e complimenti per il forum e il sito
    Sorridere è bello

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    157

    Re: Help inversione matrice

    codice:
    public BufferedImage riflettiPixel(BufferedImage im)
    	{
    		int temp;
                    int w = im.getWidth();
                    int h = im.getHeight();
    
    		for(int i = 0; i < im.getWidth(); i++)
    			for(int j = 0; j < im.getHeight(); j++)
    			{
    				temp = im.getRGB(i, j);
    				im.setRGB(i, j, im.getRGB(w-i-1,h-j-1));
    				im.setRGB(w-i-1,h-j-1,temp);
    			}
    		return im;
    	}
    non penso che il problema sia quello evidenziato, però il resto mi pare giusto

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    15
    il rpoblema è che non funziona
    Sorridere è bello

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    157
    ma sei sicuro che il problema sia solo un problema di metodo? magari non lo usi correttamente che ne so..

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    15
    "sicura"
    Sorridere è bello

  6. #6
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Bisognerebbe prendere carta e penna e provare a vedere che succede. L'asse di simmetria è una diagonale per cui dovresti lavorare solo sui pixel al di sopra della diagonale, facciamo quella che va dalla cella row=0, col=0 alla cella row=n, col=m, dove n è il numero di righe e m il numero di colonne.

    Siccome quando prendi il pixel [i][j] lo inverti con quello che sta dall'altra parte della diagonale, ti basta passare in rassenga (con il doppio ciclo di for) solo metà della matrice.

    Però con il tuo algoritmo prendevi solo un quarto della matrice, mentre ade90 la prendeva tutta.

    se trovo carta e penna... ti faccio sapere...
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    157
    Originariamente inviato da memol988
    "sicura"
    ops pardon signorina (ora faccio un'altra figura di m**** lol)

    ops ho sbagliaro!!!!!!!
    codice:
    public BufferedImage riflettiPixel(BufferedImage im)
    	{
    		int temp;
                    int w = im.getWidth();
                    int h = im.getHeight();
    
    		for(int i = 0; i < im.getWidth() / 2; i++)
    			for(int j = 0; j < im.getHeight(); j++)
    			{
    				temp = im.getRGB(i, j);
    				im.setRGB(i, j, im.getRGB(w-i-1,h-j-1));
    				im.setRGB(w-i-1,h-j-1,temp);
    			}
    		return im;
    	}
    Pastore12 lei vuole semplicemente ribaltare la matrice se non ho capito male..ovvero in una matrice 10x10 l'elemento (1,1) viene scambiato con il (10,10)

    Prova ora, andiamo a brute force

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    157
    Provato, la matrice
    codice:
    1 2
    3 4
    viene invertita in
    codice:
    4 3
    2 1

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    15
    a quanto pare funziona , ma nell'immagine mi appare una riga che non c'entra nulla con il resto dell'immagine.. forse è un problema della gestione del centro..
    cmq come mai si divide per 2 solo la larghezza e non l'altezza?.. scusate ma mi piace capire quel che faccio.. cmq siete tutti molto gentili..
    Sorridere è bello

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    157
    Sì probabile che sia questione del centro, ti consiglio di fare un paio di prove a mano prima. Allora, con il codice che ti ho passato scorri tutte le righe ma metà colonna, di conseguenza (1,1) con (n,n), (1,2) con (n,n-1) .... fino a (1, n/2) con (n, n/2) (bisogna star lì a guardare chi arriva a n/2 e chi a n/2-1, però lo lascio fare a te )

    Poi con il 2:
    (2,1) con (n-1,n), (2,2) con (n-1,n-1) .... fino a (2, n/2) con (n-1, n/2).

    Così facendo cambi metà matrice in verticale, ma visto che avevi scambiato con l'opposto, risulta completamente rovesciata. Ho fatto una spiegazione contorta, ma prova su un foglio di carta e tutto risulta più semplice. Una matrice 4x4, e fai il procedimento che fa il computer, ma a mano capisci tutto fidati

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.