+

Dieser Browser hat kein Java Plug-in.
Hier gibt es die neuesten Java Plug-ins.


Source code: graviball

Built with Processing


6.12.2007

Als ich das fertig hatte, hab ich erst mal 1 Stunde damit gespielt. Der Ball tanzt mit der maus. Es macht auch spass nur zuzugucken, wenn die Maus am Rand ist, sich nicht bewegt und der Ball seine Angriffe fliegt.

Da fällt einem aber auf, dass der Ball recht oft unnatürlich abgebremst oder beschleunigt wird.

Ist halt keine naturnahe Simulation, sondern nur ne spielerei. Deshalb kommen auch nicht so schöne Ellipsen zu stande, wie ich und das Newtonsche Gravitationsgesetz gehofft hatten. Statt dessen beschreibt der Ball eine Kurve, wie die links. Raum für verbesserungen.

Ich hab aber noch 2-3 Ideen, wie man die Ballbewegung verbessern kann.


10.12.2007

So, ich habe ein paar Informationen über die Simulation von Gravitation am PC gefunden. Nun weiß ich, daß mein Ansatz die einfache Rekursion nach Euler ist. Diese Methode produziert einen Rechenfehler, der mit jeder Rekursion größer wird und besonders bei schnellen Bewegungen (der Ball ist nah am Mauszeiger) sehr stark ist.

Die Lösung für mein Problem ist angeblich das Runge-Kutta-Verfahren (oder hier) das ich aber noch nicht durchschaut hab. Muß auf jedenfall noch über diesen Formeln brüten, bis ich sie zumindest benutzen kann.


11.12.2007

Ich weiß was Runge-Kutta macht!

Erst einmal die Grundlagen: der Ball hat eine Position und einen Bewegungsvektor, der Richtung und Geschwindigkeit festlegt. Wie im Bild rechts zu sehen, wird der Bewegungsvektor an die Position angelegt und der Ball wird an die neue Position verschoben. Da der Bewegungsvektor bleibt wie er ist, ist diese Bewegung geradlinig.

Da mein Ball Kurven fliegen soll, muß sich der Bewegungsvektor verändern. Der Mauspunkt zieht den Ball an, es wirkt also eine Kraft vom Ball in Richtung Maus. Diese ist im linken Bild durch den kleinen Pfeil nach unten dargestellt.

Diese Kraft addiere ich zum Bewegungsvektor hinzu und erhalte so den neuen Bewegungsvektor und daraufhin die neue Position. Das war die einfache Rekursion nach Euler, das einfachste Verfahren zur numerischen Integration.

Leider tritt dabei ein Fehler auf, der die Umlaufbahn verändert. Wenn man sich ein einzelnes Zeitintervall anschaut (eine Positionsveräderung des Balles; ein Bild weiter) dann tut die Formel so, als wirke die ganze Zeit die selbe Kraft auf den Ball (im Bild orange), die sich erst am nächsten Bild schlagartig ändert um dann wieder für ein Zeitintervall konstant zu sein. In Wirklichkeit ändert sich die Kraft aber kontinuierlich (im Bild blau), was sich besonders bei einem nahen Vorbeiflug bemerkbar macht.

Das Runge-Kutta-Verfahren benutzt nun den Vektor, den ich mit Euler berechnet habe (das ist das genaueste, was wir bisher haben) und benutzt die Kraft, die an seinem Mittelpunkt wirkt für den gesamten Zeitintervall. Damit läßt sich der Fehler angeblich drastisch reduzieren.

Das war die Beschreibung des Runge-Kutta-Verfahrens erster Ordung. Wenn mir diese Genauigkeit nicht ausreicht, kann ich das Verfahren in vierter Ordnung anwenden. Mal sehen, ob das nötig wird.

Creative Commons License