![]() |
---|
Hallöchen, bin heute zum ersten mal hier im Forum und fühle mich auch ein wenig unwohl, da Mathe eigentlich nicht zu meinen Stärken gehört. Wenn ich also etwas total unlogisches oder peinliches sage, vergebt es mir bitte. Problem ist folgendes: In Java eine Kollision zweier Kreise. Kreis 1 ist erstmal Fix. Kreis 2 trifft Kreis 1 und wird reflektiert. Erkennung der Kollision sollte kein Problem sein. Wenn die Länge des Vektors vom Mittelpunkt zum Mittelpunkt Radius Radius so findet eine Kollision statt. Mein Kreis 1 hat einen Mittelpunkt Mein Kreis 2 hat einen Mittelpunkt und einen Richtungsvektor . Der hat immer die Länge das hieß Einheitsvektor oder? ) Ich muss also aus diesen 3 Vektoren und irgendwie meinen neuen Richtungsvektor R2_NEU berechnen können. (hoffentlich) Vielen Dank schonmal für Lösungsansätze in der Hoffnung das ich sie verstehe ) Mfg Chris |
Hierzu passend bei OnlineMathe: Kreiszahl (Mathematischer Grundbegriff) Kreis (Mathematischer Grundbegriff) Elementare Kreisteile (Mathematischer Grundbegriff) Online-Übungen (Übungsaufgaben) bei unterricht.de: Grundbegriffe der ebenen Geometrie Kreis und Mittelsenkrechte Kreis: Umfang und Flächeninhalt Kreise und Lagebeziehungen Thaleskreis, Umkreis, Inkreis und Lage von Kreis und Gerade |
![]() |
![]() |
Tach, bei einer derartigen Kollision (Stoß) kann man das ganze anhand der Tangente an den (stehenden) Kreis berechnen. Es gilt: Einfallswinkel = Ausfallswinikel, wenn du die Tangente im Stoßpunkt wie eine Starre Wand behandelst (vorausgesetzt es handelt sich um einen idealen Stoß mit ). Das mathematische überlaß ich dir :-). MfG F. Edit: Eine erste Idee wäre, in seine Komponenten normal und tangential zur Tangente zu zerlegen, also in Richtung und seknkrecht dazu. Wenn du jetzt einfach das Vorzeichen des Normalanteils umkehrst und das des anderen beibehälst kannst du den neuen Richtungsvektor daraus berechnen. Nach meinem Buch gilt für die senkrechte Projektion von auf : , wobei die Komponente von in Richtung ist. Um die Komponente von senkrecht zur Tangente () zu bekommen, mußt du also für nehmen und für . Um die Komponente tangential zum Kreis zu bekommen kannst du dir ein Dreieck skizzieren und kommst auf . Jetzt mußt du nur noch das Vorzeichen von umkehren und kannst dir dein berechnen. Ich hoff meine Überlegungen sind soweit korrekt, war jetzt n spontaner Einfall der aber funktionieren sollte. |
![]() |
Kreis 2 hat den Mittelpunkt M2 mit dem Ortsvektor m2 = (x2, y2), dem Radius r2 und der Geschwindigkeit v2 = (xv2, yv2).
Eine Kollision erkennt man daran, dass sqrt((x2-x1)² + (y2-y1)²) <= r1 + r2
Nun brauchen wir einen Vektor d = (xd, yd), der von M1 nach M2 zeigt. Dieser ist d = m2 - m1 = (x2-x1, y2-y1).
Aus d machen wir den Einheitsvektor de = (xde, yde), indem wir d durch seinen Betrag teilen: de = d / (sqrt((x2-x1)² + (y2-y1)²)) de = (xd/sqrt((x2-x1)² + (y2-y1)²), yd/sqrt((x2-x1)² + (y2-y1)²)) de = ((x2-x1)/sqrt((x2-x1)² + (y2-y1)²), (y2-y1)/sqrt((x2-x1)² + (y2-y1)²))
Wenn man das Skalarprodukt b = v2 * de aus v2 und de bildet, erhält man den Betrag b der Komponente von v2, welche von M2 nach M1 zeigt. b = v2 * de = xv2 * (x2-x1)/sqrt((x2-x1)²+(y2-y1)²) + yv2 * (y2-y1)/sqrt((x2-x1)²+(y2-y1)²)
Die besagte Komponente ändert bei der Reflexion von Kreis 2 an Kreis 1 ihr Vorzeichen und zeigt dann in die Gegenrichtung. Um die Komponente von v2 umzukehren müssen wir nur ihren Gegenvektor zweimal zu v2 addieren: v2_neu = v2 - 2 * b * de v2_neu = (xv2, yv2) - 2 * b * ((x2-x1)/sqrt((x2-x1)²+(y2-y1)²), (y2-y1)/sqrt((x2-x1)²+(y2-y1)²)) v2_neu = ( xv2 - 2*b*((x2-x1)/sqrt((x2-x1)²+(y2-y1)²)), yv2 - 2*b*((y2-y1)/sqrt((x2-x1)²+(y2-y1)²)) )
GRUSS, DK2ZA |
Diese Frage wurde automatisch geschlossen, da der Fragesteller kein Interesse mehr an der Frage gezeigt hat.
|