Következő lapNext Page Arrow

Fizlab (MyPhysicsLab.hu)

Merev testek ütközése

This page is part of the website prepared by Sándor Nagy with kind permission from Erik Neumann as a translation to Hungarian of his original site MyPhysicsLab—Physics Simulation with Java.

Ez a szimuláció kétdimenziós hasábokat (téglalapokat) mutat, melyek 2 dimenzióban ütköznek.
Ha valamelyik tárgy közelébe kattintunk, akkor olyan erőt gyakorolunk rá az egérrel, mintha gumiszalaggal húznánk (nevezzük az ilyent gumiszalagerőnek). A billentyűzet segítségével viszont a "tolóerőt" lehet szabályozni. Az S, D, F, E billentyű a kék tárgyat vezérli. A zöld tárgyat a J, K, L, I (ill. a ← ↓ → ↑) billentyű irányítja. Változtatható a gravitáció, a rugalmasság (pattogás), valamint a csillapítás (súrlódás). Összesen 1-6 tárgy lehet a porondon. A zöld tárgy tömege állítható, a többié pedig mindig 1.
Ha nem jön elő a szimuláció, akkor érdemes elolvasni a Java engedélyezéséről szóló instrukciókat. A kapcsolatos fizikát és matekot lásd lentebb.




Alább látunk egy képet a betűk elhelyezéséről az angol billentyűzeten. Ha a billentyűk nem működnek, akkor először próbáljunk az egyik tárgy közelébe kattintani. Ettől kezdve a billentyűlenyomást közvetlenül a szimuláció fogja észlelni. Egyes böngészők esetében (pl. Opera) előbb be kell vinnünk egy numerikus adatot (pl. gravitáció) és csak az után jön a kattintás az applet felületére, hogy a szimuláció észlelje a billentyűeseményeket.
keyboard thruster controls
A billentyűvezérlés és a tolósugár kapcsolata az objektumokhoz képest. A tolóerő a tolósugárral ellentétes irányú, és a megjelölt pontban hat.

Ha a rugalmasság 1-nél kisebb, a gravitáció pedig 0-nál nagyobb, akkor a tárgyak előbb-utóbb leülepednek a padlóra. Minthogy ebbe a szimulációba nem építettem be nyugalmi kontakt erőt, a szimuláció ilyenkor 'elakad'.

Energia-hasábdiagram

A szimuláció helyességét úgy ellenőrizhetjük, ha kijelöljük az "Energiaábrázolás" négyzetet, és figyeljük az impulzus és az energa értékét ütközés előtt és után. Ha a csillapítás = 0, és a rugalmasság = 1, akkor az energiának nem szabad változnia. Ha a tárgyak egymással ütköznek, az összes impulzusuknak nem szabad megváltoznia, de ha valamelyik épp a (végtelen nagy tömegűnek tekintett és ezért mozdulatlan) fallal ütközik, akkor az impulzus megváltozik.

A hasábdiagram a gravitációs (potenciális), forgási (rotációs) és a transzlációs (egyenes vonalú mozgással kapcsolatos kinetikus) energia-összetevőket mutatja. Ha a gravitáció nulla, természetesen nincs gravitációs potenciális energia.
energy bar graph
Az energia és impulzus számítását lentebb magyarázom el.

Merev testek mozgásának fizikája

rigid body variables
merev test helyzetkoordinátái
Az ütközéseket egyelőre figyelmen kívül hagyva, a testekre ható erők a következők Mindegyik test helyzetét három-három változó jellemzi: Az egyes testekhez három-három sebességváltozó is tartozik:
A test mozgásegyenleteibe a következő módon épül be a testre ható F = (Fx, Fy) eredő erő és a τ forgatónyomaték: Fx = m x''
Fy = m y''
τ = I θ''
ahol m = tömeg és I = tehetetlenségi nyomaték a tömegközéppont körül (lásd a következő szakaszt). A vektorokat, mint az F, félkövér betű szimbolizálja felülvonással.

Tolóerő

thrust force vector
a tolóerő vektora
Most pedig fokozatosan felépítjük a mozgásegyenleteket egyenként véve figyelembe a különböző erőket. A tolóerővel kezdjük. Legyen T = (Tx, Ty) a tolóerő vektora, mely a test P pontjára hat. A tolóerő az m x'' = Tx
m y'' = Ty
egyenleteknek megfelelően gyorsítja a testet. Ezekben az egyenletekben nem tükröződik az, hogy az erő melyik pontra hat. A P pont bárhol lehet a testen belül, hiszen a test merev, és ezért a tolóerő az egész testet fogja gyorsítani. A forgó mozgás szempontjából viszont nagyon nem mindegy, hogy hol van a tolóerő támadási pontja.

A tehetetlenségi nyomaték a tömegnek megfelelő tehetetlenségi jellemző a forgó mozgás fizikai leírásában. Azt fejezi ki, milyen nehéz elforgatni egy testet egy bizonyos pont (precízebben: tengely) körül. Minthogy a modellben szereplő téglalap alakú "testek" szabadon elfordulnak a tömegközéppontjuk körül, a tehetetlenségi nyomatékot a tömegközéppont körüli forgásra számítjuk ki. A téglalap alakú vékony lemez tömegközéppontra vonatkozó tehetetlenségi nyomatékát számos fizikatankönyv tárgyalja. A képlet a következő I = m (szélesség2 + magasság2) ⁄ 12 Legyen R = (Rx, Ry) = az a helyvektor, mely a tömegközéppontból a P pontba mutat. A P pontban ható forgatónyomaték a következő vektoriális szorzattal egyenlő: R × T = Rx TyRy Tx így hát I θ'' = R × T Tulajdonképpen a forgatónyomaték vektor, de mivel 2 dimenzióban dolgozunk, elég ha tudjuk, hogy a forgatónyomaték mindig merőleges a síkra, és így "megspórolhatjuk" a vektorjelölést. A fenti keresztszorzat tehát igazából a következő 3-dimenziós számításnak felel meg: (Rx, Ry, 0) × (Tx, Ty, 0) = (0,  0,  Rx TyRy Tx) Láthatjuk, hogy az eredmény merőleges a síkra, hiszen az x és az y komponens nulla. Általánosságban a vektoriális szorzat definíciója a következő: (x, y, z) × (u, v, w) = (y wz v,   −x w + z u,   x vy u)

Gumiszalagerő

A szimulációba épített gumiszalagerő egy olyan vektor mentén hat, mely a test P pontjából az egér kurzorába mutat. Jelölje L ezt a helyvektort. A gumiszalagerő B = (Bx, By) = s L ahol s a szalag nyúlékonyságát (ill. tulajdonképpen "nyúléktalanságát") jellemző konstans. Az erőt ugyanúgy kezelhetjük, mint a tolóerőt, tehát a korrigált egyenletek a következők. m x'' = Tx + Bx
m y'' = Ty + By
I θ'' = R×T + R×B

Gravitációs erő

Legyen g = a gravitációs állandó. A gravitáció a tömegközéppontban egy m g nagyságú függőlegesen lefelé irányuló (súly)erőt hoz létre, melyet ezzel a korrekcióval vehetünk figyelembe m y'' = Ty + Bym g Minthogy a gravitáció a test minden pontjára hat, nem jár forgatónyomatékkal a tömegközépponthoz viszonyítva.

Csillapítási erő

A csillapítás (súrlódás) olyan erőt hoz létre, mely a mozgás irányával ellentétes. Minél gyorsabban megy az ember, annál nagyobb súrlódási erő fékezi a mozgását. A csillapítási erő nagyságát tehát a sebességgel arányosnak vesszük. Legyen k = a proporcionális (sebességarányosságot feltételező) csillapítási állandó. Adjuk ezt is a mozgásegyenletekhez
   m x'' = Tx + Bxk x' (1)
   m y'' = Ty + Bym gk y' (2)
   I θ'' = R×T + R×Bk θ' (3)
A szimuáció realisztikusabb lenne, ha a forgáshoz más csillapítási állandót rendelnénk, mint a transzlációhoz, de mi ugyanazzal az értékkel számolunk.

Az (1-3) egyenlet a téglalap alakú testek mozgásegyenleteit jelenti.   Ha nincs ütközés, akkor ezek elegendők a mozgások értelmezéséhez. Foglaljuk össze a fontosabb változókat:

Numerikus szimuláció

Ahhoz, hogy a Runge–Kutta-módszert a fenti 3 másodrendű differenciálegyenlet megoldására használhassuk, át kell alakítani az egyenleteket 6 elsőrendű egyenletté. Vezessük be a következő sebességváltozókat Ezek segítségével a következő 6 elsőrendű diffegyenletet írhatjuk fel az (1-3) egyenletek helyett x' = vx
y' = vy
θ' = ω
vx' = (Tx + Bxk vx) ⁄ m
vy' = (Ty + Bym gk vy) ⁄ m
ω' = (R × T + R × Bk ω) ⁄ I
Ezek az egyenletek már olyan alakúak, hogy a Runge–Kutta-módszer alkalmazható a numerikus megoldásukra. Mindegyik téglalap alakú testnek megvan a maga 6 változója (3 helyzet x, y, θ és 3 sebesség vx, vy, ω) és megvan a megoldáshoz szükséges 6 elsőrendű differenciálegyenlet is.

Energia, impulzus (lendület) és impulzusmomentum (perdület)

Ebben a szakaszban elmagyarázom, hogyan számítja ki a szimuláció a testek energiáját, impulzusát és impulzusmomentumát.

Ha nincs energiaveszteség a súrlódás miatt (csillapítás = 0) vagy ütközés következtében (rugalmasság = 1), akkor a rendszer energiája nem változhat.

A testek közötti ütközés nem változtathatja meg az eredő impulzusmomentumot (perdületet). A fallal történő ütközés során viszont nem kell megmaradnia az impulzusmomentumnak, mert a mérhetetlen nagy tömegűnek tekintett falat nem számítjuk hozzá a rendszerhez.

A gravitációs energiát a következő képlet adja m g h ahol h = a test tömegközéppontjának magassága a padlóhoz képest.

A transzláció energiája 12 m v2 ahol v a test tömegközéppontjának sebességvektora. A sebességvektor négyzetét skaláris szorzattal kell kiszámítani.

A forgási energia1/2 I ω2 ahol I tehetetlenségi nyomaték ω pedig a szögsebesség.

Az impulzus vízszintes komponense m vx, a függőleges pedig m vy.

Az impulzusmomentumot egy rögzített ponthoz, pl. az origóhoz képest kell érteni. Az utóbbi esetben: I ω k + m r × v ahol r az origóból a test tömegközéppontjába mutató helyzetvektor. A k a z irányú egységvektor, mely az x-y síkra merőleges. Az impulzusmomentum két részből tevődik össze: a forgási összetevő I ω k, míg az origó körüli keringéshez tartozó m r × v.

Ütközések észlelése

A szimuláció minden egyes lépésében ellenőrizzük, nem történt-e ütközés. A testek ütközhetnek egymással vagy a határfallal. Mivel a testek téglalap alakúak, az ütközés geometria ismérve az, hogy egy csúcs behatol a falba vagy egy másik testbe.

Ha ütközést észlelünk, bináris kereséssel visszatérünk a szimuláció egy röviddel az ütközés előtti állapotához. Ez után azzal a közelítéssel élünk, mintha az ütközés pontosan abban a pillanatban történt volna, majd az alább leírt módon kiszámítjuk a sebesség korrigált értékét. Az Ütköző tömbök szimulációban bővebben kitérek az ütközés effajta kezelésére.

A merev testek ütközésének fizikája 2 dimenzióban

Ennek a szimulációnak a legnagyobb kihívása az ütközések kezelése. Az alábbi magyarázat elég tömör, ezért megfontolásra javaslom más leírások tanulmányozását is.


vectors involved in collision
vectors involved in collision
Tegyük fel, hogy az A test egyik csúcsa a B test egyik oldalát a P pontban találja el. Vezessük be a következő változókat:

A forgó és transzlációs mozgást végző merev test tetszőleges pontjára érvényes standard sebességformulát a becsapódási pontokra alkalmazva megkapjuk annak a két pontnak az ütközés előtti sebességét, amely a P-ben találkozni fog: vap1 = va1 + ωa1 × rap
vbp1 = vb1 + ωb1 × rbp
Ugyanígy kapjuk meg a pontok ütközés utáni vap2, ill. vbp2 sebességét: vap2 = va2 + ωa2 × rap
vbp2 = vb2 + ωb2 × rbp
Itt a szögsebességet 3-dimenziós vektornak tekintjük, mely merőleges a mozgás/ábrázolás síkjára, tehát a vektoriális szorzat a következő: ω × r = (0, 0, ω) × (rx, ry, 0) = (−ω ry, ω rx, 0) Most egy olyan formulára lesz szükségünk, mely a becsapódási pontok közeledési sebességét írja le. Ezt nevezzük relatív sebességnek. Legyen vab1 a kezdeti (ütközés előtti) relatív sebesség, vab2 pedig a végső (ütközés utáni) relatív sebesség. A relatív sebességeket a következő módon adhatjuk meg a korábban bevezetett változókkal: vab1 = vap1vbp1
vab2 = vap2vbp2
A merev test pontjainak sebességét leíró képletek behelyettesítésével ezt kapjuk:
   vab1 = va1 + ωa1 × rapvb1ωb1 × rbp (4)
   vab2 = va2 + ωa2 × rapvb2ωb2 × rbp (5)
Az n vektor merőleges a B test ütköző oldalára, a hossza pedig 1. A relatív sebesség n normálvektor irányába mutató sebességkomponensét skalárszorzatként kapjuk: normális irányú relatív sebesség = vab1 · n = vab1x nx + vab1y ny Ne feledjük, hogy ütközés esetében a normális relatív sebességnek negatívnak kell lennie (ti. ilyenkor a két test közeledik egymáshoz). Legyen e az ütközés rugalmassága, mely 0 (tökéletesen rugalmatlan) és 1 (tökéletesen rugalmas) közé eshet. Most pedig egy nagyon fontos feltételezéssel élünk, amit a következő képlet fejez ki:
   vab2 · n = −e vab1 · n (6)
Ez azt jelenti, hogy ütközés után a szétrepülés sebessége arányos lesz azzal a sebességgel, amellyel a testek ütközés előtt egymás felé közeledtek. Az e rugalmasság tehát az arányossági tényező szerepét tölti be.

Az impulzusok megváltozása ütközés során

A fordító megjegyzése: Ebben a szakaszban a szerző eredetileg az angol impulse kifejezést használja az eddigi momentum helyett. A magyar szóhasználat a lendület/impulzus fogalmába mossa össze a kettőt, ami ellen nem sokat tudok tenni, és őszintén szólva, nem is akarok. A lényeg az, hogy az angol momentum az mv-t jelenti, az impulse pedig az F = ma erő idő szerinti integrálját, tehát az mv megváltozását az erő hatására bizonyos időintervallumban. Ezt a változást én egyszerűen impulzusváltozásnak hívom, mert az is. Az angol szöveg bizonyos részeit nem fordítom le, mert nem kell a megértéshez. Másrészt viszont törölni sem törlöm, hátha érdekel valakit.

Az ütközést úgy képzelhetjük el, hogy egy rövid ideig ható nagy erő hatására hirtelen megváltozik a két test impulzusa.

We imagine that during the collision there is a very large force acting for a very brief period of time. If you integrate (sum) that force over that brief time, you get the impulse.Why do we need this strange concept of an impulse? Why not just use the familiar concept of force as in F = m a ?   The answer is that we do not know what the forces are during the collision. With a supercomputer and some very complex software we could model the forces that occur during a collision. We would need to know details about the materials of the bodies, their exact geometry, how they deform under stress, how the stress propagates through the body, etc.

This is far beyond what our simple simulation can do. Luckily, we can assume that the collision happens so quickly that the position and orientation of the bodies do not change during the collision. Instead, all that changes is the velocities of the bodies. Since a change in velocity is a change in momentum (remember momentum = velocity times mass) we have the concept of an impulse.

Feltesszük, hogy a súrlódás nem játszik szerepet az ütközésben, tehát egyetlen erőt kell csak figyelembe vennünk ütközéskor, nevezetesen azt, amelyik az n vektor irányában hat, az ütköző oldalra merőlegesen. (A súrlódás miatt fellépne egy olyan erő is, amely azoldallal párhuzamosan hat.) Írjuk fel az ütközés impulzusváltozását j n alakban, ahol jegy meghatározandó paraméter. Az A test j n impuzusváltozást szenved, míg a B esetében ugyanekkora, csak ellentétes az impulzusváltozás, vagyis: j n. Minthogy az impulzus egysége tömegegységszer sebességegység, az impulzusváltozás és a tömeg hányadosa éppen a sebességváltozással lesz egyenlő. Így az ütközés előtti és utáni sebességek kapcsolatát a következő egyenletek határozzák meg:

   va2 = va1 + j n / ma (7)
   vb2 = vb1j n / mb (8)
Az impulzus j n nagyságú változása miatt az A test impulzusmomentum-változása rap × j n lesz. (Az impulzusváltozásra úgy célszerű gondolni, mint egy olyan lökés eredményére, mely a P pontban hat, ezért hirtelen megváltoztatja a forgatónyomatékot.) Ha most osztunk a tehetetlenségi nyomatékkal, akkor az impulzusmomentum változásából máris megkapjuk a szögsebesség-változást, vagyis az ütközés utáni szögsebességek a következők:
   ωa2 = ωa1 + (rap × j n) / Ia (9)
   ωb2 = ωb1 − (rbp × j n) / Ib (10)

Az impulzusparaméter meghatározása

Most pedig összeszedjük azokat az egyenleteket, amelyek a j impulzusparaméter meghatározásához kellenek. Akit nem érdekelnek a részletek, bátran ugorjon a j értékét megadó képlethez.

A (6) egyenletből indulunk ki, majd felhasználjuk a relatív sebességet megadó (4-5) formulát. vab2 · n = −e vab1 · n
(vap2vbp2) · n = −e vab1 · n
(va2 + ωa2 × rapvb2ωb2 × rbp) · n = e vab1 · n
Helyettesítsük be az egyenlet bal oldalába az impulzusváltozásra vonatkozó (7-10) egyenletet. ((va1 + j n / ma) + (ωa1 + (rap × j n) / Ia) × rap(vb1j n / mb)(ωb1 − (rbp × j n) / Ib) × rbp) · n = e vab1 · n Vegyük észre, hogy a bal oldalon szerepel a vab1 · n mennyiség, melyet a (4) egyenlet ír le. Vigyük át a kifejezést a jobb oldalra: (j n / ma + (rap × j n) × rap / Ia + j n / mb + (rbp × j n) ×rbp / Ib) · n = −(1 + e) vab1 · n Ne feledjük, hogy az n egységvektor, tehát: n · n = 1.   A vektorok közötti különféle szorzatokat a hármasszorzatra (más néven vegyes szorzatra) vonatkozó (A × B) · C = (B × C) · A szabály segítségével lehet egyszerűbb alakra hozni: (A × B) × A · B = (A × B) · (A × B) = (A × B)2 (Itt a vektor négyzetre emelése azt jelenti, hogy a vektort skalárisan szorozzuk önmagával.) Az egyszerűsítések után ezt kapjuk: j (1 / ma + 1 / mb + (rap × n)2 / Ia + (rbp × n)2 / Ib) = −(1 + e) vab1 · n Ebből j egyetlen osztással kifejezhető
 j =   −(1 + e) vab1 · n
1ma + 1mb + (rap × n)2Ia + (rbp × n)2Ib
(11)
Most, hogy j értékét ki tudjuk számítani az ütközésre a (11) egyenletből, a (7-10) egyenletbe helyettesítve megvannak az ütközés utáni sebességek is.

Ugyanezt a kifejezést a fallal történő ütközés esetében is fel lehet használni, ha a fal tömegét végtelennek tekintjük. Ha mb → ∞ és Ib → ∞, akkor a (11) egyenlet a következő alakot ölti:
 j =   −(1 + e) vap1 · n
1ma + (rap × n)2Ia

Többszörös ütközések

A fentiek csupán egyszerre egy sarok–oldal ütközés kezelésére alkalmasak. Vannak azonban többszörös ütközési lehetőségek is. Lássunk néhány példát: Az olyan egyidejű ütközések könnyen kezelhetők, amelyek egymástól független objektumpárok között mennek végbe. Például, ha az A és B test ugyanakkor ütközik, amikor a C és a D, akkor az egyes ütközéseket külön lehet kezelni, mert nics hatásuk egymásra.

Ha az A test két szomszédos sarka egyetlen fallal vagy egy másik test oldalával ütközik, akkor a szimuláció úgy veszi, mintha a sarkokhoz tartozó oldalfelező pont ütközne, vagyis úgy kezeljük a dolgot, mint egy egyszerű ütközést.

Bonyolultabb a helyzet, amikor az A test sarkai különböző falakkal vagy testekkel ütköznek. A program ilyenkor az ütközéseket külön kezeli, ami valószínűleg helytelen, hiszen a két ütközés nem független egymástól.

Nyugalmi kontakt erő

Nyilván feltűnik majd, hogy bizonyos gravitáció-rugalmasság kombinációk esetében a szimuláció előbb-utóbb elakad. Nevezetesen, ez történik, ha a gravitáció > 0 és a rugalmasság < 1. A probléma akkor jön elő, amikor egy tárgy végleg leülepszik a padlóra. Minthogy a rugalmasság 1-nél kisebb, a tárgyak minden ütközés után kicsit lassabban mozognak. Végül a sebesség olyan kicsi lesz, hogy a tárgyak a gravitációnak engedve átmennek a padlón. Ez okozza végül is a szimuláció elakadását.

A helyes eljárás ilyenkor az volna (márpedig ezt nem építettem bele a szimulációba), ha a programozó/modellező figyelembe venné a tárgy és a padló közötti nyugalmi kontakt erőt. A mozgásegyenletekbe tehát azt a nyomóerőt is figyelembe kellene venni, mely megakadályozza, hogy a nyugvó tárgy a padlóba behatoljon. Lásd az Ütközés és kontaktus c. szimulációt, mely ezt a helyzetet kezelni tudja.

Látogatószám 2013.02.27. óta:

website stats