Avatar billede tax Nybegynder
23. september 2002 - 23:47 Der er 3 kommentarer

Simulering af planeter - kollisioner

Jeg arbejder i øjeblikket på et lille projekt hvor jeg vil simulere hvorledes planeter kredser om hinanden i 3 dimensioner. Jeg har simuleret, via superpositionsprincippet, hvorledes planeterne kredser om hinanden.

Dette er meget sjovt og der fiser nogle pletter rundt på skærmen som en slags ildfluer.

Problemet er blot at jeg vil avancere denne simulering til at inkludere kollisioner, da planeterne ellers bliver påvirket af meget store kræfter når de kommer meget tæt på hinanden (normalt ville en kollision have forekommet)  F=G*(m1*m2)/r^2 (afstanden r imellem to planeter bliver nul => kræfterne går imod uendelig)

Jeg har puslet lidt med det for lang tid siden og er kommet frem til en simpel 2d model, jeg har sjusset mig frem til. Men det er ikke nok..

Jeg mangler ideer til hvorledes kolissioner imellem runde legemer kan simuleres.

Jeg mangler beskrivelse af hvorledes indgangsvinklerne imellem to planeter og deres indbyrdes momenter resulterer i udgangsmomenter.

Desuden er jeg interesseret i at inkludere rotationer i modellen, så jeg ved en kollision kan afsætte noget af energien i rotationer imellem planeterne.

Modellen skulle helst ende op med at kunne anvendes som engine til et opengl program. Jeg havde forsetillet mig

Det er et utraditionelt spørgsmål, men jeg håber at det vil skabe lidt respons alligevel. Om ikke andet
Avatar billede jakoba Nybegynder
24. september 2002 - 00:38 #1
en evt 'kollision' ville begynde nogen tid før de rørte hinanden.
http://curriculum.calstatela.edu/courses/builders/lessons/less/les1/moons/roche.html

Når de kommer indefor hinandens roche-limit er deres egen tyngdekraft ikke nok til at holde dem sammen, og de ville opdele sig i små stumper. en evt rotation ville få det til at ske lidt tidligere og nogen af fragmemterne ville blive slynget bort fra kollisionen, resten ville komme en smule tættere på at ramle præcist henimod hinanden.

Så en kollision ville nok ligne en galakse. dvs et tæt center med spiralarme formet at de stumper der undgår kollisionen.
Avatar billede lasse_buck Nybegynder
24. september 2002 - 00:45 #2
Du har sikkert været igennem al teorien. Her er alligevel et par links - specielt det første link er ganske udførlig og velskrevet:
http://www.astro.uio.no/ita/undervisning/a101/olavkm/forel/f3/f3_newton.html

http://www-istp.gsfc.nasa.gov/stargaze/Skeplaws.htm#q44

http://www-istp.gsfc.nasa.gov/stargaze/Skepl1st.htm
http://www-istp.gsfc.nasa.gov/stargaze/Skepl2nd.htm
http://www-istp.gsfc.nasa.gov/stargaze/Skepl3rd.htm

Et sødt lille eksempel:
http://www.phy.ntnu.edu.tw/java/Kepler/Kepler.html

Hvad har du tænkt dig ifm. kollisioner? Et sammenstød imellem to planeter vil medføre at planeterne vil sprænges i en mængde brudstykker. Meget af energien fra planeternes hastighed vil omsættes til varme ved deformationen af de to planeter.
Avatar billede tax Nybegynder
26. september 2002 - 11:08 #3
Indtil videre vil jeg arbejde med elastiske kollisioner. Senere vil jeg så prøve at tilføje friktion og dermed rotationer.

Min ide er at simulere hele systemet på følgende måde.

Hver planet skal have en masse, en radius, en positionsvektor og en hastighedsvektor.

Når planeterne skal opdateres tages en planet og de resterendes masssetiltrækningskraft summeres op. F=G*m1*m2/r^2

Dette fungerer og bevæger mine planeter som planeter nu gør.

Det næste jeg har vil inkorporere er kollisioner. Dette vil jeg gøre ved at gennemløbe planeterne og finde ud af om de er kollideret med andre planeter. (if (pos.this-pos.other).length < radius.other + radius.this) then collision detected.

Hvis en kollision er detekteret vil jeg kun korrigere den ene planets hastighedsvektor, da modparten vil gøre det samme når den detekterer kollision.

Jeg vil starte med at finde vinkelen imellem den pågældende planets hastighedsvektor og vektoren (pos.other - pos.this). Denne vinkel vil jeg udnytte til at opløse hastighedsvektoren i to andre vektorer. En hastighed direkte imod den anden planet og en hastighed vinkelret på denne.

Den første hastighedsvektor vil jeg så behandle som en elastisk kollision.

Via momentbevarelse m1*v1_før + m2*v2_før = m1*v1_efter m2*v2_efter
og energibevarelse (1/2)*m1*v1_før^2+(1/2)*m2*v2_før^2=(1/2)*m1*v1_efter^2 + (1/2)*m2*v2_efter^2

Ved at løse disse ligninger kommer jeg frem til

v1_efter = (-v1_før*m2+m1*v1.før+2*m2*v2_før)/(m1+m2)

Det ses at jeg er nød til at finde modpartens hastighed direkte imod den planet der behandles, men det er også til at finde ud af.

Herefter kan positionerne opdateres med en given timeslice ved at opdatere positionen. pos = pos + v * timeslice

Det jeg godt kunne bruge til at komme videre med denne model vil være nogle ideer til hvorledes jeg kan tilføje en rotationsvektor og en orienteringsvektor, som jeg løbende kan opdatere.

Det jeg er i tvivl om er hvorledes en kollision indvirker på rotationen af et rundt legeme. Enhver ide har interesse?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester