2011-08-23 9 views
10

行の数がわかっているグリッド(固定されている)があり、現在の列の数(任意に増える可能性がある)を知っていますが、そのインデックスから四角形の行と列を計算するにはどうすればよいですか?グリッド位置から行/列を計算するには?

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

は、与えられた:

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

そして、いくつかの機能を持た:

private void func(int index) { 

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

どのように私は正しくcolを計算するのですか?それは列と行の数の両方の関数でなければなりません、私はかなり確信しています。しかし、私の脳は私に失敗している。

サンプル:index == 4の場合、row = 1,col = 1です。 index == 2の場合は,col = 0となります。

ありがとうございました。乗算でそれを置き換えることによって

int col = index/mRowCount; 

、単一の分割に限定することは可能であろう(剰余演算を排除する):

答えて

7

int col = index/mRowCount;

4

Iはカラムを整数除算することにより得られるであろうと信じ減算。私はそれがより安価であるかどうか分からない。おそらく、ほとんどの状況では問題ないだろう。

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

index = col * mRowCount + row

その後、

row = index % mRowCount;

col = index/mRowCount;

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

行=インデックス/ numberOfColumns

=インデックス%のnumberOfColumns

1

が本当にあなたのセットアップを理解していなかったが、あなたは、Android GridLayoutのように漸進的指標で、通常のグリッドを得た場合、カラム:

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

計算:

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

例:

row of index 6 = 6/5 = 1 
column of index 12 = 12 % 5 = 2 
関連する問題