Używam Numpy i Python w projekcie, gdzie mapa 2D jest reprezentowany przez ndarray
:Jak wyciąć tablicę Numpy do granicy?
map = [[1,2,3,4,5],
[2,3,4,2,3],
[2,2,2,1,2],
[3,2,1,2,3],
[4,6,5,7,4]]
MAP_WIDTH = 5, MAP_HEIGHT = 5
obiekt ma lokalizację krotka:
actor.location = (3,3)
i zakres wyświetlania:
actor.range = 2
Jak napisać funkcję actor.view_map(map)
, tak aby mapa zwróciła obszar otaczający lokalizację aktora do pewnego zakresu. Na przykład (przy użyciu powyższej mapy)
range = 1
location = (3, 2)
=>
[[2,3,4],
[3,4,2],
[2,2,1]]
ale jeśli zakres aktora przebiega zbyt daleko Chcę mapę wypełnione -1:
range = 1
location = (1,1)
[[-1,-1,-1],
[-1, 1, 2],
[-1, 2, 3]]
najprostszy przypadek jest w zakresie od 0, co zwraca bieżący kwadrat:
range = 0
location = (1, 2)
[[2]]
Jak podzielić mapę na określoną granicę?
Ile kosztuje "actor.range"? Jeśli zawsze będzie mniej niż pewna (stosunkowo niewielka) wartość, istnieje łatwa optymalizacja (buforuj strony z -1 i napisz prostą klasę opakowania). –
Zawsze będzie mniej niż połowa szerokości/wysokości mapy - ale jeśli dodaję granicę do mapy na tym poziomie, podwoiłoby to (?) Jej rozmiar ... – sdasdadas
Bliżej poczwórnie (obszar == długość kwadratu), faktycznie . Znacznie przyspiesza to indeksowanie, jeśli możesz sobie pozwolić na wykorzystanie pamięci. –