Kad sam već započeo, da ispravim i grešku. Jer stvarno, temelj engina za 2D paltformer igricu je ono gore. Stvarno nije nauka i svatko bi se mogao okušati napraviti igricu
No zalomila mi se greškica u računanju koordinata i ispravak je sljedeći:
lopta.x = lopta.x + lopta.vx*t/2;
lopta.y = lopta.y + lopta.vy*t/2;
E sad, ako bi zavirli u knjige fizike, vidjeli bi da je to formula za izračun puta koje prelazi tijelo koje ubrzava konstantnom akceleracijom.
No u istoj toj knjizi ima hrpetina formula …te za ovakvo ubrzanje, te za onakvo ubrzanje…te za gibanje konstantnom brzinom…pa za kosi hitac…pa slobodni pad…pa vertikalni hitac…itd…itd. Čovjeka od svih tih formula može samo zaboliti glava.
A postoji suvše lak način da sve te formule imate zauvijek u glavi ako zapamtite samo dva pravila.
Pošto je izračun brzine tijela i pozicije tijela… temelj svake igrice, ovo je svakako jako korisno razumjeti…pa ću biti dobre volje objasniti ta dva pravila.
Za početak slikica koju ću komentirati:
Na skici se vide tri grafa.
- prvi graf prikazuje akceleraciju tijela (ubrzanje)
- drugi graf prikazuje brzinu tijela
- treći graf prikazue prijeđeni put tijela
Primjetimo da je x-os zajednička za sva tri grafa i ona predstavlja vremensku os. Na toj vremenskoj osi sam označio dva momenta. t1 i t2. t1=0 i t2=10. Što znači da promatramo što se dešava sa tijelom od nulte sekunde do 10 sekunde njegovog gibanja.
Valja spomenuti da na tijelo u momentu t1 počinje djelovati nekakva sila, koja rezultira njegovim ubrzanjem. To vidimo u prvom grafu da nam je akceleracija konstanta i u svakom momentu iznosi 5.
Kako tijelo ubrzava, očito mu sa svakim sljedećim trenutkom raste brzina. To vidimo u drugom grafu kako brzina konstatno raste. Tijelo je znači mirovalo u trenutku t1 jer je tada brzina bila 0. Nakon toga pod utjecajem sile tijelo ubrzava, tj. brzina mu konstatno raste.
Treći graf prikazuje prijeđeni put. Normalno da tijelo koje ima neku brzinu, prelazi i put. No kako je brzina u svakom momentu sve veća i veća…očito će u svakoj sljedećoj sekundi tijelo uspjeti prevaliti veći put nego u prethodnoj sekundi. Zato nam graf prijeđenog puta izgleda tako “eksponencijalno”.
I sada ono bitno. Treba shvatiti koje su relacije između ta tri grafa. To je podosta dobro razumjeti, jer te iste relacije postoje svuda u svemiru. One nisu nešto što se tiče samo sprege “akceleracija, brzina, put”.
Valja primjetiti i da te tri stvari promatranja: “akceleracija, brzina, put”, su praktički samo jedna stvar.
Ako se sjetite mainloop gore iz programskog coda, vidjet ćete da ja nigdje nisam renderirao brzinu ili akceleraciju u slici. Ja sam samo renderirao loptu na njenoj x,y poziciji za svaki moment t. Brzina i akceleracija se pojavljuju kao posljedica renderiranja lopte na različitim pozicijama. Znači postoji samo lopta na nekoj poziciji u nekom momentu t. Promjenu te pozcije lopte mi opažamo kao brzinu lopte…pa i kao akcelerciju lopte.
Zašto bi tu stali? Pa postoji tako i akceleracija akceleracije. Pa akceleracija akceleracije akceleracije…itd u beskonačnost. Znači suštinski postoji samo pozicija lopte, a sve drugo su “efeketi” koje opažamo zato jer lopta mijenja tu svoju poziciju.
To se matematički kaže:
- brzina je derivacija pozicije
- akceleracija je druga derivacija pozicije
- ili akceleracija je derivacija brzine
…itd možemo u beskonačnost. Mi možemo derivirati neku promjenu koliko god puta želimo.
Nemojte da vas uplaši riječ derivirati. Vrlo je jednostavno, derivacija je promjena iznosa nečega
Tako je brzina promjena pozicije u vremenu
A akceleracija je promjena brzine u vremenu
I zato sam gore rekao da ono što ću objasniti je primjenjivo na svašta, jer sve stvari u svemiru prolaze svoju promjenu …ne radi se tu samo o promjeni pozicije, što vidimo kao brzinu. Isto se čak preslikava i na psihološke stvari, jer i sreća je čak promjena nečega…sreća je derivacija nečega. I kad se shvati čega, lakše je nekako razlučivati bitno i nebitno… …vratimo se na fiziku
Sada kada sam objasnio što je derivacija, valja spomenuti što je obratni proces. Obratni proces se zove integracija.
Pa je tako brzina integral akceleracije po vremenu
A prijeđeni put je integral brzine po vremenu.
I evo nas kod derivacija i integrala…odlična dva alatića koja su nehotice ozlogašena i neshvaćena od šire publike. A nisu uopće strašni kada se shvate. Ne kada se nabubaju njihove formule, nego kada se vizualno shvati što oni predstavljaju.
Prije nego se vratimo na grafove, ukratko što je integral i derivacija u vizualnom/geometrijskom smislu.
Pa integral je površina ispod grafa, a derivacija je kut tangete grafa.
Huh, zbunjujuće zvuči…ali dječja igra je. Pazi dalje…vratimo se sada gore na graf akceleracije.
Kolika je površina ispod grafa akceleracije između momenta t1 i t2?
Vidimo da je to pravokutnik kojeg zatvaraju stranice dužina 5 i 10, te je onda površina = 50.
Kako je brzina integral akceleracije, to znači da brzina u momentu t2 mora biti 50.
Ajmo to logički opstruirati. Ako tijelo ubrazava iznosa 5.
(Čega 5? Pa 5 brzina po sekudni. A pošto je jedinica brzine “m/s” …onda imamo (m/s)/s i dobivamo da se akceleracija izražava kao “m/s^2”)
Znači ako ubrzava 5 brzina po sekundi, znači svake sekunde će brzina narasti za 5. I nakon 10 sekundi će logično brzina biti 50. I to je po geometriji ta površina ispod grafa.
Ajmo izvesti formulu za isto, kolika je površina ispod grafa? Jedna stranica nam je “a” druga je (t2 - t1) ili ti ga delta_t (dt). Znači površina ispod grafa je “a * dt
” …iz čega dobivamo formuli za promjenu brzine:
“dv = a * dt”
Zašto je to formula za promjena brzine (dv)? Zašto to nebi bila formula za konačnu brzinu u momentu t2?
Pa zato jer integral između momenta t1 i t2 nezna ništa o stanju brzine koja je bila prije momenta t1. Moglo je tijelo do momenta t1 već juriti 100m/s, što znači da bi se između t1 i t2 tijelo opet ubrzalo za 50m/s, ali bi mu konačna brzina onda bila 150m/s.
Što će nam reći, da kod integriranja uvijek moramo znati koliko smo imali početno stanje i pribrojiti ga rezultatu integriranja. Prema tome imamo kompletnu formulu za brzinu:
v2 = v1 + (a * dt)
Ajmo sada izvesti formulu za prijeđeni put. Znači isto površina ispod grafa, ali ovog puta površina grafa brzine. Vrlo jednostavno:
s2 = s1 + (v2*dt/2);
s1 je početno stanje prijeđenog puta i isto ga moramo uračunati kao i početno stanje brzine.
v2*dt/2 je ništa drugo nego površina ispod grafa brzine…gdje ovog puta imamo trokut, a poršina trokuta je ekvivalent polovici povrišne pravokutnika. I zato moramo podijeliti sa tih dva.
Morate uvidjeti da smo vrlo vrlo jednostavno došli do formule koja i nije tako banalna:
s2 = s1 + (v2*dt/2);
I to je to prvo predivno pravilo. Integral je površina ispod grafa.
Raditi bilo kakvu fiziku, pa i onu najosnovniju…bez toga je jednostavno glupo. Mogu reći da je sramota za srednju školu da preskaču tu lekciju o integralima. Fizika postaje daleko jednostavnija kada se to shvati.
Drugo pravilo drugi puta…bilo voljnih poslušati ili ne. xd