Konwertowanie tablic n-D do 1-D

0

Witam, potrzebuję wzoru do konwertowania tablicy 3D na 1D (ogólnie na pszyszłość - potrzebuję jednego wzoru: n-D -> 1D).

0

Narysuj sobie układ współrzędnych, podziel na kratki 1x1, weź pod uwagę tylko nieujemne współrzędne. Numeruj kratki po współrzędnych. Kratka (0,0) będzie mieć numer 0, (0,1) -> 1, (1, 0) -> 2, (0, 2) -> 3, (1, 1) -> 4, (2, 0) -> 5, itd Jak sobie rozpiszesz to wpadniesz na ogólny wzór i będzie to wzór konwertowania 2W -> 1W. Składając to N-1 razy dostaniesz konwersję NW -> 1W.

0

niesetety już tak robilem

np dla 3d dla malej tablicy 3x3x3

id i j k
1 1 1 1
2 1 1 2
3 1 1 3 
4 1 2 1
5 1 2 2
6 1 2 3
7 1 3 1
8 1 3 2
9 1 3 3 
.
.
.
27 3 3 3

Problem w tym ze nie moge znalezc wzoru. Uzywalem (4i + 2j + k - 6) ale niestety sa miejsca w ktorych 2 wartosci sie powtarzaja np id3 oraz id4, a co za tym idzie nadpisują komórkę tablicy 1D.

W programie w ktorym to pisze, moge uzyc
append <array> <value>
ale chcialem poznac wzor

2

Zakładając numerowanie od zera:

  • konwersja 2W -> 1W:
    n = (x+y)(x+y+1)/2 + y
  • konwersja 1W -> 2W:
    zadanie domowe :P

To jest wzór na ogólną bijekcję (nieograniczoną). Jeśli wymiary przestrzeni 3W są ograniczone i masz do opisania współrzędne w prostopadłościanie to wtedy arytmetyka może być dużo prostsza, np (w to width, czyli szerokość, numerowanie od zera):

  • konwersja 2W -> 1W:
    n = y*w + x
  • konwersja 1W -> 2W:
    x = n % w
    y = n / w (dzielenie bez reszty)
0

ok, dzieki, zaraz to popodstawiam i zobacze :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1