2012-09-13 93 views
3

鑑於轉換指數網格座標數學

$c = 2; // number of columns 
$r = 3; // number of rows 

我需要找到$i的值,它是一個特定的細胞(左->右,上->到底的順序)的指數x,y網格座標。

通常,人們可以使用兩個循環來解決這個問題;一個循環的行和另一個列,但在我的情況下,我需要這樣做數學

因此,與上述情況下,我會是這樣的:

$grid = new Grid(2, 3); 
             // i x y 
list($x, $y) = $grid->getCoordOfCell(0); // 0 0 0 
list($x, $y) = $grid->getCoordOfCell(1); // 1 1 0 
list($x, $y) = $grid->getCoordOfCell(2); // 2 0 1 
list($x, $y) = $grid->getCoordOfCell(3); // 3 1 1 
list($x, $y) = $grid->getCoordOfCell(4); // 4 0 2 
list($x, $y) = $grid->getCoordOfCell(5); // 5 1 2 

可以想像,getCoordOfCell()將返回x,y數組座標網格單元$i

不知道我是否錯過了這裏的東西,但我認爲這是非常多的。

我想結果的數學公式將基於div s或mod s,但我只是沒有精神力量來思考這個超過我自己。另外,我相信作爲一個問題,這對未來的其他人應該是有用的。呵呵,雖然我在這裏說PHP,這可能是語言無關...

回答

10

要獲得右側立柱您有:

$i % NUMBER_ITEMS_IN_ROW 

並得到正確的行:

$i/NUMBER_ITEMS_IN_ROW 

在你的例子,有3行和2列(連續==項),所以:

$i $x ($i%2) $y ($i/2) 
0  0   0 
1  1   0 
2  0   1 
3  1   1 
4  0   2 
5  1   2