07 - Náhoda

Náhodnosť je v generatívnej grafike a kreatívnom programovaní celkovo veľmi dôležitý prvok, tak si ho osvojíme čo najskôr.

Úloha 1

Na rozcvičenie a zopakovanie vytvorte skeč, ktorý bude vykresľovať takýto obrazec:​

Výstup pre x=200, y=200, d=300, veľkosť okna 400x400

Program používa premenné x a y na určenie stredu obrazca. Premenná d určuje veľkosť obrazca. Biele čiary, ktoré križujú obrazec, majú hrúbku 40 pixelov a okrúhle konce.

Ak vás zaujíma, ako urobiť na čiare okrúhle konce, pozrite si dokumentáciu k príkazu strokeCap: https://processing.org/reference/strokeCap_.html

​Vyskúšajte svoj program aj s inými hodnotami premenných:

​Výstup pre x=100, y=150, d=200, veľkosť okna 400x400.

Úloha 2

Vytvorte nový skeč, ktorý bude obsahovať 3 float-ové premenné x, y a d. Program vykreslí na obrazovku kruh na súradnice x,y s priemerom d:

Výstup pre hodnoty x=100,y=200,d=50

Úloha 3

V programe, kde do premennej d priraďujete hodnotu:

float d = 50;

zmeňte toto priradenie na:

float d = random(200);

Skúste skeč pustiť viackrát, sledujte ako vždy dá iný výsledok.

Gratulujem, práve ste použili náhodnosť.

Príkazy a funkcie

Namiesto pevnej hodnoty 50 sme v programe použili príkaz random(200). Doteraz sme príkazy používali na to, aby počítač niečo vykonal: nakreslil kruh, nastavil farbu a podobne. Tu sme použili príkaz random namiesto hodnoty 50. To je nová vec.

Niektoré príkazy len vykonajú čo treba a nič nám nevrátia. Ako napríklad circle, ktorý nakreslí kruh, ale inak s nami nekomunikuje. Ale sú príkazy, ktoré niečo vykonajú a vrátia nám, čo im vyšlo.

Napríklad príkaz random vygeneruje náhodné číslo a toto náhodné číslo nám vráti ako výsledok. Príkazy, ktoré vracajú výsledok, sa volajú aj funkcie.

Pojem príkaz a pojem funkcia sa často zamieňajú. Netreba si z toho robiť ťažkú hlavu. Hlavné je vedieť, že niektoré príkazy vedia vrátiť hodnotu a s touto hodnotou potom môžeme ďalej pracovať.

Príkaz random()

V príkaze random sme použili parameter 200. Ak si pozriete dokumentáciu https://processing.org/reference/random_.html dozviete sa, že random nám vráti náhodné desatinné číslo (float) niekde medzi nulou a zadaným parametrom.

Úloha 4

Vytvorte nový skeč, ktorý do konzoly vypíše náhodné číslo medzi 010.

Úloha 5

Keď dáme príkazu random dva parametre, vygeneruje nám náhodné číslo ležiace medzi nimi.

Vytvorte nový skeč, ktorý do premennej teplota priradí náhodné číslo medzi 9 a 17. Program následne vypíše premennú teplota takto:

Dnesna teplota: 14.705211 stupnov

Náhodné celé číslo

Príkaz random generuje desatinné čísla (float), a preto sme aj v Úlohe 1 potrebovali, aby premenné boli typu float. Keby sme chceli uložiť náhodné číslo do premennej typu int, bude sa Processing sťažovať, lebo krabica typu int nedokáže uchovávať hodnotu typu float:

Processing sa sťažuje na "Type mismatch", čiže máme miš-maš v typoch premenných.

My ale vieme jednoducho vyrobiť z float hodnoty hodnotu typu int takzvaným pretypovaním:

Mišmaš v typoch sme vyriešili pretypovaním

Hodnotu, ktorú chceme zmeniť - v našom prípade random(200) - sme zavreli do zátvoriek a pred zátvorku napísali int. Toto spôsobí, že desatinné číslo v zátvorke sa premení na celé číslo a už sa vojde do krabice typu int.

Pri taktomto pretypovaní z float na int sa číslo nezaokrúhľuje, ale orezáva. To znamená, že napríklad z hodnoty5.8 sa po pretypovaní nestane 6, ako by ste možno čakali, ale 5. Desatinná časť sa kompletne odrezáva.

Úloha 6

Vytvorte nový skeč, ktorý bude mať premennú typu int s názvom ludia a do nej priraďte náhodnú hodnotu v rozsahu 0100. Program vypíše, koľko ľudí prišlo na koncert:

Na koncert prislo 68 ludi

Úloha 7

Vytvorte nový skeč, ktorý vygeneruje náhodný PIN pre. Do 4 premenných a, b, c, d priraď náhodné čísla od 0 po 9, a potom ich jedným príkazom println vypíšte. Napríklad:

Tvoj nový PIN je 0 3 7 3

Úloha 8

Vyrob generátor náhodných dátumov (nech má každý mesiac 30 dní). Po spustení program vypíše, napríklad:

Koniec sveta bude 30 . 2 . 2019

Úloha 9

Vytvorte program, ktorý vykreslí kruh na náhodnú pozíciu x,y a s náhodným priemerom d. Priemer je náhodný z rozsahu 10100.

Náhodná farba

Pomocou príkazu random vieme vytvoriť aj náhodnú farbu. Napríklad takto nastavíme náhodné sivé pozadie:

background(random(256));

Alebo náhodné RGB farebné pozadie:

background( random(256), random(256), random(256) );

Nepotrebujeme teda vždy priradiť random do nejakej premennej, môžeme ho použiť priamo ako číselnú hodnotu v parametre príkazov ako background, fill a iných.

Úloha 10

Vytvorte skeč, ktorý bude kresliť obdĺžnik s náhodnými rozmermi, na náhodnú pozíciu, s náhodným pozadím, náhodnou farbou výplne, náhodnou farbou čiary a náhodnou hrúbkou čiary.

Last updated