2011-08-23 12 views
10

Dada una cuadrícula donde sé el número de filas (que es fijo), y conozco el conteo actual de columnas (que pueden crecer arbitrariamente), ¿cómo puedo calcular la fila y la columna de un cuadrado a partir de su índice?¿Cómo se calcula la fila/col desde la posición de la cuadrícula?

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

Por lo tanto, dado:

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

y dada una cierta función:

private void func(int index) { 

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

¿Cómo calculo correctamente col? Debe ser una función tanto del número de columnas como de las filas, estoy bastante seguro. Pero mi cerebro me está fallando.

Ejemplo: si index == 4, entonces row = 1, col = 1. Si index == 2 entonces row = 2, col = 0.

Gracias.

Respuesta

7

int col = index/mRowCount;

4

I creen que la columna se obtiene mediante la división de enteros:

int col = index/mRowCount; 

Sería posible limitar a una sola división (eliminar la operación de módulo) reemplazándolo con una multiplicación y resta No estoy seguro si eso es menos costoso; probablemente no tendría importancia en la mayoría de situaciones:

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

index = col * mRowCount + row

luego

row = index % mRowCount;

col = index/mRowCount;

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

fila = índice/NumberOfColumns

y

columna = índice% NumberOfColumns

1

Realmente no entender su configuración, pero si usted tiene una rejilla normal con un índice progresivo como en el Android GridLayout:

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

El cálculo es:

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

Por ejemplo:

row of index 6 = 6/5 = 1 
column of index 12 = 12 % 5 = 2 
Cuestiones relacionadas