# Gravitationssimulation



## LastSamurai (8. Jan 2011)

Ich hoffe der Teil des Forums hier ist richtig, denn ich habe einige Fragen, die zum Teil aus sehr unterschiedlichen Gebieten kommen.
Erstmal vorneweg meine Idee: Ich wollte mir als Grundlage für alle möglichen späteren Programme mal eine Art Physiksimulation in simpel bauen. Dazu braucht man ja erstmal Gravitation später vielleicht noch Kollision usw. ...
Den ersten Teil davon hab ich auch bereits hinbekommen. Aber: gibt es da schon was "professionelles" wo man sich vielleicht ein bisschen was abschauen kann, oder was man auch komplett benutzen kann?
Und dann meine 2. Frage: ich nutze für die Bewegung einen Vektor der so aussieht:

```
private int[] vector = new int[2];
```
Da die Objekte ja auch iwann mal wieder aufhören sollen durch die Gegend zu hüpfen hab ich einen Luftwiderstand eingebaut. Jetzt ist meine eigentliche Frage, wie man das vernünftig lösen könnte. Das hier ist der entscheidende Teil:

```
public void move() {
        //Movement
        corex += direction[0];
        corey += direction[1];

        //Air resistance
        direction[0] = (int) Math.round(direction[0]*resistance);
        direction[1] = (int) Math.round(direction[1]*resistance);

        //New direciton
        direction[1] += gravity[1];
    }
```
 Direction ist dabei der Bewegunsvector und resistance ist ein double mit 0,95. Das Problem, wie euch sicher auffällt, ist das der Köper nie anhält, weil ab eine Geschwindigkeit von 9 nicht mehr abgerundet werden kann. Hat jemand eine Idee wie man das evnt. eleganter lösen kann?
Hoffe auf eure Hilfe !


----------



## Runtime (8. Jan 2011)

Wert abziehen oder mit Faktor multiplizieren.


----------



## LastSamurai (8. Jan 2011)

Wert abziehen, geht insofern nicht, da ja dann durch den Widerstand die Richtung geändert werden würde. Was meinst du mit dem zweiten? Ich multipliziere doch schon?!
Äh klar ok Wert abziehen geht doch, obwohl ich dann das Problem habe, das er dank der Schwerkraft nie völlig zu ruhen kommt. Eine kleine Bewegung bleibt immer.

Gibt es denn irgendeine Fertige Simulation, die man nutzen könnte?


----------



## Illuvatar (8. Jan 2011)

Solang du für dein "direction" oder irgendwelche andere kontinuierlichen Größen int-Variablen verwendest, wirst du dein Problem nicht los. Da solltest du überall doubles oder floats draus machen (also auch aus der Position und so)... eine Genauigkeit von "Pixel" reicht da einfach nicht.
Erst bei der Anzeige ganz am Ende wird in int gecastet.
Sonst könntest du ja auch nie zum Beispiel Geschwindigkeiten von "3 pixel pro 2 zeitabschnitte" hinkriegen...

Zur ersten Frage: Hab das noch nie benutzt, aber ich glaub bei der jMonkeyEngine ist auch eine Physik Simulation dabei.


----------



## tagedieb (9. Jan 2011)

Bei www.myphysiscslab.com findest du Formeln und Beispiele zur Berechnung der Schwerkraft und des Luftwiderstands.


----------

