00 - Úvod - pohyb, náhoda a pravdepodobnosť
Class vs Object
Úvodom si pripomeňme trocha princípy .
Object
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.
Dáta: poloha (pozícia X/Y)
Funkcionalita: konštruktor, pohyb a zobrazenie
Pripomeňme si, ako sa definujú triedy v p5.js: https://p5js.org/reference/#/p5/class
Vychádzať môže zo sketchu.
Úloha 1
V tejto chvíli sa vie hýbať 4 smermi. Uprav kód aby sa hýbal 8 smermi:
Úloha 2
Nedovoľ objektu opustiť plochu.
Hint: contrain()
Úloha 3 (bonus, možno vo dvojici?)
Nechaj ChatGPT vygenerovať kód pre "random walker" v P5.js. Porovnajte so svojím kódom. Čo je iné?
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
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 1905 Albert 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á.
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é.
Úloha 4
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.
Úloha 5
Uprav random walker tak, aby s určitou pravdepodobnosťou (7%) spravil náhle veľký krok úplne inam.
Last updated