Um die Kollisionserkennung zwischen einer Kugel (Kreis in 2D) und einer Linie zu berechnen, müssen Sie zunächst den senkrechten Vektor zwischen dem Mittelpunkt der sich bewegenden Kugel und der Linie berechnen. Um diesen Abstand zu berechnen, müssen Sie Folgendes tun:
Um d in der obigen Abbildung zu berechnen, müssen wir einige Schritte ausführen.
- Angenommen, Ihre Linie verwendet die parametrische Gleichung P (t) = S + t V. Beachten Sie, dass V die Linienrichtung ist, die durch Subtrahieren von (P2 - P1) erhalten werden kann.
- Aus Pythagoras:
d ^ 2 = len ( Q - S ) ^ 2 - len (proj ( Q - S )) ^ 2
Dann erweitern Sie die Gleichung, um Folgendes zu erhalten: Es scheint ein bisschen kompliziert zu sein, aber es ist tatsächlich nicht so.
d = sqrt (len ( Q - S ) ^ 2 - len (( Q - S ) Punkt V ) ^ 2 / V ^ 2)
Dabei ist Q der Mittelpunkt des Kreises und S ein beliebiger Punkt auf der Linie. Sobald der Abstand kleiner als der Kreis- / Kugelradius ist, müssen Sie eine Kollisionsreaktion auslösen, die im nächsten Punkt erläutert wird.
Es ist falsch, immer die x- oder y-Komponente umzudrehen, um den Ball abzuprallen. Sie müssen lediglich den Geschwindigkeitsvektor reflektieren. Dazu müssen Sie den Normalenvektor der Oberfläche berechnen und diese Normalen zur Berechnung der Reflexion verwenden Vektor unter Verwendung der folgenden Gleichung
R = 2 * ( V Punkt N ) * N - V.
Dabei ist R der Reflexionsvektor, N die Normalen der Oberfläche und V der Geschwindigkeitsvektor.
Bei 45 Grad beträgt Ihre Oberflächennormale N = (1,1,0) mit unterschiedlichem Vorzeichen, je nachdem in welche Richtung die Normalen zeigen (Position oder Negativ).