8 Stimmen

Erkennung beliebiger Formen

Grüße,

Wir haben eine Reihe von Punkten, die einen Schnittpunkt eines dreidimensionalen Körpers mit einer horizontalen Ebene darstellen. Wir möchten die 2D-Formen erkennen, die die Querschnitte des Körpers darstellen. Es kann eine oder mehrere solcher Formen geben. Wir haben Artikel gefunden, in denen beschrieben wird, wie man Bilder mit der Hough-Transformation bearbeitet, aber wir haben möglicherweise Tausende solcher Punkte, so dass die Umwandlung in ein Bild sehr aufwendig ist. Gibt es einen einfacheren Weg, dies zu tun?

Dankeschön

7voto

ryanm Punkte 2879

Bei der Konvertierung Ihres 3D-Modells in einen Satz von Punkten haben Sie die Informationen weggeworfen, die zum Finden der Schnittformen erforderlich sind. Gehen Sie den Graphen der Kante-Fläche-Konnektivität Ihres 3D-Modells durch, um die Schnittpunkte zwischen Kante und Ebene in der richtigen Reihenfolge zu finden.

Angenommen, Sie haben die Topographie des 3D-Modells (eine gewisse Anzahl von Eckpunkten, Kanten zwischen Eckpunkten, durch Kanten begrenzte Flächen) oder können sie konstruieren:

  1. Iterieren Sie durch die Kantenliste, bis Sie eine finden, die die Testebene schneidet, und fügen Sie sie zu einer Liste hinzu
  2. Wählen Sie eine der Flächen, die diese Kante teilen
  3. Iterieren Sie durch die anderen Kanten dieser Fläche, um den nächsten Schnittpunkt zu finden, und fügen Sie ihn der Liste hinzu
  4. Wiederholen Sie den Vorgang für die andere Fläche an dieser Kante, bis Sie wieder bei der Anfangskante angelangt sind.

Sie haben eine geordnete Liste von Kanten erstellt, die die Ebene schneiden - es ist trivial, jede Kante linear zu interpolieren, um die Schnittpunkte in der Reihenfolge zu finden, die die Schnittpunktform bilden. Beachten Sie, dass dieser Prozess voraussetzt, dass die Flächenpolygone konvex sind, was sie in Ihrem Fall sind. Wenn Ihr Volumen konkav ist, haben Sie mehrere diskrete Schnittformen, und Sie müssen diesen Prozess wiederholen, bis alle Kanten untersucht worden sind.

Es gibt einen Java-Code, der dies tut aquí und eine ziemlich raffinierte Testanwendung aquí .

Kontrollen:

  • 1-5 zum Ändern des Testvolumens
  • q und w zur Änderung der Anzahl der Abfrageebenen
  • a, s und d, um die Scangeschwindigkeit der Abfrageebenen zu ändern
  • Ziehen mit der linken Maustaste, um die Ansicht zu drehen
  • Rechtsklick-Ziehen zum Drehen der Abfrageebenen

0voto

patcas.csaba Punkte 3

Der Algorithmus/Code aus der akzeptierten Antwort funktioniert nicht für komplexe Sonderfälle, wenn die Ebene einige Scheitelpunkte einer konkaven Fläche schneidet. In diesem Fall könnte das gierige Durchlaufen des Graphen der Kanten-Flächen-Konnektivität einige der Polygone vor der Zeit schließen.

Da die Ebene einen Scheitelpunkt schneidet, gibt es beim Durchlaufen des Graphen an einem Punkt zwei Möglichkeiten für die nächste Kante, und es kommt darauf an, welche gewählt wird.

Eine mögliche Lösung besteht darin, einen Algorithmus zur Durchquerung des Graphen zu implementieren (z. B. Tiefensuche) und die längste Schleife zu wählen, die die Anfangskante enthält.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X