Vraag Hoe rij / col uit rasterpositie berekenen?


In een raster waarin ik het aantal rijen weet (dat is vastgesteld) en ik weet het huidige aantal kolommen (dat willekeurig kan groeien), hoe bereken ik dan de rij en kolom van een vierkant uit zijn index?

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

Dus, gegeven:

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

En gezien een functie:

private void func(int index) {

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

Hoe bereken ik correct col? Het moet een functie zijn van zowel het aantal kolommen en rijen, ik ben er vrij zeker van. Maar mijn brein faalt mij.

Voorbeeld: als index == 4, dan row = 1, col = 1. Als index == 2 dan row = 2, col = 0.

Bedankt.


10
2017-08-23 17:03


oorsprong


antwoorden:


int col = index / mRowCount;


7
2017-08-23 17:07



index = col * mRowCount + row

dan

row = index % mRowCount;

col = index / mRowCount;


5
2017-08-23 17:08



Ik geloof dat de kolom zou worden verkregen door integer delen:

int col = index / mRowCount;

Het zou mogelijk zijn om het te beperken tot een enkele divisie (elimineer de modulus bewerking) door het te vervangen door een vermenigvuldiging en aftrekking. Ik weet niet zeker of dat minder kostbaar is; waarschijnlijk niet uit in de meeste situaties:

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

4
2017-08-23 17:07



Ik heb je setup niet echt begrepen, maar als je een normaal raster hebt met een progressieve index zoals in Android GridLayout:

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

De berekening is:

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

Bijvoorbeeld:

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

1
2018-05-09 14:51



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

0
2017-08-23 17:10



row = index / numberOfColumns

en

kolom = index% numberOfColumns


0
2017-09-21 08:22