Hey Leute, ich brauche mal euer mathematisches / physikales Wissen, ich verzweifel hier langsam.
Es nur darum, zwei Kreise gleicher Größe von einander Abprallen zu lassen. Die Kollision zu überprüfen ist kein Problem, aber die neuen Geschwindigkeitsvektoren sind schwer.
Es handelt sich dabei, wenn ich es richtig verstanden habe, um den nicht zentralen, elastischen Stoß. Und bisher habe ich folgenden Ansatz (ist nur syntaktisch übersetzt aus Ruby, deswegen ist das ganze etwas weniger komplex (keine Properties etc.):
Sieht auch schon garnicht sooo schlecht aus, ist aber falsch. Auf die Formeln bin ich mittels Umstellung der beiden Gleichungen der Formeln darüber gekommen. Habt ihr eine Idee ?
Es nur darum, zwei Kreise gleicher Größe von einander Abprallen zu lassen. Die Kollision zu überprüfen ist kein Problem, aber die neuen Geschwindigkeitsvektoren sind schwer.
Es handelt sich dabei, wenn ich es richtig verstanden habe, um den nicht zentralen, elastischen Stoß. Und bisher habe ich folgenden Ansatz (ist nur syntaktisch übersetzt aus Ruby, deswegen ist das ganze etwas weniger komplex (keine Properties etc.):
Visual Basic-Quellcode
- Sub vomBallAbprallen(einB As Ball)
- Dim dx As Integer = self.get_MitteX - einB.get_MitteX
- Dim dy As Integer = self.get_MitteY - einB.get_MitteY
- Dim abstand As Double = Math.Sqrt(dx^2 + dy^2)
- If abstand <= (self.get_r + einB.get_r) then
- 'Kollidieren (self = 1, einB = 2)
- 'Nicht zentraler, elastischer Stoß
- ' dx / dy = ux / uy (Vektor der neuen Geschwindigkeit und Vektor zwischen den Mittelpunkten zeigen in die gleiche Richtung)
- ' vx1^2 + vx1^2 = ux2^2 + uy2^2 (Betrag der Geschwindigkeit 1 vorher = Betrag der Geschwindigkeit 2 nachher)
- Dim vx1 As Double = self.get_vx()
- Dim vy1 As Double = self.get_vy()
- Dim vx2 As Double = einB.get_vx()
- Dim vy2 As Double = einB.get_vy()
- Dim ux1 As Double = (Math.Sqrt(vx1^2 + vy1^2) * dx)/(Math.Sqrt(dx^2 + dy^2))
- Dim uy2 As Double = (Math.Sqrt(vx1^2 + vy1^2) * dy)/(Math.Sqrt(dx^2 + dy^2))
- Dim ux1 As Double = -(Math.Sqrt(vx2^2 + vy2^2) * dx)/(Math.Sqrt(dx^2 + dy^2))
- Dim uy2 As Double = -(Math.Sqrt(vx2^2 + vy2^2) * dy)/(Math.Sqrt(dx^2 + dy^2)
- 'Geschwindigkeiten setzen
- Me.set_vx(ux1)
- Me.set_vy(uy1)
- einB.set_vx(ux2)
- einB.set_vy(uy2)
- End If
- End Sub
Sieht auch schon garnicht sooo schlecht aus, ist aber falsch. Auf die Formeln bin ich mittels Umstellung der beiden Gleichungen der Formeln darüber gekommen. Habt ihr eine Idee ?
»There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais