Bonjour,
j'ai besoin de triangulariser des formes géométriques 2D définies par des polygones
J'ai déjà mes formes 2D organisés "proprement" sous forme de forêts de polygones ; autrement dit :
- ma forêt est une liste de polygones de type "extérieurs"
- chaque polygone "extérieur" contient une liste de polygones inclus qui sont tous de type "intérieurs" (des trous)
- chaque polygone "intérieur" contient une liste de polygones inclus qui sont tous de type "extérieur" (autrement dit, il peut y avoir des îles dans les trous)
- ... chaque île peut avoir des trous qui ont eux-même des îles, ect...
N'importe quel dessin 2D en noir et blanc (pas en niveaux de gris, en noir et blanc) peut être entièrement décrit par ma structure "forêt de polygones"
Ma structure de données est propre, c'est à dire :
- elle est correcte, pas de chevauchement ou d'erreurs, pas de polygones repliés sur eux même (genre en "8"), pas de polygones nuls ou tout plats
- tous les points des polygones sont dans le bon ordre
- aucun point n'est confondu avec un autre (pas de points en double ou en triple)
- l'ordre des points des polygones extérieurs tourne dans le sens horaire, ceux des polygones intérieur dans le sens anti-horaire, de sorte que lorsque l'on parcours un polygone la matière est toujours "à droite"
Après quelques recherches, le code de Poly2Tri est exactement ce qu'il me faut http://sites-final.uclouvain.be/mema/Poly2Tri/
Problème : pas de DLL, que du code C++
Mon appli où je souhaite utiliser ce code est en Visual Basic Express 2010 et elle est relativement grosse (plus de 40.000 lignes de code, une vingtaine de fenêtres)
Il y a plusieurs solutions à priori :
- traduire le code de Poly2Tri en VB.NET : difficile, d'autant que ce genre d'algorithme est sensible à l'instabilité numérique et que le code est optimisé pour la vitesse ; je risque d'avoir pas mal d'instruction "purement c++" non traduisibles directement en VB.NET, et dans le code pour éviter l'instabilité numérique il y a des astuces qui exploitent certainement la façon dont le C++ réalise les opérations mathématiques sur les flottants
- développer moi-même le code : c'est idiot, je vais réinventer la roue, et surtout je vais certainement me planter avec les subtilités liées à l'instabilité numérique
- utiliser Visual C++ Express (ou C#) pour adapter Poly2Tri en un code utilisable par VB.NET ; dans mon projet VB.NET j'utilise déjà une DLL qui a été écrite en C++
- trouver un autre code de triangularisation en VB.NET, aussi bon que Poly2Tri ; comme ma structure de données étant propre, elle n'occasionne pas de "stress" particulier pour l'algorithme de triangularisation; mais certains polygones peuvent êtres très fins, certains points très éloignés les uns des autres (lignes droites) ou au contraire assez rapprochés (polygone approximant une forme courbe)
Malgré pas mal de recherches sur le net je suis surpris de n'avoir trouvé aucun exemple d'utilisation de Poly2Tri en VB.NET car Poly2Tri est populaire, VB.NET également
Merci
A bientôt
Partager