在网格中获得角落?

时间:2017-03-12 20:31:12

标签: python tile

我有一个功能定义为:

的网格
def getCorners(width, height, tile1)

说网格看起来像这样:

1 2 3 4 
5 6 7 8

在这种情况下,我需要找到1,4,5和8。我建立了变量,我相信它们会起作用。

firsttile = 1  # This is the first tile of the grid
TR_tile = width  # Top right tile
max = width * height
BL_tile = max - width + 1  # Bottom left tile
lasttile = max  # This is the last tile of the grid

我想尝试编写对每个网格都适用的条件语句,无论大小如何。

我希望这是有道理的。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你想测试一个给定的数字是否在由宽度和高度定义的网格的角上。您目前有代码来计算角落瓷砖的数量,但您不知道从哪里开始。

解决问题的一种方法是使用您当前正在进行的计算,并将其结果与给定数字进行比较。您可以使用一堆==比较,或者您可以将计算出的角点值放入某种容器中,并使用in一次进行所有比较:

# do your code first, then...
if tile1 == firsttile or tile1 == TR_tile or tile1 == BL_tile or tile1 == lasttile:

或者:

if tile1 in (firsttile, TR_tile, BL_tile, lasttile):

这种方法可行,但效率不高。更好的方法是将tile数除以宽度,并使用结果和余数来分辨tile所在的列和行。角落切片位于第一行和最后一行和列(以任意组合)。请注意,零索引切片的计算更清晰。如果你需要坚持从1开始的瓦片编号,你需要先减去一个:

# no setup computation needed
row, column = divmod(tile1-1, width)
if (row == 0 or row == height-1) and (column == 0 or column == width-1):