[MX] Gravitationsbewegungen

sancho

Erfahrenes Mitglied
Gavitationsbewegungen (MX)

Hi all..
Mit diesem Script könnt ihr eine realistische Bewegung erzeugen, die ein Objekt auf ein bestimmtes Ziel lenkt.

Physik: Gravitation im Allgemeinen (eine Masse zieht die Andere an)

Als allererstes muss man einen mc auf der bühne erstellen der später bewegt wird.
Dann brauchen wir zwei Massen der Objekte die sich anziehen, also 2 Variablen. Desweiteren brauchen wir die Gravitationskonstante Gamma und eine Zeiteinheit. Zusätzlich wird ein Maßstab eingeführt, den wir brauchen damit ein Pixel nicht unbedingt einem Meter entspricht(praktisch wenn man zum Bsp. die Anziehungskraft zweier Planeten vorführen will, da die Dimensionen im Weltraum doch etwas größer sind, als die Bühne breit ist).

PHP:
m1 = beliebiges gewicht
m2 = beliebiges gewicht
gamma = 0.00000000006672
t = 1/Fps //bei realistischen bewegungen 1/Fps (für zeitraffer etc. hiermit etwas rumspielen)
skala = maßstab den ihr setzen wollt

dann setzen wir wir noch einen Startpunkt für den zu bewegenden mc fest, und die Koordinaten des Ziels:
PHP:
startx = x-koordinate an der der mc starten soll 
starty = y-koordinate an der der mc starten soll
zielx = x-koordinate auf die der mc zusteuern soll 
ziely = y-koordinate auf die der mc zusteuern soll

Und jetzt kommt einiges an Mathematik und Physik:) :

PHP:
dx = (zielx - this._x)*skala                 //(1)
dy = (ziely - this._y)*skala                 //(2)

abstand = Math.sqrt(dx*dx + dy*dy)           //(3)

F = (gamma * m1 * m2) / (abstand * abstand)  //(4)

sinalpha = dy / abstand                      //(5)
cosalpha = dx / abstand                      //(6)

fx = cosalpha * F                            //(7)
fy = sinalpha * F                            //(8)

ax = fx / m1                                 //(9)
ay = fy / m1                                 //(10)

vx = ax * t                                  //(11)
vy = ay * t                                  //(12)

sx += vx * t                                 //(13)
sy += vy * t                                 //(14)

if(abstand > 'irgend-ein-wert' * skala) {    //(15)
     this._x = startx + sx                   //(16)
     this._y = starty + sy                   //(17)
}

Erklärungen

(1,2): Die Entfernung zwischen dem Objekt und dem Ziel in x- und y-Richtung ausrechenen.
(3): Mit dem Satz des Pythagoras den Abstand (absolute Entfernung zweier Punkte) ausrechnen.
(4): Da wir den Abstand der Zwei Massen wissen können wir die phys. Formel für die Gravitation anwenden, und so die anziehungskraft bei dieser Entfernung ausrechen.
(5+6): Um die Kraft wieder in x- und y-Richtung splitten zu können brauchen wir Winkelbeziehungen(Sinus und Cosinus). Alpha ist der Winkel der zwischen dem Abstand und der x-Richtung bei der zu verschiebenden Masse liegt. Ab jetzt muss man also jede Berechnung wieder in jeweils der x- und y-Richtung vornehmen
(7+8): Kraft in die x- und y-Komponenten splitten
(9+10): Beschleunigung (a), die bei der derzeitigen Entfernung zum ziel entsteht, ausrechnen mit der Formel: Beschleunigung ist gleich Kraft pro Masse
(11+12): Die zur Beschleunigung gehörende Geschwindigkeit ermitteln
(13+14): Mit 'Geschwindigkeit mal Zeit' die zurückgelegte Strecke um den Teil erhöhen die das Objekt in diesem Frame und bei dieser Beschleunigung zurücklegt.
(15+16+17): Wenn das zu Bewegende Objekt nicht einen bestimmten Abstand zum Ziel unterschreitet, dann wird die Strecke die bei (13) und (14) ermittelt wurde zum Startpunkt dazuaddiert und so die neue Koordinate festgelegt. Dadurch ensteht Frame für Frame eine Bewegungsanimation.

Script:
Der Physikteil es Scriptes muss jetzt noch in einen onEnterFrame Eventhandler der sich auf den zu bewegenden mc bezieht, die Variablendeklarationen brauchen keinen. Je nachdem was man vor hat kann man das Objekt auch noch 'dragable' machen und dann kommt zB noch eine if abfrage vor das script die überprüft ob man das Objekt gerade zieht. Sonst klappt das aber auch selbstständig.


Also viel Spaß damit.. *sancho*
 
Zuletzt bearbeitet:
Hey sancho,

umfangreiches Script samt Erklärung, was will man mehr...
...ich kann's dir sagen, ein Beispielfilm wäre noch ganz nett gewesen. ;)

Nichtsdestotrotz- super Sache an die du dich gemacht hast, 1a.

Ich hoffe den ein oder anderen inspiriert es noch, weitere Posting hierzu zum Thema "Gravitation" zu verfassen. :)

Geist
 
Spitze Sancho !

Was lange währt wird endlich gut! Steckt eine menge arbeit dahinter. Nehms morgen zwecks vertiefung mit auf die arbeit. Freue mich !!

:)
 
Ok, hier ein Beispielfilm: Er zeigt das Szenario "Mond fällt auf Erde" mit allen Daten die dazu gehören..
Die zeit ist im Moment auch auf realistisch eingestellt, aber wie gesagt könnt ihr mit einem größeren Zeitintervall ja eine Verkürzung der fallzeit erwirken. Dauert nämlich schwer lange so...

*sancho*
 

Anhänge

  • massenanziehung bsp.zip
    3 KB · Aufrufe: 39
Noch ne realistische Bewegung wäre die hier: Beide Massen bewegen sich aufeinander zu. So isses schließlich auch in der Realität.
Beispiel hängt dran, diesmal ist die zeit allerdings schon auf Zeitraffer eingestellt..

hf *sancho*
 

Anhänge

  • massenanziehung bsp2.zip
    3,3 KB · Aufrufe: 32

Neue Beiträge

Zurück