🟦 Enveloppe Convexe
Visualiseur interactif d'enveloppe convexe : parcourez pas à pas le balayage de Graham, la marche de Jarvis et Quickhull avec des vérifications de produit vectoriel en direct et une comparaison de complexité.
À propos de l'Enveloppe Convexe
L'enveloppe convexe d'un ensemble de points est le plus petit polygone convexe les contenant tous — de façon équivalente, la forme obtenue en tendant un élastique autour des points les plus extérieurs. Calculer efficacement les enveloppes convexes est un problème fondamental de la géométrie algorithmique avec des applications en détection de collision (l'enveloppe convexe d'un corps rigide est son volume englobant le plus simple), analyse de formes, recherche de chemin, et planification de mouvement de robots. La complexité temporelle optimale dans le pire des cas est O(n log n) pour n points en entrée, atteignable par le balayage de Graham (1972) et plusieurs autres algorithmes ; pour des ensembles de points dont l'enveloppe a h sommets, les algorithmes sensibles à la sortie tels que la marche de Jarvis atteignent O(nh), ce qui est plus rapide quand h est petit.
Ce simulateur implémente et anime trois algorithmes classiques côte à côte. Le balayage de Graham trie tous les points par angle polaire autour du point le plus bas, puis les parcourt à l'aide d'une pile, en écartant tout point créant un virage à droite (produit vectoriel non à gauche). La marche de Jarvis (emballage cadeau) sélectionne de façon répétée le point formant le plus petit angle antihoraire à partir de l'arête actuelle. Quickhull divise récursivement l'ensemble de points en utilisant le point le plus éloigné au-dessus de chaque arête, de façon similaire à l'étape de partition du tri rapide. Vous pouvez cliquer pour ajouter des points, glisser pour les repositionner, et avancer pas à pas dans chaque algorithme pour comparer les états intermédiaires et le nombre d'opérations.
Questions fréquentes
Quelle est la complexité temporelle du balayage de Graham, de la marche de Jarvis et de Quickhull ?
Le balayage de Graham s'exécute en O(n log n) grâce au tri angulaire initial ; le parcours de la pile est en O(n). La marche de Jarvis (emballage cadeau) s'exécute en O(nh), où h est le nombre de sommets de l'enveloppe : dans le pire des cas (tous les points sur l'enveloppe), c'est O(n²), mais pour des ensembles de points typiques avec h = O(log n), c'est O(n log n). Quickhull a un temps moyen de O(n log n) (comme le tri rapide) mais un pire cas de O(n²) lorsque tous les points sont sur l'enveloppe et traités individuellement. L'algorithme de Chan (1996) atteint l'optimal O(n log h) dans tous les cas.
Comment le test du produit vectoriel détermine-t-il les virages à gauche ou à droite ?
Pour trois points A, B, C, on calcule le produit vectoriel 2D (B − A) × (C − A) = (Bx−Ax)(Cy−Ay) − (By−Ay)(Cx−Ax). Une valeur positive signifie que C est à gauche de la ligne dirigée A→B (virage antihoraire), négative signifie à droite (horaire, à écarter dans le balayage de Graham), et zéro signifie colinéaire. Ce test d'orientation en O(1) est la primitive fondamentale de tous les algorithmes d'enveloppe convexe — et de nombreux autres algorithmes de géométrie algorithmique tels que la triangulation de polygones et l'intersection de segments.
Quelle est la borne inférieure pour le calcul de l'enveloppe convexe ?
Le problème de l'enveloppe convexe a une borne inférieure de Ω(n log n) dans le modèle de l'arbre de décision algébrique, prouvée par une réduction du tri : étant donné n nombres x₁, …, xn, on place des points (xᵢ, xᵢ²) sur une parabole — leur enveloppe convexe est l'ensemble entier, renvoyé dans l'ordre trié. Comme le tri nécessite Ω(n log n) comparaisons, tout algorithme résolvant les deux doit aussi prendre Ω(n log n). Cela rend le balayage de Graham et les algorithmes de fusion d'enveloppes asymptotiquement optimaux pour des ensembles de points généraux.
Comment l'enveloppe convexe est-elle utilisée en détection de collision ?
En physique de jeu 2D, l'enveloppe convexe d'un polygone est son emballage convexe minimal. Deux polygones convexes peuvent être testés pour l'intersection à l'aide du théorème de l'axe séparateur (SAT) : s'il existe une ligne séparant les deux enveloppes, elles ne se chevauchent pas — et seulement O(h₁ + h₂) axes séparateurs candidats doivent être testés (un par arête). L'algorithme GJK (Gilbert-Johnson-Keerthi) étend cela à la 3D et gère les objets courbes en calculant la différence de Minkowski, atteignant O(1) itérations en pratique pour des formes simples. SAT et GJK sont tous deux des outils fondamentaux dans Unity, Bullet et d'autres moteurs physiques.
Que se passe-t-il lorsque des points sont colinéaires sur la frontière de l'enveloppe ?
Les points situés sur une arête de l'enveloppe mais qui ne sont pas des sommets (ils sont colinéaires entre deux sommets de l'enveloppe) peuvent être inclus ou exclus selon la variante d'algorithme. Le balayage de Graham standard exclut les points intérieurs colinéaires (il les retire pendant l'étape de déduplication du tri), donnant l'ensemble minimal de sommets. Certaines applications (par exemple le calcul d'aire de polygone) préfèrent inclure tous les points de la frontière. Ce choix affecte h (taille de l'enveloppe), le temps d'exécution, et le comportement du test d'orientation par produit vectoriel (un produit vectoriel nul doit être géré avec soin pour éviter les boucles infinies dans la marche de Jarvis).
Qu'est-ce que l'algorithme de Chan et pourquoi est-il optimal ?
L'algorithme de Chan (Timothy Chan, 1996) atteint un temps de O(n log h), où h est le nombre de sommets de l'enveloppe — c'est optimal car produire h sommets prend un temps Ω(h) et trier n points prend Ω(n log n). L'approche de Chan devine h par phases de doublement (essayer h = 2, 4, 8, …), exécute une mini-marche de Jarvis qui s'arrête après h étapes en utilisant un balayage de Graham précalculé sur n/h groupes de points comme oracles internes. Quand la supposition est égale au véritable h, l'algorithme se termine avec une enveloppe correcte. Chaque phase coûte O(n log h) ; le doublement n'ajoute qu'un facteur constant, donnant un total de O(n log h).
Comment l'enveloppe convexe est-elle utilisée en programmation linéaire ?
En programmation linéaire 2D, la région réalisable définie par m contraintes d'inégalité est un polygone convexe — une enveloppe convexe des points d'intersection des contraintes. La solution optimale d'un programme linéaire se trouve toujours à un sommet du polytope réalisable. La méthode du simplexe parcourt les sommets de ce polytope ; les méthodes de points intérieurs parcourent l'intérieur. En dimensions supérieures (d variables, m contraintes), calculer l'énumération des sommets du polytope réalisable équivaut à calculer une enveloppe convexe en d dimensions — un problème résolu par les algorithmes de double description et beneath-beyond.
Qu'est-ce que l'enveloppe convexe 3D et quels algorithmes la calculent ?
En 3D, l'enveloppe convexe de n points est un polyèdre convexe avec au plus O(n) sommets, arêtes et faces (par la formule d'Euler : V − E + F = 2, et pour les polyèdres convexes F ≤ 2n − 4). Les algorithmes incluent le balayage de Graham 3D (insertion incrémentale), diviser-pour-régner (O(n log n)), et la variante d'emballage cadeau (marche de Jarvis en 3D). L'algorithme QuickHull3D de Barber, Dobkin et Huhdanpaa (1996, bibliothèque qhull) est la norme pratique — utilisé dans ConvexHull de SciPy, MATLAB, et les outils physiques de moteurs de jeu.
Les algorithmes d'enveloppe convexe peuvent-ils gérer des points en double ?
Les points en double (coordonnées identiques) doivent être gérés explicitement ; la plupart des implémentations dédupliquent l'entrée avant d'exécuter l'algorithme d'enveloppe. Dans le balayage de Graham, des points en double produiraient des produits vectoriels nuls causant une ambiguïté dans le tri angulaire. Dans la marche de Jarvis, sélectionner un doublon comme sommet suivant de l'enveloppe pourrait causer une boucle infinie. Une implémentation robuste supprime soit les doublons lors d'un prétraitement en O(n log n), soit utilise une arithmétique exacte avec perturbation (perturbation symbolique / SOS — simulation de simplicité) pour gérer de façon cohérente toutes les configurations dégénérées.
Quel est le rapport entre l'enveloppe convexe et les diagrammes de Voronoï ?
Il existe une dualité classique : le diagramme de Voronoï 2D de n points est équivalent à la projection de l'enveloppe convexe 3D des mêmes points relevés sur le paraboloïde z = x² + y². Plus précisément, on relève chaque point (xᵢ, yᵢ) vers (xᵢ, yᵢ, xᵢ² + yᵢ²), on calcule l'enveloppe convexe 3D, puis on projette les faces inférieures de l'enveloppe de retour en 2D — le résultat est la triangulation de Delaunay, et son graphe dual est le diagramme de Voronoï. Cela signifie que tout algorithme d'enveloppe convexe 3D en O(n log n) donne immédiatement un algorithme de Voronoï en O(n log n), correspondant à l'algorithme classique de balayage de Fortune.
Comment l'enveloppe convexe est-elle appliquée en apprentissage automatique ?
Dans les machines à vecteurs de support (SVM), le classificateur à marge maximale entre deux classes de points correspond à trouver les points les plus proches sur les enveloppes convexes des deux classes — le dual de la « boule englobante minimale ». Les vecteurs de support du SVM sont exactement les points de l'enveloppe les plus proches de l'hyperplan séparateur. Les enveloppes convexes apparaissent aussi en profondeur de données (profondeur de Tukey, l'algorithme « d'épluchage d'oignon »), en détection d'anomalies (les points de données hors de l'enveloppe sont des valeurs aberrantes), et en optimisation multi-objectifs où la frontière de Pareto est une portion de l'enveloppe convexe des vecteurs objectifs réalisables.
Calculez le plus petit polygone convexe englobant un ensemble de points avec le balayage de Graham, la marche de Jarvis ou Quickhull — animé pas à pas, avec détection en direct des virages par produit vectoriel et comparaison du nombre d'opérations.
3D · Moteur de rendu Three.js / WebGL · Cible 60 FPS · fonctionne entièrement côté client, sans installation