mysql - 在512 * 512 map 中选择向外中心点的瓦片的算法

标签 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

map 是512*512。我需要想出一种从中心(或接近中心 256*256)点选择图 block 的算法。所以它应该看起来像

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

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

最佳答案

您的问题缺少一些细节,但我假设您正在询问一种生成靠近 512x512 网格中心的 id 的方法。

您的网格似乎是以特定方式枚举的:每一列都以 table_row 值的递增顺序枚举,并且列的枚举以 table_col 的递增顺序完成> 值(value)观。

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

更通用的版本如下所示。

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

您不需要太在意 +1 和 -1:它们只是处理奇数 num_rows 和 num_cols 值的数字技巧。

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

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

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

关于mysql - 在512 * 512 map 中选择向外中心点的瓦片的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47030978/

相关文章:

algorithm - Cut-Property 是两种方式吗?

mysql - SQL - 排序依据然后分组依据

mysql - 在sql中停止或验证

php - MySQL 查询 PHP 中的字符串问题

javascript - 查询在数据表子行中的经理姓名中选择员工姓名

algorithm - 一致性哈希是否有保证的公平变化?

algorithm - 我可以使用匈牙利算法找到最大成本吗?

algorithm - 找到矩阵中最后一个像螺旋一样行走的正方形

php - 如何在 MySQL 中更新或插入具有多对多关系的行

c++ - 合并 K 排序数组/vector 的复杂性