Analyse géométrique et algorithme pour le traitement de fichiers SVG
Contexte du projet
Dans le cadre de ce projet, j’ai développé un algorithme en Python pour analyser des fichiers SVG et déterminer si des points (représentés par des cercles) sont situés à l’intérieur d’un polygone, ici les frontières de l’Italie. L’objectif est de colorer ces points en fonction de leur position par rapport au polygone : vert s’ils sont à l’intérieur, rouge s’ils sont à l’extérieur, et jaune s’ils se trouvent sur la frontière.


Technologies utilisées
- Python : Langage principal pour la logique du traitement des données.
xml.etree.ElementTree
: Bibliothèque pour la manipulation et l’analyse des fichiers XML.- Expressions régulières (
re
) : Utilisées pour extraire les données des balises SVG. - Algorithme géométrique : Détection des points à l’intérieur, à l’extérieur ou sur le bord d’un polygone.
Fonctionnement de l’algorithme
Le processus se déroule en plusieurs étapes clés :
Lecture et extraction des données SVG
Le fichier SVG est lu en tant que chaîne de caractères, et grâce aux expressions régulières, les balises <polygon>
et <circle>
sont extraites. Les informations de chaque polygone (les frontières de l’Italie dans notre cas) sont converties en une liste de coordonnées (x, y)
, tandis que les cercles sont définis par leur centre (cx, cy)
et leur rayon r
.
Vérification de la position des points
La fonction principale ici est isPointInsidePolygon
. Elle utilise un algorithme de comptage des intersections pour déterminer si un point est à l’intérieur d’un polygone. L’idée derrière cet algorithme est simple :
- On trace une ligne imaginaire partant du point et allant jusqu’à une coordonnée à l’extérieur du polygone.
- On compte le nombre d’intersections de cette ligne avec les arêtes du polygone.
- Si ce nombre est impair, le point est à l’intérieur du polygone ; s’il est pair, il est à l’extérieur.
Pour vérifier si un point est sur le bord, une fonction dédiée, isOnEdge
, vérifie si le point se situe exactement sur l’une des arêtes du polygone.
Coloration des points
Une fois la position des cercles déterminée, chaque cercle est coloré en fonction de son emplacement par rapport au polygone :
- Vert pour les cercles à l’intérieur du polygone.
- Rouge pour ceux à l’extérieur.
- Jaune pour les cercles qui se trouvent sur les frontières.
Ces couleurs sont directement attribuées dans le fichier SVG.
Optimisation et performances
L’algorithme est conçu pour être relativement efficace avec un calcul basé sur les intersections. Une attention particulière a été portée à la gestion des calculs géométriques, notamment l’utilisation de formules simples et efficaces pour déterminer les positions relatives des points et des arêtes.
Conclusion
Ce projet montre l’importance de la géométrie algorithmique dans des cas d’utilisation pratiques tels que la manipulation de cartes vectorielles. Grâce à ce projet, j’ai renforcé mes compétences en :
- Analyse de fichiers XML/SVG.
- Application d’algorithmes géométriques.
- Gestion et manipulation des données à travers les structures comme les listes et les tuples.