Ich habe eine Vektorebene mit Millionen von Polygonen, die eine kontinuierliche Abdeckung ermöglichen. Ich muss sie nach ihrer Form klassifizieren. Ich verwende bereits mehrere Formindizes aus der Landschaftsökologie wie Kompaktheit ( 4piA / P ^ 2 ), mittlere Breite ( 2A / P ), Formzahl ( P / sqrt (A) ), diese Antwort habe ich auch bei Berechnung der Rundheit / Kompaktheit von gesehen Polygon?
Mein Problem ist, dass alle diese Metriken nur ein bestimmtes Verhältnis von Fläche und Umfang verwenden. Sogar der fraktale Dimensionsindex verwendet nur Fläche und Umfang ( 2 ln (0,25 P) / ln (A) ). Aber wie kann ich zwei Polygone mit gleicher Fläche und Umfang, aber absolut unterschiedlicher Form unterscheiden? Wie dieses verzweigte Polygon A:
Ich habe versucht, mit der gleichen Fläche und dem gleichen Umfang wie der gebogene Streifen B zu zeichnen. Alle meine bekannten Indizes sind für sie gleich. Aber für mich ist es sehr wichtig, einfache Streifen (einschließlich gebogen wie Neumond) von komplexen verzweigten Formen zu unterscheiden.
Ich zeige das Polygon B absichtlich als gekrümmten Streifen und nicht als geraden Streifen, da mir der Index "Verwandter Kreis" bekannt ist , der gerade längliche Formen erkennt, aber meine Polygone können auch die gleichen Umkreise aufweisen. Auch wenn ich einen konvexen Rumpf konstruiere und ein Flächenverhältnis Apolygon / Akonvex berechne , kann es hier sehr ähnlich sein.
Also, wie kann ich eine klare Unterscheidung verzweigte Polygon A von Polygon B in Vektordaten automatisch? (Das Konvertieren in ein Raster würde eine extrem kleine Zellengröße, einen enormen Datensatz und einen Mangel an Speicher erfordern, daher ist dies nicht möglich.) Gibt es andere Formindizes, die andere Parameter enthalten? Idealerweise würde die Methode nicht nur klar verzweigte Polygone, sondern auch C und D unterscheiden:
Meine einzige Idee ist es, den konvexen Rumpf zu konstruieren, dann das Polygon von seinem konvexen Rumpf zu löschen und die Anzahl der (großen) Teile zu zählen, die er hinterlässt (Löschen von Polygon für Polygon und nicht der gesamten Ebene). Dies könnte die Grenzkomplexität aufzeigen.
Ich begrüße mathematische Lösungen / Algorithmen, die ich später in Python implementieren würde.