如何在正方形网格中查找带有单元格编号的坐标
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)
我正在努力解决这个问题..我的脑子里一片模糊。
我有一个 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)