以数学方式将索引转换为网格坐标

时间:2012-09-13 08:11:52

标签: php grid coordinates

鉴于此

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

我需要找到x,y值的$i网格坐标,它是特定单元格的索引(左->右,顶->底序)

通常,人们可以使用两个循环来解决这个问题。行的循环和列的另一个循环,但在我的情况下,我需要这样做数学

因此,在上述情况下,我会有类似的事情:

$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的{​​{1}}坐标数组。

不知道我在这里是否错过了什么,但我认为这就是它。

我猜测得到的数学公式将基于$i s或div s,但我只是没有精神力量去思考这个问题。另外,我确信这个问题对未来的其他人有用。哦,虽然我在这里谈论PHP,但这可能与语言无关......

1 个答案:

答案 0 :(得分:11)

要获得正确的专栏:

 $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