Je m'intéresse à la complexité de décider si un polygone non simple donné est presque simple, dans l'un ou l'autre de deux sens formels différents: faiblement simple ou non auto-croisant . Étant donné que ces termes ne sont pas largement connus, permettez-moi de commencer par quelques définitions.
Un polygone est le cycle fermé de segments de ligne reliant une séquence finie de points dans le plan. Les points sont appelés les sommets du polygone, et les segments sont appelés ses arêtes . Nous pouvons spécifier n'importe quel polygone en listant simplement ses sommets dans l'ordre.
Un polygone est simple si tous les sommets sont distincts et si les arêtes ne se coupent qu'à leurs extrémités. De manière équivalente, un polygone est simple s'il est homéomorphe à un cercle et que chaque arête a une longueur positive. En général, cependant, les sommets et les bords d'un polygone peuvent se croiser arbitrairement, voire coïncider. 1
Considérons deux chemins polygonaux et dont l'intersection est un sous-chemin commun des deux (éventuellement un seul point). Nous disons que et croix si leurs points d' extrémité autre à la limite d'un quartier de la commune subpath . Un polygone est auto-croisant s'il a deux sous- chemins de croisement et non auto-traversant sinon. 2
Un polygone est faiblement simple s'il est la limite d'une séquence de polygones simples, ou de manière équivalente, s'il existe une perturbation arbitrairement petite des sommets qui rend le polygone simple. Chaque polygone faiblement simple ne se traverse pas automatiquement; cependant, certains polygones non auto-croisants ne sont pas très simples.
Par exemple, considérons les six points indiqués ci-dessous.
Le polygone est simple; voir la figure de gauche.
Le polygone est faiblement simple; la figure du milieu montre un polygone simple à proximité. Cependant, ce polygone n'est pas simple, car il visite trois fois.
Le polygone est auto-croisant, car les sous-chemins et croisent. Voir la bonne figure pour une certaine intuition.b p q z y q p a
Enfin, le polygone (qui s'enroule deux fois autour du polygone du milieu) n'est pas auto-traversant, mais il n'est pas faiblement simple. Intuitivement, le nombre de tours de ce polygone est , tandis que le nombre de tours de tout polygone simple doit être . (Une preuve formelle nécessite une analyse de cas, en partie parce que le nombre de tours n'est pas réellement bien défini pour les polygones avec des angles de !)± 1 0 ∘
Mise à jour (13 septembre): Dans la figure ci-dessous, le polygone n'est pas auto-traversant et a le virage numéro 1 , mais ce n'est pas faiblement simple. Le polygone a sans doute plusieurs sous-passerelles non simples qui traversent , mais il n'a pas de sous-chemins simples qui traversent . (Je dis "sans doute" car on ne sait pas comment définir quand deux promenades non simples se croisent!)
Alors enfin, voici mes vraies questions:
Combien de temps peut-on déterminer si un polygone donné ne se traverse pas?
Combien de temps peut-on déterminer si un polygone donné est faiblement simple?
Le premier problème peut être résolu en temps comme suit. Puisqu'il y a sommets, il y a sous-chemins de sommet à sommet; nous pouvons tester si un sous-chemin particulier est simple en temps (par force brute). Pour chaque paire de sous-chemins simples de sommet à sommet, nous pouvons tester s'ils se croisent en temps . Mais cela ne peut pas être le meilleur algorithme possible.n O ( n 2 ) O ( n 2O ( n )
Je ne sais pas si le deuxième problème peut être résolu en temps polynomial. Je pense que je peux calculer rapidement un nombre de virages bien défini pour tout polygone non simple (à moins que l'union des bords du polygone ne soit qu'un chemin, auquel cas le polygone doit être faiblement simple); voir ma réponse ci-dessous. Cependant, le nouvel exemple de polygone ci-dessus implique que le non-croisement et le virage numéro 1 n'impliquent pas une simplicité faible.
Nous pouvons déterminer si un polygone donné est simple , en temps en vérifiant chaque paire de bords pour intersection, ou temps en utilisant un algorithme standard de sweepline, ou même dans temps en utilisant l'algorithme de triangulation de Chazelle. (Si le polygone d'entrée n'est pas simple, tout algorithme de triangulation lèvera une exception, une boucle infinie ou produira une sortie qui n'est pas une triangulation valide.) Mais aucun de ces algorithmes ne résout les problèmes que je pose. O ( n log n ) O ( n )
1 Branko Grünbaum. Polygones: Meister avait raison et Poinsot avait tort mais a prévalu . Beiträge zur Algebra und Geometrie 53 (1): 57–71, 2012.
2 Voir, par exemple: Erik D. Demaine et Joseph O'Rourke. Algorithmes de pliage géométriques: liaisons, origami, polyèdres . Cambridge University Press, 2007.