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

5

鉴于

$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()会返回一个包含格子$ix,y坐标的数组。

我不知道是否有遗漏,但我认为这就是全部内容了。

我猜得到的数学公式应该基于divmod,但我自己没有精力去思考。此外,我相信这个问题对未来的其他人也会有用。哦,虽然我在谈论PHP,但这可能与语言无关...


在这个线程中的Javascript答案:https://dev59.com/c2035IYBdhLWcg3wT-RC#54569733 - Ska
1个回答

16

要获取右侧列,您需要:

 $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

你还应该对y坐标取整,因为有时候会出现浮点输出。 - Osmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接