我遇到了一个具体的问题。我在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
等。或类似的,但它必须开始从中心向外向所有方向填充瓷砖(可以是随机的)。任何想法赞赏
答案 0 :(得分:1)
您的问题缺少一些细节,但我假设您要求的方法是生成靠近512x512网格中心的id
。
您的网格似乎以特定方式枚举:每列按table_row
值的递增顺序进行枚举,列的枚举按table_col
值的递增顺序进行。
因此,我们已经知道id
和table_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}}