2012-03-27 6 views
1

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

1

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).

+0

Und wie iterieren ich über eine Kante? Ich kann nur die Position eines konkreten Punktes kennen, aber nicht eines Randes, kann ich? – XaitormanX

+0

Ihre Frage ist also, wie man bestimmt, ob das gerade Liniensegment zwischen zwei gegebenen Punkten einen gegebenen Kreis kreuzt? – Beta

+0

Ja genau. Denn wenn ich es nicht mache, würde es nicht richtig funktionieren. – XaitormanX

3

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

+0

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

+1

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