Kollision Bälle simulieren?

Aufrufe: 43     Aktiv: 01.07.2021 um 11:32

0

Hallo,

das ist keine aktuelle Hausaufgabe oder irgendwas aber vor langer Zeit sollte ich programmiertechnisch mal sowas realisieren und

Habe bis heute noch nicht so recht kapiert wie das ginge, gerade auch von der Mathematik her.

 

Ich würde da gerne einfach mal meine Fertigkeiten und Kenntnisse auf den aktuellen Stand bringen

Mir gehts im Prinzip drum wie ich realistisch 2 Bälle miteinander kollidieren lasse, bspw auf einem Billiardtisch.

 

Ein Ball sei eine Punktmasse, Mittelpunkt an der Koordinate (x,y), eine Geschwindigkeit (vx,vy), und einem Radius r.

Und einem Gewicht m.

 

Eine Reflektion an einer Wand geschieht dadurch dass Einfallswinkel=Ausfallswinkel ist

bzw. der Geschwidigkeitsvektor bei Kontakt mit der Wand reflektiert wird.

 

Nun sagen wir, 2 Bälle kollidieren.

das heißt, an einem Simulationszeitpunkt t sind die Mittelpunkte unser 2 Bälle a und b geringer als die summe der Radien.


Rein von der Logik her würde ich sagen, man geht so vor:

Es wird die Verbindungslinie zwischen den Mittelpunkten gezeichnet.

Dann suchen wir eine hierzu senkrechte Gerade (sozusagen die Tangentengerade).

Im Prinzip gehen wir nun so vor, als würden die beiden Bälle an dieser imaginären Linie abprallen.

Die danach resultierenden neuen Geschwindigkeitsvektoren werden aber noch gemäß dem Verhältnis der Kugelmassen betragsmässig verkleinert oder vergrößert.

 

Ich frage mich nur, wie man das macht?

Ich meine, die Verbindungsgerade zwischen den Kreismittelpunkten bekomme ich hin.

Den Richtingsvektor der hierzu senkrechten Gerade bekomme ich über Sklarprodukt auch noch hin.

Ortsvektor für die Tangentengerade ist schon so eine Sache.

 

Aber selbst wenn ich die Tangentengerade kenne, habe ich keine Ahnung wie ich den Geschwindigkeitsvektor

letztlich passend reflektiere.

bzw. es ist ja letztlich eine "Drehung" des Vektors, aber wie man das genau hinkriegt, kapiere ich nicht.

 

Wie macht man das?

Wenn ein Ball mit Geschwindigkeit (vx,vy) bspw. auf die x-ache trifft, wäre seine neue Geschwindigkeit (vx,-vy).

Hier bin ich rein aus der Anschauung heraus drauf gekommen. Aber leite ich mir diesen Folgevektor mathematisch her?

Wie "berechne" ich Diesen?

Diese Frage melden
gefragt

Student, Punkte: 239

 
Kommentar schreiben
1 Antwort
1

Hallo,

ich will vorab sagen, dass ich wenig Ahnung von den physikalischen Zusammenhängen habe. Aber ich will dir trotzdem mal meine Gedanken dazu geben.

Der Ortsvektor sollte der Berührpunkt der beiden Kugeln sein. Wenn du den Vektor zwischen den beiden Mittelpunkten hast und ich nehme bei Billiardkugeln mal an, dass alle den selben Radius haben, dann sollte der Berührpunkt der Mittelpunkt dieses Verbindungsvektors sein. 

Einen Vektor kann man mit Hilfe einer Drehmatrix drehen. In 2D lautet diese

$$ D_\alpha =  \begin{pmatrix} \cos \alpha & - \sin \alpha \\ \sin \alpha & \cos \alpha \end{pmatrix} $$

Diese Drehmatrix dreht einen Vektor so, als würde er im Koordinatenurpsrung liegen. Das sollte aber für einen Geschwindigkeitsvektor keinen Unterschied machen, da er ja eh nur eine Richtung charakterisiert oder?

Ich denke das Problem liegt jetzt in der Bestimmung des Winkels. Prinzipiell kann man den Winkel durch das Skalarprodukt bestimmen. Hier muss man aber aufpassen, dass man den richtigen Winkel erwischt. Ich denke da kann man eine gute Unterscheidung machen. Wir bestimmen den Winkel zwischen Geschwindigkeitsvektor und unserer senkrechten. Ist dieser Winkel kleiner gleich $90^\circ$, dann haben wir unseren Einfallswinkel. Ist er größer, müssen wir ihn von $180^\circ$ abziehen um den Einfallswinkel zu erhalten. Wenn wir dann 2x denn Einfallswinkel von $180^\circ$ abziehen, ist das die Drehung die wir erreichen wollen. 
Stimmst du mir bis hier hin zu?

Jetzt gibt es noch 1 Problem. Die Drehmatrix dreht immer entgegen des Uhrzeigersinns. Die Drehung die wir haben muss aber nicht immer entgegen des Uhrzeigersinns sein. Wir brauchen also noch eine Information darüber, in welche Richtung wir drehen wollen. 
Vielleicht macht es Sinn, wieder mit der Senkrechten zu arbeiten. Wir müssten mit der Orientierung der Senkrechten arbeiten. Wenn diese eine positive y-Komponente hat, und der Winkel aus dem Skalarprodukt kleiner gleich $90^\circ$ ist, dann sollte die Kugel von "unten" kommen und weiter nach "oben" gehen. Wir bräuchten also eine Drehung im Uhrzeigersinn. Hier müssten wir den Winkel mit einem negativen Vorzeichen belasten. Analog dann bei einem Winkel über $90^\circ$. 

Was sagst du zu den Gedanken?

Grüße Christian

Diese Antwort melden
geantwortet

Sonstiger Berufsstatus, Punkte: 28.14K

 

Ja, so die Gedanken hatte ich auch schon.
Ich habe deshalb eine separate Frage gestellt, wo ich mit Anderen direkt über diese Frage des "Spiegelns" eines Vektors an einem Anderen diskutiert habe:
https://www.mathefragen.de/frage/q/3d2fc75bb3/vektor-an-anderem-vektor-spiegeln-in-2d/
  ─   densch 01.07.2021 um 11:32

Kommentar schreiben