Ich versuche ein Mesh-to-Circle Kollisionssystem für mein Spiel zu machen. Ich habe einige Beispiele gesehen, in denen Sie über alle Verts des Gitters iterieren und prüfen, ob sie sich innerhalb des Kreises befinden. Aber das Problem ist, dass manchmal die Scheitelpunkte nicht innerhalb des Kreises liegen, sondern die Linien, die diese Scheitelpunkte bilden. In diesen Fällen wird die Kollisionsprüfung als falsch ausgewertet, wenn sie als wahr ausgewertet wird. Wie kann ich eine gute Kollisionserkennung dieses Typs durchführen? (in c/C++)Wie man eine korrekte 2d Netz-zu-Kreis Kollisionserkennung macht
Antwort
Eigentlich eine schnelle Google lässt Sie wissen, dass dies ein Duplikat einer Frage ist bereits auf Stack-Überlauf: Circle line-segment collision detection algorithm?
Iterieren Sie einfach über alle Kanten. Und sorgen Sie sich nicht um die Scheitelpunkte: Wenn sich ein Scheitelpunkt innerhalb des Kreises befindet, wird er von einer Kante überquert (es sei denn, das gesamte Gitter befindet sich innerhalb des Kreises, was wahrscheinlich nicht wahrscheinlich ist).
Und wie iterieren ich über eine Kante? Ich kann nur die Position eines konkreten Punktes kennen, aber nicht eines Randes, kann ich? – XaitormanX
Ihre Frage ist also, wie man bestimmt, ob das gerade Liniensegment zwischen zwei gegebenen Punkten einen gegebenen Kreis kreuzt? – Beta
Ja genau. Denn wenn ich es nicht mache, würde es nicht richtig funktionieren. – XaitormanX
Wenn Sie möchten, können Sie den Abstand von der Linie zum Mittelpunkt des Kreises berechnen. Aber ich denke, es wird zu teuer sein. Wenn die Entfernung niedriger als das Radio ist, könnte es zu einer Kollision kommen. Sie müssen prüfen, ob dieser Teil der Linie zwischen den Punkten liegt. Distance line to point
Aber ich muss einen konkreten Punkt für die Abstandsprüfung verwenden, weil es in der Mitte der Linie kollidieren kann, aber nicht am Ende. Woher weiß ich, welchen Punkt der Linie ich benutzen muss? – XaitormanX
Die Mathematik gibt Ihnen die kürzeste Entfernung zwischen einem Punkt (der Mitte Ihres Kreises) und einer Linie (jeder Eckpunkt Ihres Netzes). Sie können auch lesen http://www.intmath.com/plane-analytic-geometry/perpendicular-distance-point-line.php, http://tog.acm.org/resources/GraphicsGems/index.html, http: //forums.codeguru.com/showthread.php?t=194400 und http://www.merl.com/projects/vclip/ – j4x
- 1. Xna Kollisionserkennung 2d
- 2. XNA 2D Kollisionserkennung
- 3. Java 2d Spiel Kollisionserkennung
- 4. Beste 2D-Kollisionserkennung
- 5. OpenGL 2D Kollisionserkennung nicht funktioniert
- 6. Einfache 2D-Kollisionserkennung mit Vektoren
- 7. Ressourcen von Techniken zur Kollisionserkennung in 2D?
- 8. Kollisionserkennung unterbricht eine andere Kollisionserkennung - Swift
- 9. Wie macht man ein 2D Gelände mit OpenGL?
- 10. Wie man eine Shell macht?
- 11. Wie man eine Ziffernrunde macht?
- 12. 2D C++ Kollisionserkennung fast perfekt, aber nicht ganz?
- 13. Nur Integration von Box2D Kollisionserkennung in meiner 2d-Engine?
- 14. Wie entfernt man eine 2D-Array-Teilmenge?
- 15. Wie man eine korrekte Json Deserialisierung zu einem Java-Objekt macht?
- 16. Rechteck Kollisionserkennung xna
- 17. Javascript Kollisionserkennung
- 18. XNA wie man eine 2D-Karte speichert und zeichnet?
- 19. XNA C# 2D Platformer Spiel
- 20. Wie wird die Kollisionserkennung eine Zeitlang durchgeführt?
- 21. Android: Wie man eine kreisförmige Kameravorschau macht?
- 22. Wie man eine kompatible Passwortverlängerung macht?
- 23. Wie man eine Spalte volle Seitenhöhe macht
- 24. Wie man eine internationale Soundex macht?
- 25. Wie man eine flüssige klebrige Fußzeile macht
- 26. Wie man eine UNION mit Lehre macht?
- 27. Wie macht man eine Volltextsuche in Cocoa?
- 28. Wie macht man eine Swing-Anwendung anfassbar?
- 29. Wie macht man eine Rails App "tragbar"?
- 30. Xcode wie man eine Kurve macht?
Ok, danke. Das löst mein Problem – XaitormanX