Jesli dobrze zrozumialem:
0|1|2|3|4|5|6....
1|x|0|x|x|x|0
2|0|x|0|x|x|0
3|x|0|x|0|0|x
4|x|x|x|x|x|0
5|x|0|x|0|0|x
Wszedzie gdzie jest x stawiam sobie 1 a 0 jest zerem., i produkuje sobie ciagi bitowe np rzedami. dla podanego przykladu 5 rzedow po 6 bitow:
101110
010110
101001
111110
101001
I zwijam w 1 dlugi bitstream: 101110010110101001111110101001 (tu 30 bitow) i jest to rodzaj mapy.
Nastepnie dane z 3 wymiaru ukladam kolejno w pamieci jedne za drugim w takiej samej kolejnosci jak zrobilem sobie ciagi bitowe. (Jednak tylko te dane gdzie sa X'y)
Kazdy zestaw danych 3 wymiary ma d bajtow danych i ukladam je od adresu a
Gdy teraz potrzebuje dany z kolumny x=3 rzad y=4, obliczam sobie index: i=x+(y-1)*6 (ilosc kolumn na rzad) = 21
101110010110101001111110101001 (wybrany bit) - przy okazji sprawdzam czy bit jest faktycznie ustawiony.
Nastepnie licze ile jest bitow ustawionych po lewej stronie od mojego bitu, tutaj o=11
Wiec szukane dane znajduja sie pod adresem DANE=a+d*o
Uzycie danych, ilosc slupkow 3d razy ich objetosc + 1 bit na kazda lokacje 2d.
W extremalnym przypadku 256*256*256 da: 65K danych + 8K "bitstream" indexow + odrobine kodu.
Zamotane troche bo mysl przelalem bezposrednio na klawiature. Jakby co pytaj wyjasnie.
"tatusiu zobacz, narysowałam tobie takie same coś jak na twojej koszulce"
https://github.com/willyvmm/mouSTerjmp $e477