Я создаю приложение на основе плитки на Python, используя pyglet/openGL, где мне нужно будет найти все смежные ячейки для данной ячейки. Я работаю в одном квадранте декартовой сетки. Каждая ячейка имеет значение x и y, указывающее ее положение в сетке (x_coord и y_coord). Это не пиксельные значения, а скорее позиции сетки. Я ищу эффективный способ получить соседние ячейки. В max существует восемь возможных смежных ячеек, но из-за границ сетки может быть всего лишь 3. Псевдокод для простого, но, вероятно, неэффективного подхода выглядит примерно так:
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
Это, вероятно, будет работать нормально, хотя вполне вероятно, что этот код должен будет запускать каждый кадр, а в большей сетке это может повлиять на производительность. Любые идеи для более упорядоченного и менее интенсивного подхода? Или, должен ли я просто рулон с этим подходом?
Спасибо заранее.