Pracuję z rodzimą klasą, która reprezentuje obraz 2D jako tablicę 1D. Jeśli chcesz na przykład zmienić jeden piksel, musisz teraz dowiedzieć się, jak uzyskać indeks ze x,y
współrzędnych.
Powiedzmy, że mamy taką tablicę 1D array1d
:
array1d = [ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y ]
W kontekście naszego programu array1d
reprezentuje siatkę 2D:
a b c d e
f g h i j
k l m n o
p q r s t
u v w x y
I chcemy wykonywać array1d
takie operacje , jak:
- Uzyskaj wartość we
x,y
współrzędnych (w tym przykładzie1,2
dałobyl
) - Uzyskaj dowolną podsiatkę za pomocą
x,y,width,height
(1,2,2,2
dałoby[l, m, q, r]
) - Ustaw wartość dla dowolnej
x,y
współrzędnej (itp.)
Jak to robimy?
data-structures
math
graphics
GladstoneKeep
źródło
źródło
Odpowiedzi:
2D / 1D - mapowanie jest dość proste. Biorąc pod uwagę x i y oraz rozmiary macierzy 2D
width
(dla kierunku x) iheight
(dla kierunku y), możesz obliczyć odpowiedni indeksi
w przestrzeni 1D (w oparciu o zero) przeza operacja odwrotna to
Możesz to łatwo przedłużyć do 3 lub więcej wymiarów. Na przykład dla matrycy 3D o wymiarach „szerokość”, „wysokość” i „głębokość”:
i odwróć:
źródło