04 - Oscilácia
Kmitanie všade okolo nás
Úvod a motivácia
Po uvedení vektorov a síl by sme sa teraz azda mohli priamo pustiť naplno do modelovania húfov rýb, lietajúcich vtákov, plaziacich dážďoviek, poletujúcich mušiek a množstva iných organizmov okolo nás.
Avšak je tu ešte jedna dôležitá kapitola, skôr, než sa naplno ponoríme do "aplikovania" simulácie prírodných úkazov.
Je to kapitola o kmitaní (anglicky oscillation). Možno nie hneď na prvý poľad, ale celý svet okolo nás kmitá. Je to ten najrozšírenejší pohyb.
Kmitajú atómy na mieste v pevných objektoch. Vlnia sa vlny. V mori. Aj tie elektromagnetické okolo nás. Rádio. Aj wifi.
Kmitá naše srdce. Osciluje náš krvný obeh. Aj dýchanie.
Aj svetlo, ktoré vychádza z displeja keď práve toto teraz čítaš je kmitanie. Každá farba na trocha inej frekvencii.
Kmitanie je pre pochopenie reálneho sveta kľúčové. Tak poďme na to.
Uhly
Úloha 1
Doplň uhly do obrázku:
Dobný zádrhel spočíva v tom, že vo svete programovania sa uhly zadávajú v radiánoch.
Čo je to radián?
Úloha 2
Zober nasledujúci sketch:
let angle = 0;
function setup() {
createCanvas(640, 240);
}
function draw() {
background(115, 130, 144);
noStroke();
rectMode(CENTER);
// @todo translate();
// @todo rotate();
fill(194, 216, 185);
rect(width/2 - 50, height/2, 100, 30);
fill(228, 240, 208);
rect(width/2 + 50, height/2, 100, 30);
// @todo increment angle
}
Alebo zduplikuj sketch:
A implementuj rotáciu okolo stredu.

Úloha 3 (bonus)
Nastav opacity pre pozadie
Dynamicky rotuj podľa mouseY (a nezabudni na opačnú rotáciu)
Uhlový pohyb
V predchádajúcich kapitolách sme si vysvetlili, že základ pohybu sa dá predstaviť ako reťazec vzájomne sa ovplyvňujúcich vektorov:
sila (resp. sily) -> zrýchlenie -> rýchlosť -> pocícia
Vieme tieto pravidlá aplikovať aj na rotáciu?
angle = angle + angular velocity
angular velocity = angular velocity + angular acceleration
Poďme prepísať sketch z poslednej úloha pridajme doň premenné:
let angle = 0; // angle current position
let aVelocity = 0; // angle velocity
let aAcceleration = 0.0001; // angle acceleration
Za poznámku stojí povšimnutie, že sa tu jedná o skalárnu hodnotu a nie vektor.
Úloha 4
Otvor sketch z minula. A pridaj uhlový pohyb pre každý Mover.
Prípadne začni so sketchu:
Pribudla nám tu trieda Ground. V nej si všimni stav ground.magic
- ten sa aktivuje keď na klávesnici stlačíš klávesu "m".
Úlohou je vymyslieť stav "magic".
Avšak určite by v ňom pri dotyku objektu so zemou mal začať objekt rotovať (náhodne? v smere dotyku? to je na tebe...).
Druhá časť úlohy je zistiť, že animácia skončila. Vtedy musí prestať aj rotovať.
Tretia časť úlohy - uprav metódu "display" v triede Mover podľa seba, aby zobrazovala niečo tebe blízke - z čoho sa dá vyčítať orientácia.
Dvojité kyvadlo
Last updated