gpt4 book ai didi

sql - 根据轴坐标查询 "surrounding hex tiles"

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:30:23 24 4
gpt4 key购买 nike

看完Red Blob Games的精彩article on heaxgon tile maps and their coordinates .

我想知道如何编写一个 SQL 查询来返回围绕居中图 block 的图 block ,最大范围为 X。(假设文章中涵盖的“轴向坐标”)

我最初的一个简单想法是

WHERE x BETWEEN tile_x - 1 AND tile_x + 1 AND y BETWEEN tile_y - 1 AND tile_y + 1

但这会返回太多的图 block ,以创建更像菱形而不是圆形的方式返回,这正是我需要的。

不幸的是,我还没有找到一个决定性的答案,也许这里有人可以给我一个提示。

我已经想过一些关于坐标总和的技巧,以及它们是否大于或小于范围,但这不适用于轴坐标。

最佳答案

从链接文章中的图表来看,似乎是这样的

where (x between tile_x and tile_x + 1) and (y between tile_y - 1 and tile_y + 1)
or (x = tile_x - 1) and (y = tile_y)

应该可以

如果你想从给定的瓦片 (x, y) 中找到 n 距离内的瓦片 (tile_x, tile_y),如果通过将 0.5 添加到与给定图 block 具有奇数距离的每一行的 x 坐标来修改 x 坐标,将会更容易,这样对称性会增加:

       -1.5 -0.5 0.5 1.5                                                   
-2 -1 0 1 2
-2.5 -1.5 -0.5 0.5 1.5 2.5
-3 -2 -1 0 1 2 3
-2.5 -1.5 -0.5 0.5 1.5 2.5
-2 -1 0 1 2
-1.5 -0.5 0.5 1.5

这可以使用表达式 tile_x + 0.5 * tile_y%2

随着给定距离内的瓦片数量减少一个
从一行到另一行,给定的(修改的)x 坐标的限制
行是 n - abs(tile_y - y)/2

如果

那么瓷砖在距离 n 内
abs(tile_y - y) <= n                                                       
and abs(tile_x - x + 0.5 * (tile_y-y)%2) <= n - abs(tile_y - y)/2

在 SQL 中:

SELECT tile_x, tile_y                                                      
FROM tiles
WHERE ABS(tile_y - y) <= n
AND ABS(tile_x - x +0.5*(tile_y-y)%2) + ABS(tile_y - y) / 2 <= n

关于sql - 根据轴坐标查询 "surrounding hex tiles",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17529282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com