Ich habe 3 Eckpunkte, die (V1, V2, V3)
zufällig auf einem regulären Dreiecksnetz ausgewählt wurden. Für diese 3 Eckpunkte habe ich die geodätische Entfernung und den Pfad (unter Verwendung von Dijkstra) zwischen ihnen berechnet und eine dreieckartige Oberfläche wie in der obigen Abbildung gebildet.
Jetzt habe ich die Scheitelpunkte, die in jedem Pfad liegen, und kann geodätische Entfernungen von einem bestimmten Scheitelpunkt berechnen.
Was ich tun möchte, ist, die Eckpunkte oder Dreiecke zu erhalten, die in einem dreieckartigen Bereich liegen. Wie kann ich das machen?
mesh
triangulation
mkocabas
quelle
quelle
Antworten:
Es gibt eine alternative Methode, die auf der Flutfüllung beruht. Ordnen Sie zuerst Ihre Kantendaten in einer Schleife an, in der die Kanten eine Schleife gegen den Uhrzeigersinn bilden. Beginnen Sie dann an einem beliebigen Punkt in der Schleife und wählen Sie Kanten aus, die diesen Punkt verbinden. Verwenden Sie die ausgehende Begrenzungskante und kreuzen Sie sie mit der anderen ausgehenden Kante. Wenn sie in Richtung der Gesichtsnormalen zeigt, muss sie eingefügt werden, wenn nicht, verwerfen Sie sie. Von dieser Kante aus fahren Sie fort, bis Sie eine Grenzkante erreichen. An diesem Punkt beenden Sie die Füllung. Fahren Sie an einem noch zu besuchenden Randkantenscheitelpunkt fort.
quelle
Ich habe bereits die Verwendung von Flood Fill kommentiert und erklärt, wie es besser wäre, da es flexibler ist, aber eine andere mögliche Lösung ist Scanline. (Ich sage möglich, weil es viele Annahmen über Ihre Geometrie macht, aber für den bestimmten gezeigten Satz und viele ähnliche würde es funktionieren.)
Für Ihr Beispiel mit 3 Punkten: Suchen Sie den Schnittpunkt aus dem Segment v1, v2 und der Linie, auf der v3 liegt. (Der Scheitelpunkt links oben in Version 2) Wir nennen diesen Scheitelpunkt v4.
Es wird Scanline genannt, weil Sie (im Bild oben) gleichzeitig die roten und grünen Linien und dann gleichzeitig die roten und blauen Linien nach unten scannen.
Diese Lösung wäre sehr schnell, wenn es ein Indexmuster gibt, was häufig der Fall ist. Andernfalls wäre eine Berechnung erforderlich, um festzustellen, welcher benachbarte Scheitelpunkt auf der Linie liegt.
Lustige Sache ist Scanline, Barycentric Testing (in Dreiecksbegrenzungsrahmen) und Flood Fill sind alle Möglichkeiten, Dreiecke in 3D-Rendering zu zeichnen.
quelle
Ich denke, Sie können einige oberflächengebundene Schwerpunktkoordinaten für jeden Punkt auf der Oberfläche berechnen und sie dann verwenden, um nach innerhalb oder außerhalb des Dreiecks zu suchen.
Ich habe keinen genauen Algorithmus zur Hand, aber ich habe das folgende Papier gefunden, das genau diese Art von Koordinaten zu verarbeiten scheint.
Schwerpunktzentrierte Koordinaten auf Oberflächen
quelle