Gegeben eine Reihe von Punkten S (x, y, z)
. Wie finde ich die convex hull
dieser Punkte?So finden Sie konvexe Hülle in einem dreidimensionalen Raum
Ich habe versucht, den Algorithmus von here zu verstehen, konnte aber nicht viel bekommen.
Dort heißt es:
Erstes Projekt alle Punkte auf der xy-Ebene und eine Kante finden, die auf jeden Fall auf dem Rumpf ist durch den Punkt Auswahl mit höchsten Y-Koordinate und dann eine Iteration zu tun Geschenkverpackung, um den anderen Endpunkt der Kante zu bestimmen. Dies ist der erste Teil des unvollständigen Rumpfes. Wir bauen dann den Rumpf iterativ. Betrachte diese erste Kante. Finde nun einen anderen Punkt, um die erste dreieckige Fläche des Rumpfes zu bilden. Wir tun dies, indem wir den Punkt so auswählen, dass alle anderen Punkte rechts von diesem Dreieck liegen, wenn wir ihn angemessen betrachten (genau wie beim Geschenkumschlag-Algorithmus, bei dem wir eine Kante so gewählt haben, dass alle anderen Punkte rechts davon liegen diese Kante). Jetzt gibt es drei Kanten im Rumpf; Um fortzufahren, wählen wir einen von ihnen willkürlich aus und scannen erneut durch alle Punkte, um einen anderen Punkt zu finden, um ein neues Dreieck mit dieser Kante zu bauen, und wiederholen dies, bis keine Kanten mehr übrig sind. (Wenn wir eine neue dreieckige Fläche erstellen, fügen wir dem Pool zwei Kanten hinzu; wir müssen jedoch zuerst prüfen, ob sie bereits zur Hülle hinzugefügt wurden, in welchem Fall wir sie ignorieren.) Es gibt O (n) Flächen, und jede Iteration benötigt O (n) Zeit, da wir alle verbleibenden Punkte scannen müssen, was O (n2) ergibt.
Kann jemand es klarer erklären oder einen einfacheren alternativen Ansatz vorschlagen.
verfügbar Bitte hinterlassen Sie einen Kommentar, wenn etwas unklar ist. – anon
Es scheint, das OP sucht Hilfe für 3D-Rümpfe, aber Ihre (nett!) Beschreibungen sind für 2D-Rümpfe ... –
Nun, wenn Sie 2D verstehen, 3D ist eine sehr einfache Verallgemeinerung;) – anon