2011-08-23 2 views
10

Dato una griglia in cui conosco il numero di righe (che è fisso) e conosco il numero corrente di colonne (che possono crescere arbitrariamente), come faccio a calcolare la riga e la colonna di un quadrato dal suo indice?Come calcolare la riga/colonna dalla posizione della griglia?

  + + + + + 
Cols ---> | 0 | 1 | 2 | 3 | ... 
     +--+---|---|---|---|--- 
     0 | 0 | 3 | 6 | 9 | ... 
     +--+---|---|---|---|--- 
Rows 1 | 1 | 4 | 7 | A | ... 
     +--+---|---|---|---|--- 
     2 | 2 | 5 | 8 | B | ... 
     +--+---|---|---|---|--- 
     . . . . . ... 
     . . . . . . 
     . . . . . . 

Quindi, dato:

final int mRowCount = /* something */; 
int mColCount; 

E dato qualche funzione:

private void func(int index) { 

    int row = index % mRowCount; 
    int col = ??? 

Come faccio a calcolare correttamente col? Deve essere una funzione sia del numero di colonne che di righe, ne sono abbastanza sicuro. Ma il mio cervello mi sta fallendo.

Esempio: se index == 4, quindi row = 1, col = 1. Se index == 2 quindi row = 2, col = 0.

Grazie.

risposta

7

int col = index/mRowCount;

4

ritengo colonna sarebbe ottenuta tramite divisione intera:

int col = index/mRowCount; 

Sarebbe possibile limitare ad una sola divisione (eliminare l'operazione di modulo) sostituendolo con una moltiplicazione e sottrazione. Non sono sicuro che sia meno costoso; probabilmente non sarebbe un problema nella maggior parte delle situazioni:

int col = index/mRowCount; 
int row = index - col * mRowCount; 
5

index = col * mRowCount + row

poi

row = index % mRowCount;

col = index/mRowCount;

0
column = index/max_rows; 
row = index % max_rows; 
0

fila = indice/numberOfColumns

e

colonna = indice% numberOfColumns

1

Non ho davvero capire la configurazione, ma se hai una griglia normale con un indice progressivo come nel Android GridLayout:

+-------------------+ 
| 0 | 1 | 2 | 3 | 4 | 
|---|---|---|---|---| 
| 5 | 6 | 7 | 8 | 9 | 
|---|---|---|---|---| 
| 10| 11| 12| 13| 14| 
|---|---|---|---|---| 
| 15| 16| 17| 18| 19| 
+-------------------+ 

Il calcolo è:

int col = index % colCount; 
int row = index/colCount; 

Ad esempio:

012.
row of index 6 = 6/5 = 1 
column of index 12 = 12 % 5 = 2