Ich habe ein Problem mit den Sortieralgorithmen für eine 3D-Drucker-Software. Ich erhalte die xyz-Daten der Schichten einer gegebenen .stl-Datei als Vektor mit drei Spalten und n Zeilen, wobei n die Anzahl der Punkte für jede Schicht ist.Sortieralgorithmus für Mesh-Slicing
So ist der Code für den Vektor wie folgt aussieht:
x=matrix[n][0];
y=matrix[n][1];
z=matrix[n][2];
So Matrix mein Vektor ist, alle Koordinaten für alle Punkte in dem Gitter enthalten.
Wenn ich die Koordinaten der Punkte ausdrucke bekomme ich eine unsortierte Liste. Die folgende Liste zeigt also die Punkte der ersten Schicht/Scheibe eines Würfels mit den Abmessungen 10x10x10mm.
X=-5.000000, Y=2.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=-5.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000
Also das Ergebnis davon ist in dieser Figur gezeigt.
Mein erster Ansatz war es, die Punkte zu sortieren, aber das Ergebnis ist weit weg von dem, was ich haben müssen.
Die sortierte Liste sieht wie folgt aus
X=5.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=-5.000000, Y=5.000000, Z=-2.000000
X=-5.000000, Y=2.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000
die einzige Idee, wie ich die Punkte sortieren könnte, ist im ersten Quadranten eines kartesischen Koordinatensystem und dann zu bewegen, um den folgenden Quadranten zu starten. Während ich Schicht für Schicht rechne, kann der Z-Koodrinat ignoriert werden. Aber ich weiß nicht, wie ich den Code starten soll. Hat jemand einen Tipp für mich?
Was ich erreichen will, ist die Liste der Punkte in der folgenden Art und Weise zu sortieren:
X=-5.000000, Y=5.000000, Z=-2.000000
X=-5.000000, Y=2.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000
X=-5.000000, Y=-5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=-2.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=-5.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=-2.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
X=5.000000, Y=5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
X=2.000000, Y=5.000000, Z=-2.000000
Sie müssen die Konnektivität Ihrer Punkte kennen, daran ist kein Weg vorbei. Wenn Sie beispielsweise wissen, dass Ihre Punkte immer eine konvexe Menge definieren (wie Ihr Würfel), dann würde [das Auffinden der konvexen Hülle] (https://en.wikipedia.org/wiki/Graham_scan) der Scheibe Ihnen erlauben, dies wiederherzustellen Informationen, sonst bist du geschraubt. – BeyelerStudios