If you're seeing this message, it means we're having trouble loading external resources on our website.

Ha webszűrőt használsz, győződj meg róla, hogy a *.kastatic.org és a *.kasandbox.org nincsenek blokkolva.

Fő tartalom

A gravitáció és a súrlódás modellezése

Tegyük most valósághűbbé az erőket úgy, hogy az előző példában szereplő gravitációt pontosítjuk és bevezetjük a súrlódást!

A Föld gravitációja

Egy sajnálatos pontatlanságot fedezhettél fel az utolsó példában: minél kisebb a kör, annál gyorsabban esik. Van ebben logika; végül is nemrég fejtettük ki, hogy (Newton második törvénye alapján) minél kisebb a tömeg, annál nagyobb a gyorsulás.
De a valóságban nem ez történik. Ha felmásznál a pisai ferde toronyra és ledobnál két különböző tömegű golyót, melyik érne a földre előbb? A legenda szerint Galilei pont ezt a kísérletet hajtotta végre 1589-ben, és azt fedezte fel, hogy ugyanolyan gyorsulással estek lefelé, és egyszerre érnek földet.
Miért van ez így? Ahogy később látni fogjuk a kurzus során, a gravitációs erőt a test tömege alapján számítjuk ki. Minél nagyobb a test, annál nagyobb az erő. Ezért ha az erő a tömeggel arányos, a tömeg kiesik, ha az erőt elosztjuk a tömeggel. Ezt bevezethetjük a programunkba úgy, hogy megszorozzuk a tetszőlegesen választott (gravitáció által okozott) gyorsulásunkat a tömeggel:
for (var i = 0; i < movers.length; i++) {
    gravity.set(0, 0.1 * movers[i].mass);
    movers[i].applyForce(gravity);
    …
}
Bár a tárgyak most ugyanolyan sebességgel esnek, mivel a szél ereje nem függ a tömegtől, de a tömeg itt nem esik ki, a kis tárgyak továbbra is gyorsabban tolódnak el jobb felé.
Erők készítésével látványos eredményt érhetünk el. A ProcessingJS világa a pixelek játékvilága, és a pixelek világának te már nagymestere lettél. Úgyhogy bármiről, amiről azt gondolod, hogy lehetne erő, csiribá, abból erő is lesz. De eljön az a pillanat, amikor elgondolkodsz azon: „Mégis, hogy működik mindez a valóságban?”
Ha belenézel bármelyik gimnáziumi fizikakönyvbe, találsz olyan képleteket és ábrákat, melyek különböző erőket írnak le – gravitációt, elektromágnesességet, súrlódást, feszültséget, rugalmasságot és más egyebet. Vagy nézegesd a Khan Academy fizika tananyagát! Ebben a fejezetben két erővel fogunk foglalkozni: a súrlódással és a gravitációval. Ezzel nem azt akarjuk hangsúlyozni, hogy a súrlódás és a gravitáció olyan alapvető erők, melyeknek minden ProcessingJS programban meg kell jelenniük. Azért vizsgáljuk ezt a két erőt, hogy az alábbi folyamatra rávilágítsunk:
  • Megértsük az erő elméletét
  • Két részre bontsuk az erő képletét:
    • Hogyan számítsuk ki az erő irányát?
    • Hogyan számítsuk ki az erő nagyságát?
  • Ezt a képletet ProcessingJS kóddá alakítjuk, ami kiszámítja a megfelelő PVectort, amit azután átadunk a Mover applyForce() függvényének.
Ha a fentieket meg tudjuk oldani két erő esetében, akkor azt remélem, hogy ha hajnali háromkor a Google keresőben „a gyenge nukleáris erő” rejtelmeiről olvasol, akkor képes leszel akár az ott találtakat is beépíteni a ProcessingJS programodba.

Képletek kezelése

Rendben, rövidesen leírjuk a súrlódás képletét. Nem először találkozunk képlettel ebben a tananyagban: épp most fejeztük be Newton második törvényének taglalását: F=MA​ (azaz erő = tömeg · gyorsulás). Nem sok időt töltöttünk ezzel a képlettel, mert szép és egyszerű. De azért a kinti világ félelmetes. Elég csak a „normális” eloszlás képletét megnézni, amit a Bevezetőben érintettünk (anélkül, hogy a képletet megnéztük volna):
f(x,μ,σ)=1σ2πe((xμ)22σ2)
A fentiekből kitűnik, hogy a képletekben előszeretettel használnak egy csomó jelet (gyakran a görög ABC betűit). Nézzük most meg a súrlódás (friction) képletét!
Friction=µNv^
Ha már jó ideje nem találkoztál fizikai vagy matematikai képlettel, három kulcsfontosságú dologra hívnám fel a figyelmedet, mielőtt továbblépnénk.
  • Értékeld ki a jobb oldalt, és rendeld hozzá a bal oldalhoz! Ez pont úgy működik, mint a programkódban. Amit itt tennünk kell, az az, hogy kiszámoljuk az egyenlet jobb oldalát, és az eredményt hozzárendeljük a bal oldalhoz. A fenti esetben a súrlódási erőt akarjuk kiszámítani – a bal oldal megmondja, mit akarunk kiszámolni, és a jobb oldal megmutatja, hogyan kell azt kiszámolni.
  • Vektorról, vagy skaláris értékről van szó? Fontos szem előtt tartani, hogy néha vektor az eredmény, máskor pedig szám. Például ebben az esetben a súrlódási erő egy vektor. Ezt onnan látjuk, hogy a „friction” szó fölött ott látjuk a nyilat. Nagysága és iránya van. Az egyenlet jobb oldalán szintén van egy vektor, amit a v^ jelöl, ami ebben az esetben a sebesség egységvektorát jelenti.
  • Amikor a jeleket egymás mellé írják, az azt jelenti, hogy össze kell szorozni őket. A fenti képletnek négy eleme van: -1, µ, N, and v^. Ezek összeszorzandók, és a képlet így olvasandó: Friction=µNv^

Súrlódás (friction)

Kezdjük a súrlódással a fenti elvek alapján!
A súrlódás disszipatív erő. A disszipatív erőre az jellemző, hogy a rendszer összesített energiaszintje csökken, amikor a test mozgásban van. Tegyük fel, hogy autót vezetsz. Amikor a lábaddal lenyomod a fékpedált, akkor az autó fékje súrlódást használ a kerekek mozgásának lassításához. A kinetikus energia (a mozgás) hőenergiává alakul át. Amikor két felület kapcsolatba kerül egymással, súrlódás keletkezik. A súrlódás teljes modelljében külön esetként szerepelne a statikus súrlódás (a nyugvó test a felületen) és a kinetikus súrlódás (a mozgó test a felületen), de mi itt most csak a kinetikus esetet fogjuk vizsgálni.
Íme a súrlódás képlete, egy illusztrációval egybekötve:
Súrlódás bemutatása szánkózó példájával, képlettel: Friction =−1µN*v
Most már rajtunk múlik, hogy ezt a képletet felbontsuk két összetevőre, ami meghatározza a súrlódás irányát és nagyságát. A fenti ábra alapján láthatjuk, hogy a súrlódás a sebességgel ellentétes irányba mutat. Ez a képletnek ez a része: 1v^, azaz -1 szorozva a sebesség egységvektorával. A ProcessingJS-ben ez azt jelenti, hogy vesszük a sebesség vektort (velocity), normalizáljuk és megszorozzuk -1-gyel.
var friction = velocity.get();
friction.normalize();
// Állapítsuk meg a súrlódási erő irányát 
// (a sebességgel ellentétes irányba mutató egységvektor)
friction.mult(-1);
Itt megfigyelhetsz még két plusz lépést. Először is fontos másolatot készíteni a sebességvektorról, mivel nem akarjuk véletlenül megfordítani a tárgy haladási irányát. Másodszor, normalizáljuk a vektort. Ez azért van, mert a súrlódás nagysága nem függ attól, hogy milyen gyorsan halad a tárgy, ezért egy 1 nagyságú vektorból indulunk ki, amit azután egyszerűen tudunk méretezni.
A képlet szerint a hossz μ·N. μ, a görög mű betű, itt a súrlódási együttható jelölésére szolgál. A súrlódási együttható egy adott felületre jellemző súrlódási erőt határozza meg. Minél magasabb ez az érték, annál erősebb a súrlódás; minél kisebb, annál gyengébb. Egy jégtömb súrlódási együtthatója sokkal alacsonyabb lesz, mint mondjuk a smirglié. Mivel mi a képzelt ProcessingJS világban vagyunk, úgy állítjuk be az együtthatót, hogy az az általunk elképzelt súrlódást szimulálja.
var c = 0.01;
Most nézzük a második részt: N. Az N a kényszererő (normal force), arra a kontakterőre vonatkozik, amit egymást érintő testek fejtenek ki. Még pontosabban, a kontakterő merőleges összetevőjére.
Gondolj egy úton haladó autóra! Az autó lefelé nyomja az utat, és Newton harmadik törvénye által tudjuk, hogy az út felfelé nyomja az autót. Ez a kényszererő. A vízszintesen mozgó test egyszerű esetében a kényszererő egyenlő a tömeg szorozva a gravitációs erővel, Fn=mg. Ez azt jelenti, hogy egy könnyű sportautó kisebb kényszererőt fejt ki, így kisebb súrlódással találkozik, mint egy hatalmas vontató teherautó.
A fenti szánkózós példában a tárgy egy lejtős felületen mozog, ezért a kényszererő kiszámítása egy kicsit bonyolultabb, mert nem ugyanabba az irányba hat, mint a gravitáció. Ehhez egy kis trigonometriai tudásra van szükségünk a szögekkel kapcsolatban.
Egyenlőre a célunk egy „elég jó" szimuláció készítése ProcessingJS programmal, nem törekszünk tökéletes szimulációra. Például azt is feltételezhetjük, hogy a súrlódás esetében a kényszererő nagysága mindig 1. Ekkor az N a mi esetünkben egyszerűen:
var normal = 1;
Amikor a következő fejezetben rátérünk a trigonometriára, majd újra részletesen megtárgyaljuk a fentieket, és a súrlódásos példánkat kifinomultabbá tesszük.
Most, hogy megvan a súrlódási erő iránya és nagysága, össze is rakhatjuk az egészet...
var c = 0.01;
var normal = 1;
var frictionMag = c * normal;
var friction = movers[i].velocity.get();
friction.mult(-1);
friction.normalize();
friction.mult(frictionMag);
...és hozzáadjuk az „erők" példánkhoz, ahol tárgyainkat éri a szél, a gravitáció és most már a súrlódás is. (A programban található megjegyzés: 1. sor: Dan Shiffman, natureofcode.com példája alapján.)
Ha figyeled a futó programot, megfigyelheted, hogy a körök egyre kevesebbet mozognak, és egy helyre csoportosulnak. Mivel a súrlódás folyamatosan erőt fejt ki a tárgyakra a mozgásuk irányával szemben, a tárgyak fokozatosan lelassulnak. Ez vagy hasznos technika, vagy probléma, attól függően, hogy mi az animációval a célod.

Ez a „Természetes szimulációk" tananyag a Daniel Shiffman által készített „The Nature of Code” alapján készült, a Creative Commons Attribution-NonCommercial 3.0 Unported License szerint.

Szeretnél részt venni a beszélgetésben?

Még nincs hozzászólás.
Tudsz angolul? Kattints ide, ha meg szeretnéd nézni, milyen beszélgetések folynak a Khan Academy angol nyelvű oldalán.