python - 屏幕到交错等距网格算法
问题描述
我正在使用 Kivy 和 Pytmx,我需要从地图坐标中获取 Grid Tile 以获取交错地图。
我的瓷砖尺寸是:
TILE_WIDTH = 256
TILE_HEIGHT = 149
当我使用等距菱形网格时,我是这样计算的:
def screen_to_isometric_grid(cartX, cartY):
screenx = mh - cartY / (TILE_HEIGHT * SPRITE_SCALING) + cartX / (TILE_WIDTH * SPRITE_SCALING) - mw / 2 - 1 / 2
screeny = mh - cartY / (TILE_HEIGHT * SPRITE_SCALING) - cartX / (TILE_WIDTH * SPRITE_SCALING) + mw / 2 - 1 / 2
screenx2 = round(screenx)
screeny2 = round(screeny)
return screenx2, screeny2
现在我正在使用交错地图,我不知道如何获取瓷砖坐标。
我在这里找到了 C++ 中的算法 在此处输入链接描述
解决方案
def subregion(px, py, r_x, r_y):
rx = int(r_x)
ry = int(r_y)
foo = px - py
bar = px + py
if foo < 0 and bar > 1: # Top
return [rx, ry]
elif foo < 0 and bar < 1: # Left
if r_y > 0:
if py > 0.5:
return [rx - 1, ry + 1]
return [rx - 1, ry]
else:
return None
elif foo > 0 and bar > 1: # Right
if r_y > 0:
if py > 0.5:
return [rx, ry + 1]
return [rx, ry]
else:
return None
elif foo > 0 and bar < 1: # Bottom
if r_y < 0:
return [rx, ry]
return [rx, ry + 1]
推荐阅读
- ios - 我的 didSelectRowAtIndexPath 没有被调用
- javascript - 在 onAuthStateChanged 中访问实时数据库
- autoit - AutoIT 中的函数“_IEFormElementSetValue”和“_IEAction”
- css - 垂直对齐列表项内的文本
- vba - 如何在整个工作表中将一个单元格 I2 的内容替换为 J2 的内容,最多 1000 行
- html - 有什么方法可以直接更新已部署的 Angular 应用程序上的文件而无需构建?
- java - 尽管在 pom.xml 中定义了 JUnit,但无法找到
- reactjs - 如何将 Flow 与 React.createRef() 一起使用?
- angular - 如何知道我来自根组件的哪个模块?
- vmware-clarity - 项目清晰度 - 固定导航