Ich interessiere mich für die Komplexität der Entscheidung, ob ein bestimmtes nicht einfaches Polygon fast einfach ist, und zwar in einer von zwei verschiedenen formalen Richtungen: schwach einfach oder nicht selbstüberschreitend . Da diese Begriffe nicht allgemein bekannt sind, möchte ich mit einigen Definitionen beginnen.
Ein Polygon ist der geschlossene Kreis von Liniensegmenten, die eine endliche Folge von Punkten in der Ebene verbinden. Die Punkte heißen die Eckpunkte des Polygons, und die Segmente heißen seine Kanten . Wir können jedes Polygon angeben, indem wir seine Eckpunkte in der richtigen Reihenfolge auflisten.p i p i + 1 mod n
Ein Polygon ist einfach, wenn alle Eckpunkte verschieden sind und sich Kanten nur an ihren Endpunkten schneiden. Entsprechend ist ein Polygon einfach, wenn es zu einem Kreis homöomorph ist und jede Kante eine positive Länge hat. Im Allgemeinen können sich die Eckpunkte und Kanten eines Polygons jedoch willkürlich schneiden oder sogar zusammenfallen. 1
Betrachten Sie zwei polygonale Pfade und deren Schnittpunkt ein gemeinsamer Unterpfad von beiden ist (möglicherweise ein einzelner Punkt). Wir sagen, dass sich und kreuzen, wenn sich ihre Endpunkte an der Grenze einer Nachbarschaft des gemeinsamen Unterpfads abwechseln . Ein Polygon kreuzt sich selbst, wenn es zwei sich kreuzende Unterpfade hat und sich ansonsten nicht selbst kreuzt . 2B A B A ≤ B
Ein Polygon ist schwach einfach, wenn es die Grenze einer Folge einfacher Polygone ist, oder gleichwertig, wenn es eine willkürlich kleine Störung der Eckpunkte gibt, die das Polygon einfach macht. Jedes schwach einfache Polygon ist nicht selbstüberschreitend; Einige sich nicht selbst kreuzende Polygone sind jedoch nicht schwach einfach.
Betrachten Sie beispielsweise die unten gezeigten sechs Punkte .
Das Polygon ist einfach; siehe die linke Abbildung.
Das Polygon ist schwach einfach; Die mittlere Abbildung zeigt ein einfaches Polygon in der Nähe. Dieses Polygon ist jedoch nicht einfach, da es dreimal besucht.
Das Polygon sich selbst, weil sich die Unterpfade und kreuzen. Sehen Sie die rechte Abbildung für etwas Intuition.b p q z Y q p a
Schließlich ist das Polygon (das sich zweimal um das mittlere Polygon windet) nicht selbst kreuzend, aber es ist nicht schwach einfach. Intuitiv ist die Umdrehungszahl dieses Polygons , während die Umdrehungszahl jedes einfachen Polygons . (Ein formaler Beweis erfordert einige Fallanalysen, zum Teil, weil die Umdrehungszahl für Polygone mit Winkeln von nicht genau definiert ist !)± 2 ± 1 0 ∘
Update (13. September): In der folgenden Abbildung ist das Polygon nicht selbstkreuzend und hat die Nummer 1 , ist aber nicht ganz einfach. Das Polygon hat vermutlich mehrere sich kreuzende, nicht einfache Unterwege , aber keine sich kreuzenden, einfachen Unterwege . (Ich sage "wohl", weil es unklar ist, wie man definiert, wenn sich zwei nicht einfache Wege kreuzen!)
Zum Schluss hier meine eigentlichen Fragen:
Wie schnell können wir feststellen, ob ein bestimmtes Polygon sich nicht selbst kreuzt?
Wie schnell können wir feststellen, ob ein bestimmtes Polygon schwach einfach ist?
Das erste Problem kann wie folgt in gelöst werden. Da es Vertices gibt, gibt es Vertex-to-Vertex-Unterpfade; Wir können testen, ob ein bestimmter Unterpfad in der Zeit einfach ist (durch rohe Gewalt). Für jedes Paar einfacher Vertex-zu-Vertex-Unterpfade können wir testen, ob sie sich in -Zeit kreuzen . Dies kann jedoch nicht der bestmögliche Algorithmus sein.n O ( n 2 ) O ( n 2 ) O ( n )
Ich weiß nicht, ob das zweite Problem in Polynomzeit gelöst werden kann. Ich denke, ich kann für jedes nicht einfache Polygon schnell eine genau definierte Abbiegezahl berechnen (es sei denn, die Vereinigung der Polygonkanten ist nur ein Pfad. In diesem Fall muss das Polygon schwach einfach sein). Siehe meine Antwort unten. Das obige neue Beispielpolygon impliziert jedoch, dass Nicht-Selbstkreuzung und Wenden Nummer 1 nicht schwach einfach implizieren.
Wir können feststellen , ob ein bestimmtes Polygon ist einfach in Zeit durch jedes Paar von Kanten für Schnittprüfung oder in Zeit , um eine Standard - sweepline Algorithmus, oder sogar in Zeit mit Chazelles Triangulationsalgorithmus. (Wenn das Eingabepolygon nicht einfach ist, löst jeder Triangulationsalgorithmus entweder eine Ausnahme, eine Endlosschleife oder eine Ausgabe aus, die keine gültige Triangulation ist.) Keiner dieser Algorithmen löst jedoch die von mir gestellten Probleme. O ( n log n )
1 Branko Grünbaum. Polygone: Meister hatte Recht und Poinsot hatte Unrecht, setzte sich aber durch . Beiträge zur Algebra und Geometrie 53 (1): 57–71, 2012.
2 Siehe zum Beispiel: Erik D. Demaine und Joseph O'Rourke. Geometrische Faltungsalgorithmen: Verknüpfungen, Origami, Polyeder . Cambridge University Press, 2007.