我使用pyglet/openGL在Python中构建基于图块的应用程序,其中我需要找到给定单元格的所有相邻单元格。我正在笛卡尔网格的一个象限中工作。每个单元格都有一个x和y值,表示它在网格中的位置(x_coord和y_coord)。这些不是像素值,而是网格位置。我正在寻找一种有效的方式来获得邻近的细胞。马克斯也有,但由于电网的边界的八个可能的相邻单元有可能是一个简单但可能低效的方法尽可能少的3伪代码看起来是这样的:在网格中寻找相邻单元格的Pythonic和高效方式
def get_adjacent_cells(self, cell):
result = []
x_coord = cell.x_coord
y_coord = cell.y_coord
for c in grid.cells:
if c.x_coord == x_coord and c.y_coord == y_coord: # right
result.append(c)
if c.x_coord == x_coord - 1 and c.y_coord == y_coord + 1: # lower right
result.append(c)
if c.x_coord == x_coord - 1 and c.y_coord == y_coord: # below
result.append(c)
if c.x_coord == x_coord - 1 and c.y_coord == y_coord - 1: lower left
result.append(c)
if c.x_coord == x_coord and c.y_coord == y_coord - 1: right
result.append(c)
// -- similar conditional for remaining cells
这可能会工作得很好,尽管这个代码很可能需要运行每一帧,并且在更大的网格中它可能会影响性能。任何想法更精简和更少的CPU密集型方法?或者,我应该用这种方法滚动吗?
在此先感谢。
是不是形容词'pythonesque'? :-) – Simon
如果你想保持这种做法,那么我至少会计算一下计算结果的结果。当它达到8时,跳出循环。另外,当你附加一个单元格时,只检查它是否等于8。 –