Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    vedere una matrice come piano cartesiano in java

    Salve ragazzi, sono nuovo nel forum e da 2 settimane stò sbattendo la testa su una parte di un progetto in Java.
    Ho creato una matrice binaria (0 e 1) di dimensione N x N e devo contare il numero di 1 che sono presenti nella riga/diagonale scelta...devo cioè considerare la matrice binaria come fosse un piano cartesiano e scegliere come direzione la retta che passa dall'ultimo elemento della prima colonna (N,0) a un punto (a,b) passato come parametro al metodo.
    Premetto che io l'avevo fatto creando un metodo per ogni direzione, ma la prof. mi ha detto che lo vuole più generico, appunto passando come parametro le coordinate (a,b).
    La mia domanda principale è:
    C'è un modo in Java per vedere la matrice come un piano cartesiano cioè in cui l'elemento di posizione (0,0) sia quello più in basso a sinistra e non quello in alto a sinistra??

    Ragazzi aiutatemi perchè sono davvero nel panico.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: vedere una matrice come piano cartesiano in java

    Originariamente inviato da Carlitos84
    Salve ragazzi, sono nuovo nel forum e da 2 settimane stò sbattendo la testa su una parte di un progetto in Java.
    Ho creato una matrice binaria (0 e 1) di dimensione N x N e devo contare il numero di 1 che sono presenti nella riga/diagonale scelta...devo cioè considerare la matrice binaria come fosse un piano cartesiano e scegliere come direzione la retta che passa dall'ultimo elemento della prima colonna (N,0) a un punto (a,b) passato come parametro al metodo.
    Premetto che io l'avevo fatto creando un metodo per ogni direzione, ma la prof. mi ha detto che lo vuole più generico, appunto passando come parametro le coordinate (a,b).
    La mia domanda principale è:
    C'è un modo in Java per vedere la matrice come un piano cartesiano cioè in cui l'elemento di posizione (0,0) sia quello più in basso a sinistra e non quello in alto a sinistra??

    Ragazzi aiutatemi perchè sono davvero nel panico.
    La matrice è un rettangolo, e i due indici degli array numerano i suoi elementi, punto, tutto il resto sono decisioni che hai preso tu: sei tu che ti stai immaginando che l'elemento di indici [0][0] sia quello "in alto a sinistra", ma non c'è nessun "alto" e nessuna "sinistra", la matrice puoi girartela come vuoi.

  3. #3
    Ciao Kaamos e grazie per la risposta, tuttavia non mi è molto chiara la cosa...per "girarmela come mi pare" dovrei cambiare i valori degli indici dei 2 for?

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Non è molto chiaro. Esempio
    codice:
    0  1  0  0  1  0
    1  0  0  1  0  0
    0  0  1  1  1  0
    0  0  1  0  1  1
    0  0  0  1  0  0
    1  1  1  0  0  1
    Se dovessi contare gli elementi "1" nel "percorso" tra "l'angolo in basso a sinistra" (N, 0) e l'1 nell'ultima colonna, 3 riga dal basso, che cosa consideri come percorso appunto? Non c'è alcuna diagonale che passi per quei punti. N'è tanto meno sono allineati su stessa riga o colonna.

    Quali sono i percorsi ammissibili?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Allora i percorsi ammissibili sono tutte le rette possibili che a partire dall'elemento in basso a sinistra intersecano gli altri punti della matrice...cioè, devo immaginare la matrice come fosse un piano cartesiano in modo che la prima colonna sia la corrispondente asse delle y e l'ultima riga l'asse delle x.
    In pratica per scegliere i percorsi io dovrò chiamare il metodo che calcola il numero di 1 passandogli come parametro le coordinate (a,b)...e devo contare il numero di 1 che stanno sulla "retta immaginaria" che parte dall'origine degli assi (l'ultimo elemento della prima colonna) e passante per (a,b).
    es.
    il percorso verticale è rappresentato dalla retta che corrisponde alla prima colonna (per esempio) e le altre colonne sono le proiezioni della retta corrispondenti alla direzione verticale scelta.

  6. #6
    Salve ragazzi..allora la matrice la vedo come un piano cartesiano adesso ho usato due for per riempirla:

    for(int i=m-1; i>=0; i--){
    for(int j=0; j<m; j++){
    boolean b = random.nextBoolean();
    if(b==true)
    matrix[i][j]=1;
    else
    matrix[i][j]=0;
    }
    }
    yessssssss
    mi resta da capire come creare un metodo che deve contarmi gli uno su quella retta immaginaria passante dall'elemento di posizione [0][0] e l'elemento [a][b] ((a,b) sono coordinate che passo come parametro al metodo)..

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Carlitos84
    Ciao Kaamos e grazie per la risposta, tuttavia non mi è molto chiara la cosa...per "girarmela come mi pare" dovrei cambiare i valori degli indici dei 2 for?
    Vuoi che [0][0] sia l'indice in basso a sinistra? Bene, comportati come se lo fosse.
    Gli indici sono solo valori che scegli tu come tu utilizzare... l'importante è ricordarsi delle proprie scelte: se hai un dato da mettere "in basso a sinistra" mettilo nella cella [0][0], basta che poi ti ricordi che, quando qualcuno chiederà l'elemento "in basso a sinistra", dovrai dargli quello che sta nella cella [0][0].

    Originariamente inviato da Carlitos84
    Salve ragazzi..allora la matrice la vedo come un piano cartesiano adesso ho usato due for per riempirla:

    for(int i=m-1; i>=0; i--){
    for(int j=0; j<m; j++){
    boolean b = random.nextBoolean();
    if(b==true)
    matrix[i][j]=1;
    else
    matrix[i][j]=0;
    }
    }
    yessssssss
    mi resta da capire come creare un metodo che deve contarmi gli uno su quella retta immaginaria passante dall'elemento di posizione [0][0] e l'elemento [a][b] ((a,b) sono coordinate che passo come parametro al metodo)..
    Piccolo appunto, puoi scrivere quel codice in maniera più compatta:

    codice:
    for (int i = m - 1; i >= 0; i--)
    	for (int j = 0; j < m; j++)
    		matrix[i][j] = random.nextInt(2);
    Per la retta, apparte quelle verticali, orizzontali e diagonali inclinate di 45 °, bisogna necessariamente scegliere dove metterei dei "gradini", dei "salti".
    Nella matrice 5x5 ad esempio:

    codice:
      0 1 2 3 4
    0 x x x x x
    1 x x x x x
    2 x x x x x
    3 x x x x x
    4 x x x x x
    Se devi tracciare la retta da (0, 0) a (1, 4) (quando scrivo le coppie intendo (riga, colonna)) devi decidere a che colonna passare dalla riga 0 alla riga 1, e senza avere l'equazione della retta (che tu non hai a disposizione) non ti resta che scegliere una colonna qualsiasi... in questo caso, la scelta più naturale sarebbe scendere di una riga alla colonna 2, che è a metà strada: potresti generalizzare questo caso banale decidendo che, se la differenza di quota dal punto di partenza al punto di arrivo è una riga, a metà strada (arrotondando) scendi di una riga, se la differenza di righe è 2 scendi di una riga a un terzo della strada e di un'altra riga a due terzi della strada, e così via... con le dovute approssimazioni. In una matrice un po' più grande dovrebbe funzionare decentemente.

  8. #8
    ok, pensi di aver capito cosa intendi...provo a buttare giù qualcosa e poi vediamo se funziona perchè più che altro il problema è che il punto generico (a,b) passato come paramentro non è necessariamente il punto di arrivo, ma potrebbe anche essere un punto interno alla matrice e quindi mi servirebbe controllare anche gli elementi che potrebbe toccare la "retta immaginaria" e che sono successivi a quel punto....

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Carlitos84
    ok, pensi di aver capito cosa intendi...provo a buttare giù qualcosa e poi vediamo se funziona perchè più che altro il problema è che il punto generico (a,b) passato come paramentro non è necessariamente il punto di arrivo, ma potrebbe anche essere un punto interno alla matrice e quindi mi servirebbe controllare anche gli elementi che potrebbe toccare la "retta immaginaria" e che sono successivi a quel punto....
    Una volta che sei arrivato da (0, 0) ad (a, b), semplicemente prosegui simmetrizzando i punti attraversati rispetto ad (a, b), fino a che non esci dalla matrice.

  10. #10
    Salve ragazzi, scusate ma ho avuto da sbrigare delle cose e sono stato fuori per un torneo...cmq ho pensato ad un'altra soluzione...se io considerassi l'equazione della retta y=mx+q?? cioè sò che inserendo il punto di coordinate (a,b) il coefficiente angolare m=b/a..

    ..le rette parallele a quella pssante per (0,0) e (a,b) sono tutte e sole quelle con coefficiente angolare uguale, quindi tutte le rette della forma y=(b/a)x+q..

    ..in questo modo per ogni valore di q (che dovrò calcolare ogni volta che verifico se un punto appartiene alla retta) ho una delle rette parallele alla retta che passa da (0,0) e (a,b)...

    ed i punti appartenenti alla retta che di volta in volta prendo in considerazione, sono tutti quelli che soddisfano l'uguaglianza...

    potrebbe funzionare???..qualcuno a qualche suggerimento??...

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.