Obsahuje dáta (premenné) a funkcionalitu (metódy).
Class
Je "šablóna" ktorá definuje "danú triedu objektov".
Ako si to predstaviť? Class je ako "vykrajovač perníkov" a object je perník samotný (jeden vykrajovač triedy "stromček" vie vytvoriť ľubovoľný počet perníkov stromčekov).
Random Walker
Po tomto úvode si poďme zadefinovať triedu Walker. Ale začnime tým, čo vlastne chceme, aby tento objekt dokázal.
Chceme, aby sa "náhodne" pohyboval.
Ak by nám stačil pohyb v jednom rozmere (napr. osi X) - hodíme si mincou, či má ísť dozadu alebo dopredu. Pre pohyb v 2D priestore potrebujeme náhodný pohyb aj v Y-vej osi.
Nechaj ChatGPT vygenerovať kód pre "random walker" v P5.js. Porovnajte so svojím kódom. Čo je iné?
Pre rýchly bootstrap projektov je OK a väčšinou výhodné nechať si kostru vygenerovať cez ChatGPT. Ale pozor, niekedy veľmi presvedčivo klame 😆
Náhoda? (Nemyslím...)
Funkcia random() nevracia skutočne náhodné čísla ale len "psedonáhodné". Sú výsledkom matematickej funckie, ktorá simuluje náhodu. Avšak po čase sa začnú objavovať patterns.
Ďaľší azda ešte väčší problém je prehnaná uniformita distribúcie vygenerovaných čísel.
Brownov pohyb je neustály neusporiadaný chaotický pohyb častíc. Prvýkrát ho zaznamenal v roku 1827 botanik Robert Brown, ktorý pozoroval správanie peľových zrniečok v tuši.
Pravú podstatu tohto javu objasnil v roku 1905Albert Einstein. Vychádzal pritom z kinetickej teórie látok. Molekuly v roztoku sa pod vplyvom tepelného pohybu neustále zrážajú, pričom smer a sila týchto zrážok sú náhodné a vďaka tomu je aj poloha častíc náhodná.
Brownian motion
Pravdepodobnosť
Normálne rozdelenie pravdepodobnosti - Gauss (alebo to, akú náhodilosť vidíme okolo seba)
Gaussova krivka nám zrkadlí "normálne rozdelenie pravdepodobnosti", ktoré vidíme všade okolo seba. Ak by chcel generovať náhodnú výšku človeka, náhodný brushstroke, náhodnú dĺžku vlasov a podobne... pokiaľ by bola distribúcia pravdepodobnosti rovnaká - výsledky by boli neprirodzené.
Gaussova krivka - so svojím typickým tvarom - známa tiež aj ako Bell curve
Uprav random walker tak, aby dĺžka kroku reflektovala gaussov rozptyl.
Hint: randomGaussian()
Vlastná pravdepodobnosť (Lévy flight)
Pre prelomenie uniformnej distribúcie náhodnosti generovaných čísel si môžeme pomôcť, keď zapojíme vlastnú pravdepodobnosť (P).
Ako príklad pri efektívnom skúmaní priestoru sa dá použiť vlastný variant Lévyho letu.
Ten funguje rovnako ako náš random walker... ale občas odskočí o oveľa väčší krok preskúmať iné územie. Takto ho pokryje rýchlejšie a podobný pattern môžeme hľadať aj pri hladaní potravy u živočíchov.