Pokušao sam da napravim neku simulaciju, računski deo, fizički model i sve ispod haube radi kako treba. Prešao sam na grafički deo, da te silne brojke i iscrtam, nešto sam već napravio i zapelo je kod sinusoide koja se kreće (iscrtava). Imam više ideja, a tražim ih još.
Cilj
Sinusoida koja se konstantno iscrtava nadesno
Period koji se prikazuje je konstantan
Prva stvar čega sam se setio je da u niz od recimo 256 celobrojnih vrednosti upisujem trenutnu vrednost veličine u datom trenutku. Tada će indeks elementa u nizu biti x koordinata, a vrednost smeštena pod tim indeksom je y koordinata. Isto važi za sve elemente niza, tako da samo farbam piksele sa tim koordinatama i eto mi sinusoide. Ok, to je to, ali pošto želim da se sinusoida kreće, potrebno je i da se elementi niza kreću.
Kako najjednostavnije postići da kada u niz dodam element sa indeksom 0, da novi element bude na početku niza, a sve ostale vrednosti se pomere za jedno mesto?
Ideja 1
Da kopiram pretposlednji element na mesto poslednjeg i tako unazad sve dok ne kopiram nulti na mesto prvog. Tada su mi prvi i drugi iste vrednosti i slobodno mogu pregaziti nulti element sa novom vrednošću. Najmanji mi je problem napisati ovakvu funkciju, nego... koliko je ovo zahtevno po procesor pošto mi je potrebna relativno velika brzina, simulacija se mora odvijati u realnom vremenu i trenutno je cilj 100 FPS, mada, mislim da nije potrebno čak toliko. Tačnije, svake sekunde sto puta izračunam trenutnu vrednost, odnosno potrebno mi je da dodajem i do 100 novih vrednosti u niz po ovom principu.
Ideja 2
Druga ideja je vezana za pointere. Početak niza pomerim za jedno mesto naniže, upišem element sa indeksom 0. Ostaje smeće pošto je dužina niza konstantna. Ok, nije problem i taj poslednji element da se briše, ali simulacija možda nekada treba da radi 2 dana, a u neke delove memorije se ne može upisivati, tako da mi se ovo baš i ne sviđa.
Pitanje
Šta onda da radim? Da ostavim ovako sa prvim rešenjem i sam implementiram funkciju ili možda takva funkcija već postoji u standardnim bibliotekama cpp-a? Čini mi se da je ova prva ideja isto što i rotiranje za jedno mesto nadesno i ubacivanje „novog“ nultog elementa. Ali... ima li šta kreativnije i praktičnije?
FILO stack mi izgleda kao moguće rešenje, mada se nikada nisam ozbiljno zanimao sa tom vrstom organizacije podataka i stvarno ne znam kako bi to trebalo da izgleda.