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

Chr*_*ian 3 php grid coordinates

鉴于

$c = 2; // number of columns
$r = 3; // number of rows
Run Code Online (Sandbox Code Playgroud)

我需要找到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
Run Code Online (Sandbox Code Playgroud)

假设,getCoordOfCell()将返回x,y网格单元的坐标数组$i.

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

我想由此产生的数学公式将基于divs或mods,但我只是没有精神力量去思考这个问题.另外,我确信这个问题对未来的其他人有用.哦,虽然我在这里谈论PHP,但这可能与语言无关......

Cyp*_*ian 11

要获得正确的列,您有:

 $i % NUMBER_ITEMS_IN_ROW
Run Code Online (Sandbox Code Playgroud)

并获得正确的行:

 $i / NUMBER_ITEMS_IN_ROW
Run Code Online (Sandbox Code Playgroud)

在您的示例中,有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
Run Code Online (Sandbox Code Playgroud)