Ich habe derzeit einen Vektor von Punkten
%Vor%wo ich zuvor die Eckpunkte eines gegebenen Polygons gespeichert habe. Angesichts dessen weiß ich mit Sicherheit, dass die Punkte ein einfaches Polygon bilden, das keine sich selbst schneidenden Kanten enthält. Beim Speichern dieser Scheitelpunkte wurde die Reihenfolge, in der sie miteinander verbunden sind, jedoch nicht beibehalten.
Ich habe jetzt eine Funktion, die einen Punktvektor verbindet und eine geschlossene Figur zeichnet. Allerdings muss ich dieser Funktion die Reihenfolge der Punkte in der Reihenfolge geben, in der sie verbunden werden müssen. Kann jemand vorschlagen, dass ich diese Punkte in der richtigen Reihenfolge sortieren könnte? Sie bilden ein sehr einfaches konkaves Polygon, keine konvexe Hülle. Ein Algorithmus, um den Mittelpunkt unter allen (7) Punkten zu finden, wäre ebenfalls hilfreich:)
Es gibt keine eindeutige Lösung, daher gibt es keinen einfachen Algorithmus. Sie könnten versuchen, Ihre Intuition irgendwie nachzuahmen.
Beide Methoden funktionieren im Allgemeinen nicht wirklich, sie garantieren nicht einmal Kreuzungen zu vermeiden. Sie können versuchen, dies durch Rückverfolgung zu beheben, wenn Sie einen offensichtlichen Fehler (z. B. eine Kreuzung) feststellen und dann zum letzten Entscheidungspunkt zurückgehen und stattdessen den "zweitbesten" Ansatz wählen, ....
Aber da die Lösung nicht einzigartig ist, erwarte nicht zu viel von diesen Heuristiken.
Der Durchschnittspunkt für die Scheitelpunkte ist einfach zu berechnen. Fügen Sie einfach alle Punkte zusammen und teilen Sie durch die Anzahl der Punkte, die Sie gerade hinzugefügt haben, dies ist der Durchschnitt. Was dich wahrscheinlich mehr interessiert, ist der Mittelpunkt im Sinne von "Schwerpunkt", siehe unten.
Um den Massenschwerpunkt zu bestimmen, müssen Sie zuerst die Form definieren. Das bedeutet, dass Sie etwas wie Schritt 1 tun müssen.
Eine einfach zu implementierende Methode zur Berechnung des Mittelpunkts für das Polygon ist.
Eine gegebene Menge von Punkten kann im Allgemeinen auf viele Arten verbunden werden, um ein sich nicht selbst schneidendes Polygon zu bilden. Sie können Pech haben, es sei denn, Sie haben mehr Informationen über die Arten von Polygonen, die die Punkte darstellen könnten.
Tags und Links algorithm c++ geometry computational-geometry