Hallo,
(wo es beim Fragesteller genau gehakt hat ist unbekannt)
Es geht mir darum:
Ich möchte etwas programmieren, man kann es sich vorstellen
wie beim Billard. Eine Kugel rollt auf eine andere Kugel,
beide Kugeln bewegen sich. Jede Kugel hat eine Position (x und
y), eine bestimmte Geschwindigkeit und einen Winkel, in
welchem sie rollt,
also zuerst dies - eigentlich der letzte Schritt.
Die Kugeln haben beim Stoß die Geschwindigkeiten
1.)v1x,v1y
2.)v2x,v2y
Die Richtung ist jeweils durch tan=vy/vx bestimmt.
Du willst nach den Stoß die entsprechend veränderten
Geschwindigkeiten für jede Kugel haben.
Für den geraden Stoß weißt Du wie das geht -nehme ich an.
Wie Du die Stoßposition ermittelst - da hast Du keine Probleme -
sagst Du (unten)
Dann gibt es diese Lösung.
Du mußt die Geschwindigkeitsvektoren beider Kugeln auf die
Verbindungsachse der Stoßpositionen projezieren.Es bleiben für
jede Kugel Geschwindigkeitskomponenten „rest“, welche den
Stoßvorgang nicht beeinflussen.
(Kenntnis von Vektorenzerlegung ist hier Pflicht)
Die Richtung der Verbindungsachse ist durch die Koordinaten der
Positionspunkte mit tan=(y1-y2)/(x1-x2) bestimmbar.
Da die Richtungswinkel der Geschwindigkeitsvektoren ebenfalls
bekannt sind, sind auch die Projektionswinkel bekannt.
Die Projektionskomponenten können wie ein gerader Stoß berechnet
werden. Die Ergebnisse sind wieder in die x/y Richtung für jede
Kugel zu zerlegen und zu den „Restkomponenten“ unter Beachtung
der Vorzeichen (Achtung !)zu addieren.
Dies ist verbal die Beschreibung des Vorgangs - ohne eine
entsprechend vollständige Skizze der Stoßposition welche Du
Dir machen solltest,schlecht nachvollziehbar
Es gibt noch Vereinfachungen - aber das geht ins Detail.
Ein Berechnungsvorgang wird hier präsentiert.
http://de.wikipedia.org/wiki/Schiefer_Sto%C3%9F#Zwei…
Es gibt also eine Funktion, die zum Beispiel alle 20ms
aufgerufen wird.
Nun - die Wahl des Zeitschrittes für die Berechnung kann nicht der
Realzeit (zBsp.Microsekundenzähler des Computer-Systems)entnommen
werden, sondern muß anderen Kriterien angepaßt werden.
Wenn Du eine Realsimulation erstellen willst müßte die Laufzeit
des Programms mit dieser harmonisiert werden, was nicht ganz
einfach ist.
Diese Funktion verschiebt jeweils die Kugeln
und prüft danach, ob es eine Kollision zwischen zwei Kugeln
gibt. Das zu überprüfen ist kein Problem (wenn Distanz der
Mittelpunkte kleiner oder gleich radius*2).
Es sollte schon ziemlich genau sein.Bei flachen Stößen wird sonst
der Fehler relativ groß.
Wenn dies der Fall
ist, dann sollen jeweils die Geschwindigkeiten und Winkel
dieser beiden Kugeln entsprechen geändert werden.
So ist es.Wenn die Geschwindigkeitskomponenten geändert werden
sind die Richtungswinkel automatisch enthalten.
Ich hoffe, ich habe es verständlich ausgedrückt.
Ja, das wußte ich vorher schon.Aber an welcher Stelle es genau
bei Dir „hakt“ weiß ich nicht.
Ich nehme mal die Stoßsituation an und Du weißt Durch meinen Beitrag
vorerst Bescheid. Fang einfach an zu programmieren nachdem Du
alle Bewegungs- und Zerlegungs-gleichungen (einschl. Stoß) mal
aufgeschrieben hast.
Die Detailprobleme kommen meist dann erst.
Wenn Du Anfragen dazu hast, dann stelle diese detailliert,
verständlich und vor allem vollständig, sonst macht es keinen Sinn.
Gruß VIKTOR