Javascript 如何在方格网中用单元号查找坐标
我一直在努力想办法。。我的脑子有点模糊 我有一个1000x1000网格,0在左下角(0,0),右上角是(10001000) 我有40000个正方形(单元格),尺寸为5x5,我想计算给定的坐标,从1-40000 假设正方形13227是坐标x和y(起点)Javascript 如何在方格网中用单元号查找坐标,javascript,math,geometry,grid,Javascript,Math,Geometry,Grid,我一直在努力想办法。。我的脑子有点模糊 我有一个1000x1000网格,0在左下角(0,0),右上角是(10001000) 我有40000个正方形(单元格),尺寸为5x5,我想计算给定的坐标,从1-40000 假设正方形13227是坐标x和y(起点) 谢谢:)我可能会这样做。 我首先根据5x5网格开始计算,这意味着在1000x1000网格中有200x200个网格 要查找行,请将数字的下限(即Math.floor())除以200。 在您的示例中:Math.floor((13227/200))=66
谢谢:)我可能会这样做。 我首先根据5x5网格开始计算,这意味着在1000x1000网格中有200x200个网格 要查找
行
,请将数字的下限(即Math.floor()
)除以200。在您的示例中:
Math.floor((13227/200))=66
。因此,相应的5x5网格(用于13227)将位于第66行(5x5网格)
然后,要获得列
,请从原始数字中减去(行号x 200)。在您的示例中:
13227-(66*200)=27
。所以它将是第27列(5x5网格)
然后我相信你应该能够将这些值乘以5,得到1000x1000网格中左下角的坐标
也就是说:x=27*5(135),y=66*5(330)
(现在这只是我在纸上和脑海中粗略地画出的东西,所以你毫无疑问能够告诉我我是否正确!我唯一不能100%确定的是,我的方法是否真的给出了5x5平方米的左下角坐标,但我非常确定它是)我可能会这样处理它。 我首先根据5x5网格开始计算,这意味着在1000x1000网格中有200x200个网格 要查找
行
,请将数字的下限(即Math.floor()
)除以200。在您的示例中:
Math.floor((13227/200))=66
。因此,相应的5x5网格(用于13227)将位于第66行(5x5网格)
然后,要获得列
,请从原始数字中减去(行号x 200)。在您的示例中:
13227-(66*200)=27
。所以它将是第27列(5x5网格)
然后我相信你应该能够将这些值乘以5,得到1000x1000网格中左下角的坐标
也就是说:x=27*5(135),y=66*5(330)
(现在这只是我在纸上和脑子里粗略地画了些东西,所以你毫无疑问能够告诉我我是否正确!我唯一不能100%确定的是,我的方法是否真的给出了5x5正方形的左下角坐标,但我非常确定它是)假设你从(0,0)开始对单元格进行编号(botton left). 这是单元格编号
0
。
下一个单元格是右侧的相邻单元格:c1(0,1)。接下来是c2(0,2) 当此行已满时,最后一个单元格为c1000(0999),位于右下角 所以,下一个单元格从新行开始:c1000(1,0)。接下来是c1001(1,1),等等 c12345单元位于哪里?因为您有一个行长度为1000的网格,所以必须找到该数字中适合的行数:
numberOfRows= Math.floor(12345/1000)
这使得numberOfRows=12。分区中有一个rest,rest=345
。因此,单元格12345位于第13行(其他12行已填充)。并位于列=345
到现在为止,我们一直在计算细胞,现在我们想要用距离来测量坐标
每个单元为5个单位(英寸或其他)。因此,单元格1从0变为5,单元格2从5变为10,单元格n
从(n-1)*5变为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
假设您开始在(0,0)处对单元格进行编号(botton左)。这是单元格编号
0
。
下一个单元格是右侧的相邻单元格:c1(0,1)。接下来是c2(0,2) 当此行已满时,最后一个单元格为c1000(0999),位于右下角 所以,下一个单元格从新行开始:c1000(1,0)。接下来是c1001(1,1),等等 c12345单元位于哪里?因为您有一个行长度为1000的网格,所以必须找到该数字中适合的行数:
numberOfRows= Math.floor(12345/1000)
这使得numberOfRows=12。分区中有一个rest,rest=345
。因此,单元格12345位于第13行(其他12行已填充)。并位于列=345
到现在为止,我们一直在计算细胞,现在我们想要用距离来测量坐标
每个单元为5个单位(英寸或其他)。因此,单元格1从0变为5,单元格2从5变为10,单元格n
从(n-1)*5变为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开始到长度-1 首先,您必须确定自己是在行专业还是列专业: 最常见的情况是row major。在本例中,假设您有一个坐标为
(x,y)