如何在正方形网格中查找带有单元格编号的坐标

How to find coordinates with cell number in a square grid

我正在努力解决这个问题..我的脑子里一片模糊。

我有一个 1000x1000 的网格,0 在左下角 (0,0),右上角是 (1000,1000)

我有 40000 个大小为 5x5 的正方形(单元格),我想计算给定 1-40000 之间数字的坐标 ...

假设正方形 13227 是坐标 x 和 y(起点)

谢谢:)

我可能会这样处理。 我首先基于 5x5 网格开始计算,这实际上意味着您在 1000x1000 网格中有 200x200 个网格。

要找到 row,得到底数 - 即 Math.floor() - 你的号码除以 200。
在您的示例中:Math.floor((13227/200)) = 66。所以相应的 5x5 网格(对于 13227)将在第 66 行(5x5 网格)

然后要得到 column,从原始数字中减去(行号 x 200)。
在您的示例中:13227 - (66 * 200) = 27。所以这将是第 27 列(5x5 网格)

然后我相信您应该能够将这些值乘以 5 以获得 1000x1000 网格中的左下角坐标

即:x = 27 * 5 (135), y = 66 * 5 (330)

(现在这只是我在纸上和脑子里粗略地想出一些东西,所以毫无疑问你会告诉我我是否正确!我唯一不能 100% 确定的是是我的方法是否实际上给出了 5x5 正方形的左下角坐标,但我很确定它是)

假设您从 (0,0)(左下角)开始对单元格进行编号。那是手机号码 0
下一个单元格是右侧的连续单元格:c1(0,1)。接下来是 c2(0,2).

当此行已满时,最后一个单元格是 c1000(0,999),位于右下角。

因此,下一个单元格开始于新行:c1000(1,0)。接下来是c1001(1,1)等

c12345 单元格在哪里?因为您有一个行长度为 1000 的网格,所以您必须找到符合此数字的行数:

numberOfRows= Math.floor(12345/1000)

numberOfRows=12。师部休息,rest=345。所以单元格 12345 在行号 13 中(其他 12 个已经填充)。位于 column=345

之前我们一直在计算像元,现在我们想要以距离测量坐标。

每个单元格是 5 个单位(英寸或其他)。因此单元格 1 从 0 变为 5,单元格 2 从 5 变为 10,单元格 n(n-1)*5 to n*5 变为。垂直距离的相同计算。

因此单元格 12345 个角,以单位表示,是 (345-1)*5, 13*5。请注意,我在左侧使用了“rest”(当前列),在上侧使用了“13”(当前行)。

相反的问题是您有坐标 (x,y)(单位,而不是单元格)并且您想知道对应于哪个单元格。
除以每个单元格的大小得到行和列:

row = Math.floor(x/5)
col = Math.floor(y/5)

知道你有 1000 个连续的单元格,你可以通过以下方式获得单元格编号:

cellNum = (row - 1)*1000 + col

这是编程中的经典问题,将2D坐标转换为1D,通常是从2D到1D,索引从0开始到length-1

首先你要弄清楚你是行优先还是列优先:

最常见的情况是行专业。在这种情况下,假设您有一个二维数组,坐标 (x,y) in [0, width-1][0, height-1] 并且您想要转换为索引 i in [0, width*height-1].

行专业,2D->1D:

i = y * width + c

行专业,1D->2D:

y = i / width  (euclidian division)
x = i % width  (modulo operation which compute the remainder of euclidian division)