在512 * 512地图中选择平铺向外中心点的算法

时间:2017-10-31 08:35:36

标签: mysql algorithm

我遇到了一个具体的问题。我在mysql中的数据(map)如下

id     table_row table_col tile_type
1      1         1         0
2      2         1         0
3      3         1         0
...    ...       ...       0
512    512       1         0
513    1         2         0
514    2         2         0
515    3         2         0
...    ...       ...       0
...    512       2         0
...    1         3         0
...    2         3         0
...    3         3         0
...    ...       ...       0
...    512       3         0
...    1         4         0

地图是512 * 512。我需要提出一种算法,从中心(或中心256 * 256)点选择切片。所以它应该看起来像

256*256 first - once selected we can update tile_type to 1
255*256 second - update tile_type to 1
256*255 third - update tile_type to 1
257*256 fourth - update tile_type to 1
256*257 fifth - update tile_type to 1

等。或类似的,但它必须开始从中心向外向所有方向填充瓷砖(可以是随机的)。任何想法赞赏

2 个答案:

答案 0 :(得分:1)

您的问题缺少一些细节,但我假设您要求的方法是生成靠近512x512网格中心的id

您的网格似乎以特定方式枚举:每列按table_row值的递增顺序进行枚举,列的枚举按table_col值的递增顺序进行。

因此,我们已经知道idtable_row值为256的单元格的table_col:它是255 x 512 + 256。这是正确的,因为在table_col值256的枚举开始之前枚举了255个完整列,并且每个列中有512行。最后,在本专栏中,我们对第256行感兴趣。

这个更通用的版本如下所示。

((num_cols + 1) / 2 - 1) * num_rows + (num_rows + 1) / 2

你不需要关心+ 1s和-1s:它们只是处理奇数num_rows和num_cols值的数字黑客。

无论如何,要引入邻近度量,您可以使用两个随机变量。随机变量P可以用柱子表示到中心的距离。 (即生成的table_col的点的id距离网格中心的table_col值有多远)另一个随机变量Q可以表示距离以行为中心。

((num_cols + 1) / 2 - 1 + P) * num_rows + ((num_rows + 1) / 2 + Q)

然后,您可以根据需要生成P和Q的值,并获得距离网格中心P柱和Q行的单元格的id

答案 1 :(得分:0)

尝试以下查询。

{{1}}