Ich entwickle ein 2D-Spiel mit Kollisionen zwischen vielen Festplatten. Ich würde gerne wissen, wie ich den Winkel erhalten kann, der der neuen Richtung jeder Scheibe entspricht. Für jede Festplatte habe ich diese Informationen: Richtung (Integer), Geschwindigkeit (Float) und Position ( ; , die beide ganze Zahlen sind).
Natürlich weiß ich, dass die neue Richtung das Gegenteil der Kollisionsrichtung sein wird (eine Scheibe, die unten links getroffen wird, geht nach oben rechts), aber ich weiß nicht, wie ich den neuen Winkel genau berechnen soll.
Im Idealfall, bei dem die Kollision augenblicklich erfolgt und es nur einen einzigen Kontaktpunkt gibt, können die Kräfte, denen jedes Objekt ausgesetzt ist, nur entlang der Linie wirken, die die Zentren verbindet und durch den Kontaktpunkt verläuft. Tatsächlich wird die "Kraft" unendlich sein, aber sie wird während des infinitesimalen Zeitintervalls, in dem die Kollision auftritt, einen endlichen Impuls (dh eine Impulsänderung) vermitteln . Es kann keine Impulskomponente orthogonal dazu geben, weil dies einer "Kraft" gleichkäme, die den Kreis tangiert. Bei jedem endlichen Reibungskoeffizienten können Sie einen Kreis nicht beeinflussen, indem Sie ihn nur an einem Punkt tangieren.
Diese Einschränkung reicht zusammen mit der Impulserhaltung in zwei Richtungen und der Energieerhaltung aus, um die Bewegung beider Kreise bei beliebigen Anfangsbedingungen zu bestimmen (wofür 4 Skalare erforderlich sind, um vollständig definiert zu werden).
Steht der Zielkreis vor der Kollision still, ist seine Bewegungsrichtung danach leicht zu erkennen: Er liegt exakt auf der Linie, die die Mittelpunkte der beiden Kreise im Moment des Kontakts verbindet. (Stellen Sie sicher, dass Sie entlang dieser Linie den richtigen Weg gehen - nur eine der Richtungen ist sinnvoll.) Die neue Richtung des Kreises, der sich ursprünglich bewegte, wird einfach durch die Richtung der Vektorsumme seines alten Impulses und des übertragenen Impulses gegeben dazu bei der Kollision. Wenn Sie Zahlen wollen, sagen Sie, der sich bewegende Kreis stellt Kontakt her, wenn sein Mittelpunkt bei ist , und das andere Zentrum ist bei . Dann ist der Winkel, in dem sich 2 von der Kollision wegbewegt
Wenn Sie dies natürlich auf die nächste Stufe des Realismus bringen möchten, müssen Sie möglicherweise die folgenden Effekte berücksichtigen:
Schließlich schlage ich aus Gründen der numerischen Genauigkeit vor, alle Zahlen in den Berechnungen als Gleitkommazahlen zu belassen und beim Rendern nur auf die nächsten ganzen Zahlen zu runden.
Benutzer10851
rauben
N. Jungfrau