Elastischer Stoss (in der Ebene)

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:
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();
	}
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
 

Lina-Inverse

Registriertes Mitglied
Danke Chrischan, das sieht sehr vielversprechend aus. Ich denke damit kann ich mein Problem schon lösen.

Danke
Michael
 
Oben