Stellen Sie sich vor, Sie haben ein Polygon, das durch einen Satz von Koordinaten und dessen Schwerpunkt bei . Sie können das Polygon als gleichmäßige Verteilung mit einer polygonalen Grenze behandeln.
Ich bin nach einer Methode, die die Kovarianzmatrix eines Polygons findet .
Ich vermute, dass die Kovarianzmatrix eines Polygons eng mit dem zweiten Moment der Fläche zusammenhängt , aber ob sie gleichwertig sind, weiß ich nicht. Die Formeln in dem von mir verlinkten Wikipedia-Artikel scheinen (eine Vermutung hier ist mir aus dem Artikel nicht besonders klar) sich eher auf die Rotationsträgheit um die x-, y- und z-Achse als auf die Hauptachsen des Polygons zu beziehen.
(Wenn mich übrigens jemand darauf hinweisen kann, wie man die Hauptachsen eines Polygons berechnet, wäre das auch für mich nützlich.)
Es ist verlockend, nur PCA an den Koordinaten durchzuführen , aber dabei tritt das Problem auf, dass die Koordinaten nicht unbedingt gleichmäßig über das Polygon verteilt sind und daher nicht für die Dichte des Polygons repräsentativ sind. Ein extremes Beispiel ist der Umriss von North Dakota, dessen Polygon durch eine große Anzahl von Punkten definiert wird, die dem Roten Fluss folgen, sowie nur zwei weitere Punkte, die den westlichen Rand des Staates definieren.
quelle
Antworten:
Lassen Sie uns zuerst eine Analyse durchführen.
Angenommen, innerhalb des Polygons seine Wahrscheinlichkeitsdichte die proportionale Funktion Dann ist die Proportionalitätskonstante die Umkehrung des Integrals von über dem Polygon.P p(x,y). p
Der Schwerpunkt des Polygons ist der Punkt der Durchschnittskoordinaten, der als erste Momente berechnet wird. Der erste ist
Der Trägheitstensor kann als die symmetrische Anordnung von zweiten Momenten dargestellt werden, die nach der Übersetzung des Polygons berechnet wird, um seinen Schwerpunkt auf den Ursprung zu setzen, dh die Matrix der zentralen zweiten Momente
wobei von bis bis reichen Der Tensor selbst - auch bekannt als Kovarianzmatrix - ist(k,l) (2,0) (1,1) (0,2).
Eine PCA von ergibt die Hauptachsen von Dies sind die Einheitseigenvektoren, die durch ihre Eigenwerte skaliert werden.I(P) P:
Als nächstes wollen wir herausfinden, wie die Berechnungen durchgeführt werden. Da das Polygon als eine Folge von Eckpunkten dargestellt wird, die seine orientierte Grenze es natürlich, es aufzurufen∂P,
Zum Beispiel können wir mit und konstanter ( dh einheitlicher) Dichte (durch Inspektion) eine der vielen auswählen Lösungen wiedω=xkyldxdy p, ω(x,y)=−1l+1xkyl+1dx.
Der Punkt dabei ist, dass das Konturintegral den Liniensegmenten folgt, die durch die Folge von Eckpunkten bestimmt werden. Jedes Liniensegment von Vertex zu Vertex kann durch eine reelle Variable im Formular parametrisiert werdenu v t
Dabei ist die Einheitsnormalrichtung von nachDie Werte von reichen daher von bis Unter dieser Parametrisierung sind und lineare Funktionen von und und sind lineare Funktionen von Somit wird der Integrand des Konturintegrals über jeder Kante eine Polynomfunktion von die leicht für kleine und ausgewertet werden kannw∝v−u u v. t 0 |v−u|. x y t dx dy dt. t, k l.
Die Implementierung dieser Analyse ist so einfach wie die Codierung ihrer Komponenten. Auf der untersten Ebene benötigen wir eine Funktion, um eine Polynom-Einform über ein Liniensegment zu integrieren. Übergeordnete Funktionen aggregieren diese, um die rohen und zentralen Momente zu berechnen, um den Schwerpunkt und den Trägheitstensor zu erhalten, und schließlich können wir diesen Tensor bearbeiten, um die Hauptachsen (die seine skalierten Eigenvektoren sind) zu finden. Der folgende
R
Code führt diese Arbeit aus. Es erhebt keinen Anspruch auf Effizienz: Es soll nur die praktische Anwendung der vorstehenden Analyse veranschaulichen. Jede Funktion ist unkompliziert und die Namenskonventionen entsprechen denen der Analyse.Der Code enthält eine Prozedur zum Generieren gültiger geschlossener, einfach verbundener, sich nicht selbst schneidender Polygone (durch zufälliges Verformen von Punkten entlang eines Kreises und Einbeziehen des Startscheitelpunkts als Endpunkt, um eine geschlossene Schleife zu erstellen). Im Folgenden finden Sie einige Anweisungen zum Zeichnen des Polygons, Anzeigen seiner Eckpunkte, Angrenzen an das Schwerpunktzentrum und Zeichnen der Hauptachsen in Rot (am größten) und Blau (am kleinsten), wodurch ein polygonzentriertes positiv orientiertes Koordinatensystem erstellt wird.
quelle
Edit: Habe nicht bemerkt, dass whuber schon geantwortet hat. Ich werde dies als Beispiel für eine andere (vielleicht weniger elegante) Herangehensweise an das Problem belassen.
Die Kovarianzmatrix
Let auf einem Polygon eine beliebige Stelle aus der Gleichverteilung mit Bereich . Die Kovarianzmatrix lautet:(X,Y) P A
wobei die Varianz von , die Varianz von ist und die Kovarianz zwischen und . Dies setzt einen Mittelwert von Null voraus, da sich der Massenschwerpunkt des Polygons am Ursprung befindet. Die Gleichverteilung weist jedem Punkt in eine konstante Wahrscheinlichkeitsdichte zu , also:CXX=E[X2] X CYY=E[Y2] Y CXY=E[XY] X Y 1A P
Triangulation
Anstatt zu versuchen, eine komplizierte Region wie direkt zu integrieren , können wir das Problem vereinfachen, indem wir in dreieckige Unterregionen unterteilen:P P n
In Ihrem Beispiel sieht eine mögliche Partitionierung folgendermaßen aus:
Es gibt verschiedene Möglichkeiten, eine Triangulation zu erzeugen (siehe hier ). Sie können beispielsweise die Delaunay-Triangulation der Scheitelpunkte berechnen und dann Kanten verwerfen, die außerhalb von (da diese wie im Beispiel möglicherweise nicht konvex sind ).P
Integrale über können dann in Summen von Integralen über den Dreiecken aufgeteilt werden:P
Ein Dreieck hat schöne, einfache Grenzen, sodass diese Integrale leichter zu bewerten sind.
Über Dreiecke integrieren
Es gibt verschiedene Möglichkeiten, über Dreiecke zu integrieren. In diesem Fall habe ich einen Trick verwendet , bei dem ein Dreieck dem Einheitsquadrat zugeordnet wird. Die Umwandlung in baryzentrische Koordinaten könnte eine bessere Option sein.
Hier sind Lösungen für die obigen Integrale für ein beliebiges Dreieck das durch Eckpunkte . Lassen:T (x1,y1),(x2,y2),(x3,y3)
Dann:
Alles zusammenfügen
Lassen und die x / y - Koordinaten der Eckpunkte für jedes Dreieck enthalten , wie oben. Stecken Sie in für jedes Dreieck und beachten Sie, dass sich die Flächenbegriffe aufheben. Dies ergibt die Lösung:vix viy Ti (3) (2)
Hauptachsen
Die Hauptachsen sind wie bei PCA durch die Eigenvektoren der Kovarianzmatrix . Im Gegensatz zu PCA haben wir einen analytischen Ausdruck für , anstatt ihn aus abgetasteten Datenpunkten schätzen zu müssen. Beachten Sie, dass die Eckpunkte selbst keine repräsentative Stichprobe aus der gleichmäßigen Verteilung auf , so dass man nicht einfach die Stichproben-Kovarianzmatrix der Eckpunkte nehmen kann. Aber, * * ist eine relativ einfache Funktion der Eckpunkt, wie in zu sehen .C C P C (4)
quelle