Projet : PRISME

previous up next contents
Précédent : Géométrie Algorithmique Remonter : Fondements scientifiques Suivant : Domaines d'applications


Sous-sections


   
Calcul géométrique

Mots clés : robustesse, dégénérescences, arithmétique, filtres, régularisation, programmation des algorithmes géométriques, recherche expérimentale .

Résumé :

Le calcul géométrique demande, au-delà de la conception et de l'analyse des algorithmes, de résoudre les questions délicates posées par leur programmation. Il s'agit tout d'abord de savoir représenter et organiser les structures géométriques de façon cohérente et efficace. Il s'agit également de garantir un calcul fiable, ce qui est particulièrement délicat avec les objets géométriques dont la représentation est à la fois symbolique et numérique. [Hof89] Ces problèmes sont un des principaux obstacles à l'utilisation des résultats de la géométrie algorithmique.[C+96] Nous détaillons dans la première section les problèmes posés par le calcul géométrique, puis nous décrivons un paradigme pour les résoudre [[37]]. Finalement, nous présentons le projet CGAL, qui pose les fondements d'une bibliothèque d'algorithmes géométriques.

   
Robustesse et dégénérescences

Les algorithmes sont généralement exprimés dans un modèle où chaque nombre réel est représentable de façon exacte. En pratique, la représentation des nombres réels en machine pose de gros problèmes qui sont très vite observables. Le résultat des opérations arithmétiques pouvant être tronqué, certaines propriétés géométriques du plan euclidien ne sont pas vérifiées dans l'implantation. Par ailleurs, le traitement des cas dégénérés, souvent ignorés dans les articles, est fastidieux, allonge considérablement les programmes et constitue une source d'erreurs.

  
Figure: Différents problèmes de robustesse :
\includegraphics[width=10cm]{fig-prisme/robustesse.eps}
(a) Une méthode couramment utilisée pour localiser un point dans un polygone consiste à compter la parité du nombre d'intersections d'un rayon allant à l'infini. Ici, ce rayon passe par un sommet. Si les segments sont fermés, on compte deux intersections, aucune si les segments sont ouverts ; dans les deux cas, le point est placé incorrectement à l'extérieur du polygone.
(b) Une méthode couramment employée pour construire l'intersection de deux polygones consiste à parcourir, à partir d'un sommet, la frontière de chacun des polygones alternativement jusqu'au point de départ. Ici, on peut arranger les segments de façon à ce que la deuxième intersection ne soit pas détectée par un calcul en virgule flottante ; l'algorithme fournit alors une solution erronée.
(c) L'algorithme de Bentley-Ottmann, l'un des plus utilisés en géométrie algorithmique, calcule les intersections d'un ensemble de segments en balayant le plan et en s'arrêtant quand la droite passe par un sommet ou une intersection. Ici, on peut disposer les segments de façon à ce qu'un calcul flottant traite les événements dans le mauvais ordre. Si l'intersection entre 1 et 2 est considérée à gauche de l'extrémité de 3, alors l'intersection entre 1 et 3 n'est pas détectée.

Plusieurs approches ont été suivies pour tenter de résoudre ces problèmes [[40]]. Une méthode de perturbation symbolique, qui permet de résoudre les cas dégénérés, a été développée et raffinée. Pour les algorithmes incrémentaux randomisés, nous avons montré comment perturber la définition du problème pour prendre en compte les cas dégénérés [[23]].

Pour ce qui concerne les problèmes de stabilité numérique, une approche prometteuse consiste à utiliser une arithmétique des prédicats exacte (voir la prochaine section). De façon complémentaire, on peut chercher à développer des algorithmes nécessitant une précision minimale. Le formalisme utilisé, basé sur la notion de degré d'un algorithme, permet d'analyser les algorithmes et les problèmes en fonction de leur degré et de chercher des compromis entre degré et complexité [30].

   
Arithmétique et filtres

Les prédicats constituent l'interface entre les parties numérique et combinatoire des algorithmes géométriques. Le calcul exact de prédicats[YD95] garantit donc la stabilité numérique des algorithmes géométriques et permet à l'implantation de vérifier et utiliser les résultats du plan euclidien, plutôt que du plan des nombres flottants (qui en est une discrétisation). Une arithmétique des prédicats ne nécessite pas le recours à des types arithmétiques exacts. On peut, par exemple, montrer que certains prédicats comme les déterminants peuvent s'évaluer en simple précision de manière fiable et efficace [[6]]. On peut également utiliser des types exacts comme on peut les trouver dans des bibliothèques telles que GMP ou Leda. Pour rester efficace, il faut avoir recours à des filtres qui permettent d'améliorer progressivement le résultat flottant jusqu'à atteindre la fiabilité requise.[FvW96]. En moyenne, le calcul flottant suffit et la perte de performance est minime [[21],[36]].

Nous prévoyons donc de produire et automatiser ces outils de filtrage et de les intégrer dans la bibliothèque CGAL. Le but recherché est de libérer le programmeur de ces considérations de robustesse en lui procurant des prédicats exacts à coût très abordable. Des études préliminaires sur des algorithmes classiques ont montré que ce but est réaliste [[26]].

   
Régularisation

Si le calcul des prédicats est exact, l'algorithme retourne un résultat combinatoire correct (carte planaire, diagramme de Voronoï, etc.) Reste le problème d'arrondir les coordonnées des objets géométriques sous une forme représentable en machine. Le calcul flottant ne garantit pas que la structure arrondie vérifie des propriétés comme la planarité ou la convexité. Bien que cela n'affecte pas le déroulement de l'algorithme lui même, cela peut avoir des incidences sur les algorithmes qui utilisent ensuite ce résultat. Des méthodes ont été étudiées pour régulariser certaines constructions. Elles supposent toutes de savoir arrondir les constructions géométriques sur une grille.

Nous avons développé une méthode permettant d'arrondir correctement des constructions géométriques à un point entier le plus proche. Des outils d'automatisation pour la bibliothèque CGAL sont en cours d'étude. Il faudra aussi évaluer le coût de cette approche. Il reste sur ce sujet beaucoup de recherches à effectuer, en particulier pour des structures plus complexes comme les diagrammes de Voronoï de segments ou les arrangements tridimensionnels [[33]].

   
La bibliothèque CGAL

Comme on l'a vu, la programmation des algorithmes géométriques pose des problèmes difficiles qui ne relèvent pas seulement de l'ingénierie. Ces problèmes se posent à tous ceux qui utilisent des algorithmes géométriques et il n'existe pas actuellement de solution simple. C'est pourquoi une bibliothèque d'algorithmes géométriques, baptisée CGAL [[41]], est développée en collaboration avec d'autres équipes européennes dans le cadre de projets européens Esprit : Freie Universität Berlin (Allemagne), Universität Halle (Allemagne), RISC Linz (Autriche), Max-Planck-Institüt Saarbrucken (Allemagne), Tel Aviv University (Israël), Universiteit Utrecht (Pays-Bas), et ETH Zürich (Suisse). Cette bibliothèque est écrite en C++ et veut permettre une programmation facile, fiable et efficace d'applications nécessitant la mise en oeuvre d'algorithmes géométriques (voir aussi 5.1). La généricité est une des caractéristiques de cette bibliothèque. Les algorithmes peuvent utiliser différents types de données dès lors que certaines méthodes sont définies ce qui rend le code largement réutilisable. Cette approche contraste avec celle des « perles » utilisées par exemple en infographie qui doivent être adaptées à chaque nouveau besoin. La généricité doit aussi permettre de comparer les caractéristiques de différents algorithmes dans un même contexte et de conduire à des recherches expérimentales.



previous up next contents
Précédent : Géométrie Algorithmique Remonter : Fondements scientifiques Suivant : Domaines d'applications