Lina-Inverse
Registriertes Mitglied
Hallo zusammen,
ich möchte gern den elastischen Stoss in der Ebene simulieren. Wiki hat mir nur begrenzt weitergeholfen, da ich dort nur Formeln für 1-dimensionalen Fall gefunden habe.
Es geht mit nicht um eine 100% pysikalisch korrekte Simulation, nur glaubhaft (bzw. ästhetisch ansprechend) muss es aussehen. Meine Körper sind näherungsweise kreisförmig und dementsprechend durch Radius, Masse, Bewegungsvektor und Position vollständig beschrieben (das ist eigentlich auch alles was ich habe). Zwar verfügen die Körper noch über eine Rotationsgeschwindigkeit, die muss aber nicht berücksichtigt werden.
Dazu verwende ich im Moment folgende Logik:
Das ist setzt die letzte Formel aus idealer elastischer Stoss um. Das Ergebnis entspricht dem was man bei einem zentralen Stoss erwartet, für streifende Stösse sieht das allerdings ziemlich seltsam aus.
Kennt jemand eine Online-Formelsammlung oder die Formel für den 2-dimensionalen Fall (streifender Stoss)? Es darf auch gern ein Näherungsverfahren sein.
Gruss
Michael
ich möchte gern den elastischen Stoss in der Ebene simulieren. Wiki hat mir nur begrenzt weitergeholfen, da ich dort nur Formeln für 1-dimensionalen Fall gefunden habe.
Es geht mit nicht um eine 100% pysikalisch korrekte Simulation, nur glaubhaft (bzw. ästhetisch ansprechend) muss es aussehen. Meine Körper sind näherungsweise kreisförmig und dementsprechend durch Radius, Masse, Bewegungsvektor und Position vollständig beschrieben (das ist eigentlich auch alles was ich habe). Zwar verfügen die Körper noch über eine Rotationsgeschwindigkeit, die muss aber nicht berücksichtigt werden.
Dazu verwende ich im Moment folgende Logik:
Code:
/**
* Exchanges inertia between the two objects
*/
public void bounceOff(final GameObject othr) {
this.retracePosition();
othr.retracePosition();
// get object parameters
final int m1 = this.getMass();
final int m2 = othr.getMass();
final double mt = 1D / (m1 + m2);
final int x1 = this.inertiaX;
final int y1 = this.inertiaY;
final int x2 = othr.inertiaX;
final int y2 = othr.inertiaY;
double nx1 = ((m1 - m2) * x1 + (m2 << 1) * x2) * mt;
double ny1 = ((m1 - m2) * y1 + (m2 << 1) * y2) * mt;
double nx2 = ((m2 - m1) * x2 + (m1 << 1) * x1) * mt;
double ny2 = ((m2 - m1) * y2 + (m1 << 1) * y1) * mt;
this.setVelocityVector(nx1, ny1);
othr.setVelocityVector(nx2, ny2);
this.advancePosition();
othr.advancePosition();
}
Kennt jemand eine Online-Formelsammlung oder die Formel für den 2-dimensionalen Fall (streifender Stoss)? Es darf auch gern ein Näherungsverfahren sein.
Gruss
Michael