03 - Sila
Last updated
Last updated
V predchádzajúcej kapitole sme si vysvetlili, čo to znamená vektor - ako základný prvok pre simuláciu pohybu a základnej fyziky. Vysvetlili sme si, že pohyb sa dá predstaviť, ako vektor rýchlosti aplikovaný na pozíciu. Zároveň, ze rýchlosť sa dá vyrátať ako zrýchlenie aplikované na rýchlosť. Výsledné animácie tak-trocha pripomínali správanie sa objektov v beztiažovom stave.
Teraz si to všetko ideme opäť trocha skomplikovať. Oprášime fyziku z čias strednej školy a skúsime si o čosi presvedčivejšie nasimulovať pohyb v našom kóde.
Pod silou si opäť môžeme predstaviť všetko možné. Sila zvyku, pomocná sila do kuchyne, silná káva a silné reči.
Tentokrát asi nebude asi prekvapenie, naša predstava je tentokrát:
Sila je vektorová fyzikálna veličina, ktorá vyjadruje mieru vzájomného pôsobenia telies alebo polí. Obyčajne sa označuje písmenom F z angl. force. https://sk.wikipedia.org/wiki/Sila
Objekt v pokoji zostáva v pokoji a objekt v pohybe zostáva v pohybe.
Sily sa vždy vyskytujú v pároch. Dve sily majú rovnakú silu, ale opačný smer.
(tento zákon síce platí ale v našom svete ho budeme pre jednoduchosť často opomínať, pretože je väčšinou marginálny)
Sila sa rovná súčinu hmotnosti a zrýchlenia.
Kde F je pôsobiaca sila, a je vyvolané zrýchlenie a m je hmotnosť hmotného bodu.
Nás zaujíma práve výpočet zrýchlenia a = F / m.
Ako určíme hmostnosť? Pre začiatok si povedzme, že hmotnosť = 1 a odrazu je výpočet len:
Teraz si otvorme našu triedu Mover. Budeme chcieť pridať metódu:
zrýchlenie sa rovná súčtu všetkých síl vydelených hmotnosťou
Teraz dôležitá poznámka. Netreba zabúdať na 1. newton zákon. Objekt v pohybe zostáva v nezmenenom pohybe. My ale v každom kroky plánujeme akumulovať zrýchlenie!
Je dobré uvedomiť si, že zrýchlenie narozdiel od pozície nieje vôbec závislé od predchádzajúcej hodnoty. Ak nepôsobí žiadna nová sila, proste nieje a objekt sa pohybuje konštantnou rýchlosťou.
Preto do metódy update()
na konci zresetujeme zrýchlenie. (ako?)
Ono popravde, v skutočnosti objekty nejakú hmotnosť vždy majú.
Poďme si od našej triedy Mover pridať ďaľšiu hodnotu:
A výsledné zrýchlenie treba ešte predeliť hmotnosťou:
Alebo:
Zober nasledujúci sketch:
alebo
Zadefinuj applyForce()
, pridaj gravitáciu a vietor z prava po klknutí myšou.
Uprav triedu mover tak, aby vedela príjmať pozíciu a hmotnosť pri vytváraní objektu
Aplikuj mass na veľkosť objektu. Vytvor dva alebo viac objektov s rôznou velkosťou. Prečo sa gravitácia správa zvláštne?
Podľa experimentu od Galilea (1589) vieme, že dva objekty s rozličnou hmotnosťou dopadnú z výšky naraz. Pritom vieme, že newtonov 2. zákon platí. Ako je tomožné? Pretože gravitácia je aplikovaná v súmernosti s váhou objektu.
je sila, ktorá pôsobí opačne k pohybu.
Podľa vzorca, smer je pohyb * -1
a magnitúda je μ∗N
, kde μ je koeficient trenia.
Aplikuj trenie pri každom dopade lopty o zem.
Uprav sketch, aby si vedel každým klikom pridávať objekt na scénu rôznej velkosti (= vytvor pole let movers = []
). Zmeň pridávanie vetra na kliknutie pravým tlačidlom myši (mouseButton === RIGHT
).
Pozoruj: aký je rozdiel medzi aplikovaním sily "vetra" a "gravitáciou" v závislosti od velkosti/hmotnosti?
Bonus 1: nastav velkosť moveru ťahaním myši (starterpack: https://editor.p5js.org/igor-kamil/sketches/aiMqtcUrN)
Bonus 2: pridaj zvuk pre dotyk s hranou sound.play();
.
Môžeš vychádzať z nasledujúceho. sketchu:
Motivačný track k téme: