Estoy interesado en la complejidad de decidir si un polígono no simple dado es casi simple, en cualquiera de los dos sentidos formales diferentes: débilmente simple o no autocruzamiento . Dado que estos términos no son ampliamente conocidos, permítanme comenzar con algunas definiciones.
Un polígono es el ciclo cerrado de segmentos de línea que conectan una secuencia finita de puntos en el plano. Los puntos se llaman vértices del polígono, y los segmentos se llaman sus bordes . Podemos especificar cualquier polígono simplemente enumerando sus vértices en orden.
Un polígono es sencilla si todos los vértices son distintos y los bordes se cruzan solamente en sus extremos. De manera equivalente, un polígono es simple si es homeomorfo a un círculo y cada borde tiene una longitud positiva. Sin embargo, en general, los vértices y los bordes de un polígono pueden cruzarse arbitrariamente o incluso coincidir. 1
Considere dos rutas poligonales y cuya intersección es una subruta común de ambas (posiblemente un solo punto). Decimos que y cruz si sus puntos finales se alternan en el límite de una zona común de la subtrazado . Un polígono se cruza automáticamente si tiene dos subrutas cruzadas y, de lo contrario, no se cruza . 2
Un polígono es débilmente simple si es el límite de una secuencia de polígonos simples, o de manera equivalente, si hay una perturbación arbitrariamente pequeña de los vértices que hace que el polígono sea simple. Cada polígono débilmente simple no se cruza a sí mismo; sin embargo, algunos polígonos que no se cruzan no son débilmente simples.
Por ejemplo, considere los seis puntos muestran a continuación.
El polígono es simple; Ver la figura de la izquierda.
El polígono es débilmente simple; la figura del medio muestra un polígono simple cercano. Sin embargo, este polígono no es simple, porque visita tres veces.
El polígono se sí mismo, porque los subrutas y cruzan. Vea la figura correcta para un poco de intuición.b p q z y q p a
Por último, el polígono (que serpentea dos veces alrededor del polígono medio) no es auto-cruce, pero es no sencilla débilmente. Intuitivamente, el número de giro de este polígono es , mientras que el número de giro de cualquier polígono simple debe ser . (¡Una prueba formal requiere un análisis de casos, en parte porque el número de giro no está realmente bien definido para polígonos con ángulos !)± 2 ± 1 0 ∘
Actualización (13 de septiembre): en la figura a continuación, el polígono no se cruza automáticamente y tiene el número de giro 1 , pero no es débilmente simple. Podría decirse que el polígono tiene varios subwalks no simples de cruce , pero no tiene subpaths simples de cruce . (Digo "posiblemente" porque no está claro cómo definir cuándo se cruzan dos paseos no simples).
Entonces, finalmente, aquí están mis preguntas reales:
¿Qué tan rápido podemos determinar si un polígono dado no se cruza a sí mismo?
¿Qué tan rápido podemos determinar si un polígono dado es débilmente simple?
El primer problema se puede resolver en tiempo siguiente manera. Como hay vértices, hay subárboles de vértice a vértice; podemos probar si algún subpaso en particular es simple en el tiempo (por fuerza bruta). Para cada par de subrutas simples de vértice a vértice, podemos probar si se cruzan en el tiempo . Pero este no puede ser el mejor algoritmo posible.n O ( n 2 ) O ( n 2 ) O ( n )
No sé si el segundo problema se puede resolver en tiempo polinómico. Creo que puedo calcular rápidamente un número de giro bien definido para cualquier polígono no simple (a menos que la unión de los bordes del polígono sea solo una ruta, en cuyo caso el polígono debe ser débilmente simple); mira mi respuesta a continuación. Sin embargo, el nuevo polígono de ejemplo anterior implica que el número 1 sin autocruzamiento y giro no implica débilmente simple.
Podemos determinar si un polígono dado es sencilla en tiempo comprobando cada par de bordes de intersección, o en tiempo utilizando un algoritmo de sweepline estándar, o incluso en tiempo usando el algoritmo de triangulación de Chazelle. (Si el polígono de entrada no es simple, cualquier algoritmo de triangulación arrojará una excepción, un bucle infinito o producirá una salida que no sea una triangulación válida). Pero ninguno de estos algoritmos resuelve los problemas que estoy preguntando. O ( n log n ) O ( n )
1 Branko Grünbaum. Polígonos: Meister tenía razón y Poinsot estaba equivocado pero prevaleció . Beiträge zur Algebra und Geometrie 53 (1): 57–71, 2012.
2 Ver, por ejemplo: Erik D. Demaine y Joseph O'Rourke. Algoritmos Geométricos Plegables: Vínculos, Origami, Poliedros . Cambridge University Press, 2007.