PDA

Visualizza la versione completa : [C++] Individuare una cella su una tabella attraverso le coordinate dello schermo


Pensiero
16-10-2011, 10:31
Sto programmando in c++. Praticamente ho creato sullo schermo, usando la libreria SDL, una tabella con 11 colonne e 12 righe. Ogni cella ha una larghezza di 113 pixel ed una altezza di 65 pixel, dovrei creare un algoritmo che mi permetta di individuare il numero di cella (il numero di cella parte da zero ed aumenta di uno per ogni nuova cella, proseguendo in orizzontale, terminata la riga, continua ad aumentare, incrementando di uno, nella riga successiva) attraverso l'indicazione delle coordinate (x,y) che indicano un punto preciso sullo schermo. In pratica bisogna individuare se questo punto si trova dentro ad una cella ed in quale cella si trova.
Se qualcuno mi può aiutare, lo ringrazio in anticipo.

oregon
16-10-2011, 10:49
Devi semplicemente fare qualche divisione ... x per il massimo numero di pixel in orizzontale e y per il massimo numero di pixel verticali ...

premoli
16-10-2011, 10:56
Non so se ho capito bene quello che vuoi fare...

Però per individuare le celle io farei così:

tu sai che ogni cella è larga 113 ed è alta 65, la prima cella della prima riga avrà coordinate
(0, 0) la seconda (0, 113) e via dicendo, in definitiva se vuoi trovare la cella collocata
all' i-esima riga e alla j-esima colonna non devi fare altro che ((i-1)*113, (j-1)*65)

spero di essere stato chiaro e di aver capito il tuo problema...

EDIT
Oregon scusa, probabilmente hai postato mentre io stavo scrivendo ;)

Pensiero
16-10-2011, 11:24
Ma io non voglio trovare la cella collocata alla riga i e alla colonna j, voglio individuare la cella in base un punto preciso sullo schermo. Cioè se le coordinate che indicano un punto qualsiasi sullo schermo(x,y) si trovano all'interno di una delle celle, voglio sapere quale cella è.
Cioè in base alle coordinate di un punto qualsiasi, voglio avere le coordinate del punto dove la cella che lo contiene inizia a disegnarsi (cioè le coordinate dell'estremo punto in alto a sinistra della cella).
In base alle coordinate del punto di origine della cella, posso risalire al numero di cella facilmente, perche ho un vector contenente puntatori ad oggetti di tipo Cell. Gli oggetti di tipo Cell hanno membri variabili di tipo int (x ed y) che corrispondono alle coordinate dei vari punti di origine delle celle.
Quindi il problema è ottenere le coordinate punto di origine delle celle, avendo a disposizione le coordinate di un punto qualsiasi sullo schermo.
Per essere ancora più chiaro, il problema viene a porsi quando deve individuare i movimenti del mouse, devo capire in quale cella si trova.

oregon
16-10-2011, 11:27
Hai letto la mia risposta?

Pensiero
16-10-2011, 11:52
Faccio un un esempio, ho aperto un programma di grafica contenente un modello della stessa tabella. Se io mi porto con il mouse su un punto qualsiasi della quarta cella della prima riga, cioè qulla che dovrebbe avere come numero 3 (perchè la prima cella della prima riga dovrebbe avere come numero 0) il programma mi dà le coordinate del punto (401,59). Il punto di origine della quarta cella è 339,0 (cioè la x è pari a 113pixel*3).
Come faccio ad ottenere questo punto di origine o comunque il numero della cella, conoscendo soltanto le coordinate 401,59 e la struttura della tabella (cioè 12 righe *11 colonne) e le misure delle celle, cioè 113X65?
Oregon, mi dici di dividere, ma se faccio 1143/401 ottengo 2,85 e se faccio 780/59 ottengo 13,22. Come possono questi numeri aiutarmi?

oregon
16-10-2011, 12:04
Dividi 401 per 113 ... = 3,54 e prendi la parte intera ... 3 ... per individuare la colonna.

In maniera simile per la riga

premoli
16-10-2011, 12:09
mhh non mi sembra un problema troppo complesso, ci sono diversi modi di risolverlo.

a me ad esempio viene in mente di fare così (probabilmente ci potranno essere anche metodi migliori):

Prendiamo il punto che prima hai usato (401, 59) fai 401 / 113 e hai come risultato
3.(qualcosa) poi fai lo stesso per 59 ottenendo come risultato 0.(qualcosa) ora dei due numeri prendi solo la parte intera e hai come risultato che la cella si trova alla riga 3 colonna 0
se vuoi avere proprio le coordinate della cella devi moltiplicare 3*113 e 0*64...

Pensiero
16-10-2011, 12:09
Originariamente inviato da oregon
Dividi 401 per 113 ... = 3,54 e prendi la parte intera ... 3 ... per individuare la colonna.

In maniera simile per la riga

Finalmente ho capito, grazie per per avermi aiutato!

Loading