Ich habe ein 2D-Rechteck mit x-, y-Position, Höhe und Breite und einem zufällig positionierten Punkt in der Nähe.
Gibt es eine Möglichkeit zu prüfen, ob dieser Punkt möglicherweise mit dem Rechteck kollidiert, wenn er näher als eine bestimmte Entfernung ist? Stellen Sie sich einen unsichtbaren Radius außerhalb dieses Punktes vor, der mit dem Rechteck kollidiert. Ich habe Probleme damit, einfach weil es kein Quadrat ist!
collision-detection
geometry
John Smith
quelle
quelle
Ich gehe davon aus, dass Ihr Rechteck achsenausgerichtet ist.
Sie müssen nur den Punkt in das Rechteck "klemmen" und dann den Abstand vom geklemmten Punkt berechnen.
Punkt = (px, py), Rechteck = (rx, ry, rwidth, rheight) // (obere linke Ecke, Maße)
quelle
Dazu müssen Sie Kreis-Rechteck-Kollisionen verwenden. Es gibt eine ähnliche Frage zum Stapelüberlauf.
Der Mittelpunkt Ihres Kreises ist der fragliche Punkt, und der Radius ist der Abstand, den Sie überprüfen möchten.
quelle
Wenn Sie versuchen, den Abstand zwischen einem Punkt und der Kante eines Rechtecks zu ermitteln, ist es möglicherweise am schnellsten, mit den neun vom Rechteck erstellten Bereichen zu arbeiten:
quelle
[Geänderte Antwort basierend auf Kommentaren]
Wenn Sie sehen möchten, ob der Punkt innerhalb von beispielsweise 10 Einheiten liegt, wenn sich das graue Rechteck im Bild unten befindet, überprüfen Sie, ob sich der Punkt in einem von befindet
Dieser Ansatz ist ein wenig unelegant. Eine ähnliche Methode, bei der nicht alle 4 Ecken mit Hilfe der Rechtecksymmetrie getestet werden müssen, ist hier beim Stackoverflow dokumentiert
quelle
Sie könnten so etwas verwenden:
quelle