Ich habe ein Tetraeder und ein Polyeder p . t ist so eingeschränkt, dass es immer alle seine Eckpunkte mit p teilt . Ich möchte feststellen, ob t in p liegt .
Ich möchte dem Problem ein Detail hinzufügen, falls es zur Lösung beitragen könnte: ist ein Delaunay- Tetraeder und die Flächen von p sind dreieckig und sowohl in Bezug auf die Ecken von p stark delaunay . Ein Tetraeder ist Delaunay, wenn sich in der Umgebung seiner Scheitelpunkte kein anderer Scheitelpunkt befindet. Ein Gesicht ist stark verzögert, wenn es eine Umgebung gibt, die Scheitelpunkte dieses Gesichts auf seiner Oberfläche, aber keinen anderen Scheitelpunkt auf oder in ihm enthält.
Folgende Zahlen zeigen das gleiche Problem in Raum:
Das ursprüngliche Polygon :
Delaunay-Triangulation von Eckpunkten von :
Ergebnis des Innen- / Außentests über Dreiecken (Schattierte Dreiecke sind innerhalb und Rest sind außerhalb ):
Gewünschtes Ergebnis (Beschneiden außerhalb der Dreiecke) :
Mein ursprüngliches Problem liegt im 3D-Raum, also werden die Dreiecke in den obigen Abbildungen in Tetraeder und das Polygon p in ein beliebiges Polyeder p übersetzt . Ich habe einige Formulierungen dieses Problems herausgefunden:
Formulierung 1
Die einzigen Teile von die außerhalb von p liegen können, sind seine Kanten und dreieckigen Flächen, aber im Allgemeinen kann es ein p geben, das Kanten aller außerhalb von ts auf seiner Oberfläche hat, so dass alternativ auch dieses Problem formuliert werden kann teste, ob für ein Tetraeder t eine Fläche existiert, die außerhalb von p liegt ?
Formulierung 2
Ich habe eine andere mögliche Perspektive in Bezug auf dieses Problem, aber es fehlt mir eine formale Idee:
Wenn geometrisch außerhalb liegt, bleibt es immer auf der äußeren Oberfläche von p haften . Wenn wir also die Konturen (informell die äußere Grenze) C V und C V p berechnen können , so dass und V t , V p sind Sätze von Scheitelpunkten in t , p bzw. dann C wenntinnerhalb vonpliegt.
Ich würde gerne wissen:
- Wie kann ich Formulierung 1 oder Formulierung 2 lösen ?
- Oder gibt es einen völlig anderen Ansatz, um dies zu lösen?
Update:
Mir ist jetzt klar, dass dieses Problem auf das Punkt-in-Polyeder- Problem reduziert werden kann . Da ein außerhalb Tetraeders haben mindestens eine Seite , die außerhalb liegt , p , so dass jeder beliebige Punkt auf dieser Fläche ( mit Ausnahme seiner Ecken, im allgemeinen) liegen immer wird außerhalb p . Daher muss ich für jede Fläche von t einen beliebigen Punkt nehmen und prüfen, ob dieser Punkt außerhalb von p liegt .
Aus einem Punkt in einem Polygonartikel lernte ich den Raycasting-Algorithmus und den Wicklungszahl-Algorithmus kennen . Ray Casting ist für Fälle, in denen der Punkt auf der Oberfläche von p liegt, numerisch nicht stabil . Die numerische Robustheit des Wicklungszahlalgorithmus wurde dort jedoch nicht angesprochen.
Basierend auf dem oben Gesagten scheint mein Kernproblem nun zu sein (bitte schlagen Sie vor, ob es als separate Frage gestellt werden sollte):
Gibt es einen numerisch robusten Algorithmus für das Punkt-in-Polygon- Problem?