RegistrierenRegistrieren   LoginLogin   FAQFAQ    SuchenSuchen   
Einfache Formel um Gravitation zu berechnen
 
Neue Frage »
Antworten »
    Foren-Übersicht -> Mechanik
Autor Nachricht
Elektronik91



Anmeldungsdatum: 22.05.2015
Beiträge: 51

Beitrag Elektronik91 Verfasst am: 16. Jun 2016 09:04    Titel: Einfache Formel um Gravitation zu berechnen Antworten mit Zitat

Hallo,

ich programmiere gerade ein 2D-Spiel.
In diesem Spiel benötige ich für meine Spielfigur eine Gravitation die immer wirken soll.
Jetzt wollte ich euch fragen, wie ich die Gravitation am einfachsten berechnen kann?

In diesem Tutorial habe ich eine Berechnung gefunden die ich nicht verstehe:
https://www.youtube.com/watch?v=0oPkVke2ACs

Auf einer Webseite habe ich folgende gefunden:



Nun weiß ich nicht ob dass das richtige für mein Spiel ist??
Steffen Bühler
Moderator


Anmeldungsdatum: 13.01.2012
Beiträge: 7242

Beitrag Steffen Bühler Verfasst am: 16. Jun 2016 09:11    Titel: Antworten mit Zitat

Die Formel passt zwar, aber ich nehme an, dass r (also der Abstand der Figur zum Erdmittelpunkt oder was auch immer die Gravitation auf die Spielfigur bewirkt) sich nicht groß ändert. Daher kannst Du die Kraft (und damit die Beschleunigung) wohl als konstant annehmen.

Viele Grüße
Steffen
Elektronik91



Anmeldungsdatum: 22.05.2015
Beiträge: 51

Beitrag Elektronik91 Verfasst am: 16. Jun 2016 13:24    Titel: Antworten mit Zitat

O.K.

Jetzt stelle ich mir nur die Frage, was ich für m & M einsetze?
m & M ist ja normalerweise die Masse der Körper also das Gewicht.
In meinem Programm kann ich keine Masse angeben??

MfG
Steffen Bühler
Moderator


Anmeldungsdatum: 13.01.2012
Beiträge: 7242

Beitrag Steffen Bühler Verfasst am: 16. Jun 2016 13:28    Titel: Antworten mit Zitat

Wie ich ja sagte, die Kraft dürfte konstant sein. Dann brauchst Du weder die Masse der Erde (falls es um die geht) noch der Spielfigur (die Du ja eh nicht kennst).

Und ich gehe davon aus, dass es Dir ohnehin nicht um die Kraft, sondern um die Beschleunigung (hier also das konstante g) geht. Denn Du willst wahrscheinlich nur wissen, wie schnell Deine Spielfigur nach unten gezogen wird, sagt mir meine Kristallkugel. Da reicht dann das Wissen um g=9,81m/s².

Falls Du was anderes vorhast, kannst Du es uns ja gelegentlich wissen lassen, dann kommen wir vielleicht weiter.
Elektronik91



Anmeldungsdatum: 22.05.2015
Beiträge: 51

Beitrag Elektronik91 Verfasst am: 17. Jun 2016 10:18    Titel: Antworten mit Zitat

Das habe ich doch am anfang geschrieben.
Ich möchte einfach eine Gravitation programmieren.
Bei meiner ersten Lösung, habe ich einfach eine Variable dekrementiert, bis eine Kollision mit dem Boden erkannt wurde.
Wenn man das nur mit einer Variable macht, dann sieht das beim springen sehr komisch aus, da die Spielfigur sehr schnell hoch und wieder runter kommt und nicht beim Richtungswechsel langsamer wird.

Die Gravitation soll sehr echt wirken, das ist mein Ziel.
hansguckindieluft



Anmeldungsdatum: 23.12.2014
Beiträge: 1212

Beitrag hansguckindieluft Verfasst am: 17. Jun 2016 10:49    Titel: Antworten mit Zitat

Elektronik91 hat Folgendes geschrieben:

Die Gravitation soll sehr echt wirken, das ist mein Ziel.


Das wird sie, wenn Du auf Deine Spielfigur die konstante Beschleunigung -g (-9,81m/s^2) wirken lässt.

Wenn dann Deine Spielfigur vom Boden abspringt (mit Anfangsgeschwindigkeit v0), verringert sich die Geschwindigkeit der Spielfigur mit der Zeit, bis die Geschwindigkeit beim Richtungswechsel Null ist.

Vielelicht zum besseren Verständnis, wie die Konstante Beschleunigung g mit der von Dir anfangs genannten Gleichung der Gravitation übereinstimmt. Wenn sich Deine Spielfigur auf der Erde befindet, ist M ja die Masse der Erde, und r der Erdradius (auch wenn die Spielfigur ein bisschen hüpft, ist das genau genug). Dann kann man folgendes zusammenfassen:



Damit vereinfacht sich die Gleichung:



zu



Für Deine Simulation benötigst Du aber nur die Beschleunigung g. Die Masse der Spielfigur ist für die Bewegung irrelevant (solange Luftreibung vernachlässigt werden kann).

Gruß
Steffen Bühler
Moderator


Anmeldungsdatum: 13.01.2012
Beiträge: 7242

Beitrag Steffen Bühler Verfasst am: 17. Jun 2016 10:54    Titel: Antworten mit Zitat

Das wird daran liegen, dass die Variable (die wohl die y-Position darstellt) eben nicht "einfach dekrementiert" werden darf, denn die Geschwindigkeit nimmt ja zu, eben weil eine gravitative Beschleunigung vorhanden ist.

Machen wir mal ein Beispiel und setzen die Spielfigur auf y=100 Pixel (Boden bei 0 Pixel). Die Anfangsgeschwindigkeit soll zu Beginn v=0 Pixel pro Sekunde sein.

Nun nehmen wir an, die konstante Beschleunigung sei a=10 Pixel/s² (nach unten). Das heißt, nach einer Sekunde hat sich v auf 10 Pixel/s erhöht. Und das heißt wiederum, dass die y-Position dann um 10 Pixel abgenommen hat. Die Figur ist dann also bei y=90 Pixeln.

Nach zwei Sekunden ist v bei 20 Pixel/s, das heißt y=70 Pixel.

Danach:
t=3s, v=30px/s, y=40px
t=4s, v=40px/s, y=0px

Nun schlägt die Figur auf dem Boden auf, das heißt, die Geschwindigkeit ändert ihr Vorzeichen: v=-40px/s, also nach oben. (Wenn Du noch Reibung einbauen willst, kannst Du hier einen Faktor verwenden, mit z.B. 0,75 würde dann v=-30px/s sein. Falls die Figur gar nicht abprallen soll, wäre dieser Faktor Null, dann würde einfach v=0 gelten, dann bleibt sie stehen. Die Beschleunigung wirkt zwar, aber sie kann ja nicht in den Boden eindringen, y kann also nicht negativ werden.)

Bleiben wir aber beim vollständigen Abprallen. Dann gilt bei t=5s: v=-40px/s, y=40px.

Die Beschleunigung dagegen bleibt konstant, zählt also nach wie vor jedesmal 10px/s zur Geschwindigkeit dazu. Also:

t=6s: v=-30px/s, y=70px
t=7s: v=-20px/s, y=90px
t=8s: v=-10px/s, y=100px
t=9s: v=0px/s, y=100px
t=10s: v=10px/s, y=90px
t=11s: v=20px/s, y=70px

Und so weiter, bis der Boden wieder erreicht ist.

Wenn die Figur noch eine Horizontalbewegung machen soll, musst Du das getrennt betrachten, hier wirkt ja keine Gravitation. Die horizontale Geschwindigkeit ändert nur bei Kollision mit den Wänden (falls vorhanden) ihr Vorzeichen.

Und wenn sie springen soll, ist die Anfangsposition eben 0 Pixel, und die Anfangsgeschwindigkeit meinetwegen -100px/s. Alles andere läuft dann genauso mechanisch ab.
Elektronik91



Anmeldungsdatum: 22.05.2015
Beiträge: 51

Beitrag Elektronik91 Verfasst am: 21. Jun 2016 14:19    Titel: Antworten mit Zitat

Das Beispiel habe ich Verstanden.

Mein Problem ist nun die Umsetzung in Java mit Slick2D.

Um meine neue y-Position zu bestimmen, benötige ich als erstes eine Geschwindigkeit. Die kann ich folgendermaßen berechnen:

Geschwindigkeit = Geschwindigkeit + Beschleunigung * Zeit;

Position berechnen:

Position = Position + Geschwindigkeit * Zeit;

Die Beschleunigung kann ich ja mit -9,81 als fixen Wert nehmen.
Bei der Zeit könnte ich eine einfache Varibale pro Sekunde um 1 Inkrementieren. Also "int i +1;"

Somit hätte ich meine Geschwindigkeit berechnet, nun setzte ich die Geschwindigkeit bei der Positionsformel ein und für die Zeit nehme ich die selbe Variable wie gerade beschrieben. Danach ziehe ich die berechnete y-Position von der aktuellen y-Position des Spielers ab und erhalte meine neue y-Position.

Wenn nun der Spieler den Boden berührt, dann setze ich die Variable für die Zeit also "i" einfach auf 0 und so wird beim nächsten durchlauf wieder neu gezählt.

So habe ich mir die Umsetzung vorgestellt?
borromeus



Anmeldungsdatum: 29.12.2014
Beiträge: 509

Beitrag borromeus Verfasst am: 21. Jun 2016 15:02    Titel: Antworten mit Zitat

Deine Position stimmt nicht, da sich die Geschwindigkeit ja laufend ändert.
Ausserdem muss die Position ja sinngemäß abnehmen, wenn 0 die Erdoberfläche ist.

Deine Position



...allgemein
Wenn Du im 1- Sekundentakt rechnest:




Steffen Bühler
Moderator


Anmeldungsdatum: 13.01.2012
Beiträge: 7242

Beitrag Steffen Bühler Verfasst am: 21. Jun 2016 16:20    Titel: Antworten mit Zitat

Elektronik91 hat Folgendes geschrieben:
Um meine neue y-Position zu bestimmen, benötige ich als erstes eine Geschwindigkeit. Die kann ich folgendermaßen berechnen:

Geschwindigkeit = Geschwindigkeit + Beschleunigung * Zeit;


Ich würde es einfacher angehen. Wenn Du eh einen sekündlichen Interrupt hast, musst Du hier nur

Geschwindigkeit = Geschwindigkeit + Beschleunigung;
Position = Position + Geschwindigkeit ;

schreiben. Denn die Beschleunigung sagt ja eben schon, wieviel Geschwindigkeit pro Sekunde dazukommt! Du brauchst die Zeit-Variable also gar nicht.

Sollte der Interrupt ein anderes Intervall haben, kannst Du den Beschleunigungswert entsprechend umrechnen.
borromeus



Anmeldungsdatum: 29.12.2014
Beiträge: 509

Beitrag borromeus Verfasst am: 21. Jun 2016 16:41    Titel: Antworten mit Zitat

Steffen Bühler hat Folgendes geschrieben:

Ich würde es einfacher angehen.
Position = Position + Geschwindigkeit ;


Wenn das so ist, dann habe ich weiter oben einen Fehler gemacht.
Position = Position + Geschwindigkeit + 4,905
Wo ist mein Fehler Steffen?
Steffen Bühler
Moderator


Anmeldungsdatum: 13.01.2012
Beiträge: 7242

Beitrag Steffen Bühler Verfasst am: 21. Jun 2016 16:53    Titel: Antworten mit Zitat

borromeus hat Folgendes geschrieben:
Wo ist mein Fehler Steffen?


Die Formel



könnte man auch nehmen, dann kann man allerdings nicht rekursiv arbeiten, sondern braucht tatsächlich eine wachsende Zeitvariable t, aus der dann laufend das aktuelle s(t) berechnet wird. Insbesondere sind v0 (die Absprunggeschwindigkeit) und s0 (die Absprungposition) hier Konstanten!
borromeus



Anmeldungsdatum: 29.12.2014
Beiträge: 509

Beitrag borromeus Verfasst am: 22. Jun 2016 07:56    Titel: Antworten mit Zitat

Naja, so einfach ist das nicht, nehmen wir ein Beispiel:
Annahme, g=10m/s²

Fall A: 3s freier Fall:

Entfernung dabei= 45m

Fall B: 3 x 1s freier Fall:
Position nach Sekunde 1

0 + 5 = 5m, v1=10m/s

Delta zwischen Sekunde 1 und 2:

10 + 5 = 15m, v2=20m/s

Delta zwischen Sekunde 2 und 3:

20 + 5 = 25m, v3=30m/s

In Summe sind diese drei Teilstrecken nun ebenfalls 45m, was den Sachverhalt korrekt darstellt.
Elektronik91



Anmeldungsdatum: 22.05.2015
Beiträge: 51

Beitrag Elektronik91 Verfasst am: 22. Jun 2016 11:12    Titel: Antworten mit Zitat

Ich habe das gestern in Java mal programmiert.

Ich habe diese zwei Fomeln verwendet:

Geschwindigkeit = Geschwindigkeit + Beschleunigung;
Position = Position + Geschwindigkeit ;

Position wird dann von der aktuellen y-Position des Spielers abgezogen.

Leider funktioniert das ganze nicht so wie ich mir das vorgestellt habe.
Der Spieler wird nach unten hin mit der Zeit nicht schneller, sondern die Spielfigur macht sprünge die immer größer werden.
Das heißt sie macht keine flüssige bewegung nach unten sondern spring z.B. einmal 10pixel dann 30pixel usw.
Das hat mit der Dekrementierung einer einfachen Variable, wie ich es am anfang gemacht habe besser ausgessehen, da die Figur in einer flüssigen Bewegung von oben nach unten "gefahren" ist.

Danke für die Hilfe.
borromeus



Anmeldungsdatum: 29.12.2014
Beiträge: 509

Beitrag borromeus Verfasst am: 22. Jun 2016 11:26    Titel: Antworten mit Zitat

Naja, dann musst Du eben die Zeitscheiben von 1s auf zB 20ms ändern.
Mit einer Änderung pro Sekunde kann es ja nicht flüssig aussehen.
Steffen Bühler
Moderator


Anmeldungsdatum: 13.01.2012
Beiträge: 7242

Beitrag Steffen Bühler Verfasst am: 22. Jun 2016 13:50    Titel: Antworten mit Zitat

Elektronik91 hat Folgendes geschrieben:

Geschwindigkeit = Geschwindigkeit + Beschleunigung;
Position = Position + Geschwindigkeit ;

Position wird dann von der aktuellen y-Position des Spielers abgezogen.


Wieso abgezogen? Das ist dann doch die neue Position!

Sagen wir mal Position 42, Geschwindigkeit 5, Beschleunigung -10.

Dann ist die neue Geschwindigkeit -5 und die neue Position 37. Aber diese 37 wird doch nicht von der aktuellen 42 abgezogen (das ergäbe 5). Sondern die 37 überschreibt die 42.
Elektronik91



Anmeldungsdatum: 22.05.2015
Beiträge: 51

Beitrag Elektronik91 Verfasst am: 24. Jun 2016 15:10    Titel: Antworten mit Zitat

Bei mir sieht der Java-Code momentan so aus:
Code:

double geschwindigkeit;
double position;

if(kollisionErmittlung == true){
   geschwindigkeit = geschwindigkeit + 0.5;
   position = position + geschwindigkeit;
   ypos = (int)position;


"ypos" ist die y-Position des Spielers.
Mit 9,81 läuft das ganze viel zu schnell ab, da ich kein delay verwende.
Mit kleiner 0.5 sieht der Ablauf ganz gut aus.
Das "(int)" muss ich machen, da die draw-Methode kein double möchte. Deshalb mache ich ein Casting.
Die Beschleunigung mit "0.5" darf nicht negativ sein (-0.5), da der Spieler sonst nach oben fliegt statt nach unten zu fallen.

Ist vermutlich Physikalisch nicht mehr korrekt, funktioniert aber.
Elektronik91



Anmeldungsdatum: 22.05.2015
Beiträge: 51

Beitrag Elektronik91 Verfasst am: 27. Jun 2016 14:59    Titel: Antworten mit Zitat

Ich möchte mich nochmals bei euch für die Hilfe bedanken!

Leider habe ich erst jetzt festgestellt, dass die Methode über die wir hier geschrieben haben doch nicht so ganz funktioniert.
Ich habe im Netz ein Buch gefunden, indem die Gravitationsberechnung für Computerspiele in Java mit Gravitationsformel nach Newton gemacht wird.

Hier mal der Link:
https://books.google.at/books?id=dscjPNO_5NsC&pg=PA125&lpg=PA125&dq=gravitation+java+programmieren&source=bl&ots=mCQkhKT2t5&sig=0qgZKnBV66tjJ4jKzLVotGrDsvU&hl=de&sa=X&ved=0ahUKEwiw9-blmMjNAhWFXBQKHTiJCAIQ6AEIVzAH#v=onepage&q=gravitation%20java%20programmieren&f=false
Seite im Buch: 124, 125, 126.

Nach diesem Buch wird als erstes der Abstand zwischen den beiden Körpern ermitteln, indem von beiden Objekten die x-Position und y-Position ermittelt wird. Als nächstes wird der Abstand zwischen den beiden Körpern ermitteln indem die beiden x & y-Positionen von einander Subtrahiert werden.
Danach wird ein neuer Vektor erzeugt, dazu werden die gerade eben berechneten Werte, also die x & y-Position für den Vektor verwendet.
Das heißt, das der Vektor dann bei (0|0) Startet und bei (x-Position|y-Position) endet.
Als nächstes wird im Buch die Länge des Vektors mit Hilfe des Pythagoras berechnet.
Ab hier stehe ich etwas an. Warum berechnet er die Länge des Vektors mit dem Pythagoras?
Bei der von mir weiter oben erwähnten Subtraktion der beiden x & y-Positionen bekomme ich doch schon die korrekte Länge des Vektors. Wenn sich nun z.B. ein Objekt dem anderen nähert, dann kann ich doch mit einer neuen Subtraktion die neue Länge des Vektors berechnen, oder nicht??

MfG
Steffen Bühler
Moderator


Anmeldungsdatum: 13.01.2012
Beiträge: 7242

Beitrag Steffen Bühler Verfasst am: 27. Jun 2016 15:11    Titel: Antworten mit Zitat

Ja, das hatte ich in meinem ersten Post ja kurz erwähnt. Korrekterweise muss man auch hier den Abstand zwischen dem Schwerpunkt der Figur und dem Erdmittelpunkt immer wieder neu berechnen, um dann die aktuelle Beschleunigung und deren Richtung zu bestimmen.

Nur ist dies eben bei Deiner Figur so gut wie konstant, weil die immer ziemlich genau 6371 Kilometer vom Erdmittelpunkt entfernt ist und auch immer genau in diese Richtung fällt. Daher kann man eben die Beschleunigung von Betrag und Richtung als konstant annehmen und braucht auch keinen Pythagoras, denn selbst wenn die Figur etwas nach links oder rechts wandert, ändert das am Abstand nur ein paar Zentimeter.

Etwas anderes wäre es, wenn Du die Erde "wegnimmst" und nur zwei (oder mehr) Figuren an verschiedene Positionen mit verschiedenen Anfangsgeschwindigkeiten in den Raum setzt. Dann ändern sich laufend deren Abstände und Beschleunigungen zueinander.
Elektronik91



Anmeldungsdatum: 22.05.2015
Beiträge: 51

Beitrag Elektronik91 Verfasst am: 27. Jun 2016 16:24    Titel: Antworten mit Zitat

Achso, das heißt wenn ich durch eine Subtraktion die neue Länge zwischen den beiden Körpern berechne (also die neue Vektorlänge ermittle), dann ist das mit der Subtraktion nur richtig, wenn sich die x-Position des Spielers nicht ändert (bei minimaler Änderung der x-Position des Spieler ist das nicht so Schlimm). Mit der Subtraktion berechne ich wie in diesem Fall nur meine neue y-Position.
Wenn sich aber der Spieler recht großzügig auf der x-Position hin und her bewegt, dann verwendet man den Pythagoras da hier nicht nur die neue y-Position ermittelt wird sondern auch die neue x-Position des Spielers.

Hab ich das jetzt so richtig verstanden?

MfG
Steffen Bühler
Moderator


Anmeldungsdatum: 13.01.2012
Beiträge: 7242

Beitrag Steffen Bühler Verfasst am: 27. Jun 2016 16:31    Titel: Antworten mit Zitat

Ja, hast Du. Mit "großzügig" sind dann allerdings wirklich horizontale Strecken von meinetwegen 500 Kilometern gemeint, und dann natürlich nicht auf der gekrümmten Erdoberfläche (dann bliebe der Abstand zum Mittelpunkt ja gleich), sondern tangential weg. Dann würde man vielleicht eine Abnahme der Beschleunigung errechnen, die von Bedeutung wäre.
Elektronik91



Anmeldungsdatum: 22.05.2015
Beiträge: 51

Beitrag Elektronik91 Verfasst am: 28. Jun 2016 18:13    Titel: Antworten mit Zitat

Als nächtes wird die momentane Kraft F mit dem newtonschen Gravitationsgesetz berechnet.

Mit dieser Formel:

Kann ich die Beschleunigung meines Körpers berechnen.

Nun hätte ich noch ein paar Fragen.

1. Wie ermittelt er die Masse des Körpers, gibt er diesen einfach einen bestimmten Wert wie z.B. 30kg?

2. Wozu benötigt er jetzt eigentlich den Vektor? Die berechnung mit dem Pythagoras liefert mir doch den neuen Abstand der beiden Körper in einem Zahlenwert?
Elektronik91



Anmeldungsdatum: 22.05.2015
Beiträge: 51

Beitrag Elektronik91 Verfasst am: 30. Jun 2016 20:09    Titel: Antworten mit Zitat

Darf ich euch bitten meine letzte Frage zu Beantworten?

Vielen Dank!
Steffen Bühler
Moderator


Anmeldungsdatum: 13.01.2012
Beiträge: 7242

Beitrag Steffen Bühler Verfasst am: 30. Jun 2016 20:55    Titel: Antworten mit Zitat

Ich finde unter dem Link nur ein winzig dargestelltes Buch, den Text kann ich nicht lesen. Andere?
hansguckindieluft



Anmeldungsdatum: 23.12.2014
Beiträge: 1212

Beitrag hansguckindieluft Verfasst am: 01. Jul 2016 08:37    Titel: Antworten mit Zitat

Hallo,

Elektronik91 hat Folgendes geschrieben:

1. Wie ermittelt er die Masse des Körpers, gibt er diesen einfach einen bestimmten Wert wie z.B. 30kg?

Ich nehme an, dass die Masse konstant sein soll, und jedem Objekt fest zugeordnet ist. Zugegriffen wird dann über this.mass

Elektronik91 hat Folgendes geschrieben:

2. Wozu benötigt er jetzt eigentlich den Vektor? Die berechnung mit dem Pythagoras liefert mir doch den neuen Abstand der beiden Körper in einem Zahlenwert?

Ich denke der Vektor wird benötigt, um die Richtung der Kraft und damit der Beschleunigung festzulegen. Kräfte und Beschleunigungen sind Vektoren. Der Betrag allein reicht zur Beschreibung nicht aus.

Gruß
Elektronik91



Anmeldungsdatum: 22.05.2015
Beiträge: 51

Beitrag Elektronik91 Verfasst am: 02. Jul 2016 09:53    Titel: Antworten mit Zitat

O.K., aber die Vorgehensweise ist schon etwas unverständlich.

Wieso führt er eine Subtraktion durch, wenn die Länge eh nicht stimmt?
Dann kann er doch gleich am Anfang den Pythagoras verwenden um einen neuen Vektor zu erzeugen und die Subtraktion weglassen?

Du sagtest ja, das die Acceleration ebenfalls ein Vektor sei.
Aber für die Acceleration erzeugt er keinen neuen Vektor sondern berechnet ihn nur mit der Formel:

Beschleunigung = Kraft / Masse (Also die Masse vom Spieler)
?
Elektronik91



Anmeldungsdatum: 22.05.2015
Beiträge: 51

Beitrag Elektronik91 Verfasst am: 06. Jul 2016 21:26    Titel: Antworten mit Zitat

Bitte euch um eine Antwort.

MfG
hansguckindieluft



Anmeldungsdatum: 23.12.2014
Beiträge: 1212

Beitrag hansguckindieluft Verfasst am: 06. Jul 2016 21:54    Titel: Antworten mit Zitat

ich verstehe den code auch nicht 100%. Ich bin kein Programmierer, und mit Java hatte ich noch nichts zu tun.

Um den Pythagoras anzuwenden muss doch erstmal der Abstand in x und y Richtung ermittelt werden (oder welche Subtraktion meinst Du?).

Ja, die Beschleunigung ist ein Vektor, und dieser zeigt in die gleiche Richtung wie der Kraftvektor (und auch in die gleiche Richtung, wie die Verbindungslinie zwischen den Schwerpunkten der beiden Körper).

Erst wird die Richtung des Vektors bestimmt. Dazu wird der Abstand der beiden Körper in x und y Richtung ermittelt. Danach wird über Pythagoras der Abstand der beiden Körper ermittlt. Daraufhin kann über das Gravitationsgesetz die zwischen den beiden Körpern wirkende Kraft ermittelt werden. Und mit der Kraft wiederum die Beschleunigung, die auf den jeweiligen Körper wirkt.
Zum Schluss wird ja über "force.setlength..." dem Kraftvektor der Betrag der Beschleunigung als "Länge" zugewiesen. Nun ist es eigentlich kein Kraftvektor mehr, sondern ein Beschleunigungsvektor.

Bei Deiner Anwendung braucht man aber, wie bereits mehrfach von unterschiedlichen Personen erwähnt, all diese "Klimmzüge" nicht. In Deinem Fall ist doch die eine Masse immer die Erde. Der Abstand ist mit guter Näherung immer der Erdradius, und die Richtung der (konstanten) Beschleunigung zeigt senkrecht nach unten.

Wenn man aber (wie in dem Buchbeispiel) ein Weltraumspiel programmiert, in dem sich mehrere Körper frei im Weltall bewegen, dann muss man so rechnen, wie in dem Buch angegeben.

Gruß
Neue Frage »
Antworten »
    Foren-Übersicht -> Mechanik