04. Vektory v poli
Last updated
Last updated
Vytvorte skeč, ktorý bude simulovať padajúcu kvapku vodu.
Malá modrá elipsa má polohu uloženú vo vektore kvapka
. Na začiatku je táto poloha niekde náhodne na hornom okraji obrazovky.
Vektor gravitacia
určuje smer pohybu, nastavte ho na súradnice (0, 3)
, aby kvapka padala nadol.
Animujte kvapku tak, aby sa pohybovala v tomto smere. Keď spadne pod spodný okraj obrazovky, vygeneruje sa kvapka
znovu náhodne na hornom okraji obrazovky.
Jedna kvapka ešte dážď nerobí. Ale ak už vieme rozanimovať padajúcu kvapku pomocou vektora jej polohy, tak vieme urobiť celé pole takýchto vektorov.
Namiesto jedného vektora kvapka:
si zadefinujeme pole vektorov:
Pri vytváraní poľa musíme vedieť, aké bude veľké. Vyrobme si premennú pocet
, ktorá bude určovať, koľko kvapiek máme v programe:
Ďalej, keď generujeme polohu kvapky v podprograme setup()
, tak si vytvoríme najprv celé pole a potom ho vo for
cykle naplníme, položku po položke, náhodnými polohami:
A tiež aj pohyb a vykresľovanie v podprograme draw()
zaobalíme do for
cyklu a namiesto premennej kvapka
budeme pracovať s i-tou položkou poľa kvapky[i]
:
Upravte skeč tak, aby na začiatku neboli všetky kvapky na hornom okraji obrazovky, ale aby poloha bola náhodná v rámci celej obrazovky.
Všetky operácie, ktoré sme predtým robili na jednom vektore kvapka
teraz robíme pomocou for
cyklu na jednotlivých vektoroch v poli cez kvapky[i]
.
Pridajte do programu k vektoru gravitacia
aj vektor vietor
, ktorého x-ová súradnica bude náhodná z intervalu -1, 1
a ktorého y-ová súradnica bude 0
. Bude predstavovať vietor fúkajúci horizontálne.
Do výpočtu pohybu kvapky pridajte ku gravitácii aj vietor. Takto:
Tento zápis sa dá čítať aj tak, že poloha = poloha + gravitácia + vietor.
Vytvorte skeč, ktorý má pole vektorov bakterie
a na začiatku vygeneruje do poľa 20 náhodných pozícii pre baktérie. Tie sú potom v draw()
vykreslené ako bodky:
Padajúce kvapky mali všetky rovnaký smer. Baktérie nebudú mať rovnaký smer, každá sa bude hýbať inak náhodne. Pred vykreslením každej baktérie vygenerujte smer ako vektor s náhodnými súradnicami v rozsahu -2,2 a pohnite baktériu o tento smer.
Zmeňte výpočet smeru tak, aby sa každá baktéria približovala ku kurzoru myši.
Upravte skeč tak, aby bol pohyb baktérie súčtom pohybu smerom k myši (Úloha 6) a náhodného pohybu (Úloha 5):
Doteraz sme každú jednu položku spracovávali samostatne. Vygenerovali sme ju samostatne. Vykreslili sme ju samostatne. Síce v cykle for
, spolu so všetkými ostatnými, ale jedna baktéria nevedela nič o iných baktériách, ani kvapka dažďa nevedela nič o ostatných kvapkách. V nasledujúcich úlohách si ukážeme, ako spájať jednotlivé položky v poli.
Vygenerujte do poľa vektorov s názvom vrcholy
10 náhodných pozícii a na obrazovke vypíšte na i
-tu pozíciu číslo i
:
V ďalšom kroku budeme spájať čiarou každú vrchol v poli s nasledujúcim vrcholom v poli.
Pozícia i-teho vrcholu je nám vo for
cykle známa, je to vrcholy[i]
. Čo je ale nasledujúci vrchol? No je to vrcholy[i+1]
. Čiaru teda medzi nimi nakreslíme takto:
Lenže takto napísaný program nám zhavaruje na známej chybe:
ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 10
To preto, že pri poslednom vrchole, s indexom 9, chceme nakresliť čiaru do vrcholu s indexom 10, ale pole už žiadny vrchol s indexom 10 nemá. A to je chyba.
Upravte program tak, aby čiaru vykresľoval len ak index i
nie je ešte na konci poľa. Takto upravený program už bude fungovať: