Logiciel de construction d’un matériau virtuel
Projet de fin d'étude
Résumé: L’objectif du projet est de réaliser un logiciel de construction de matériaux virtuels. Le matériau virtuel doit synthétiser toutes les caractéristiques importantes du matériau réel de manière à pouvoir ensuite être étudié par des séries d’expériences virtuelles. On doit pouvoir passer d’une description géométrique complexe d’une structure à sa représentation, ou à une de ses représentations en 3D, interactive et « interrogeable » par la souris.
SOMMAIRE
1.1 Présentation du laboratoire.
1.2. Présentation du contexte du projet.
2. Description du cahier des charges.
2.1. Construction du matériau virtuel.
2.2. Visualisation du matériau virtuel.
2.3. Extraction de données.
3. Description du travail effectué.
3.1. Le cahier des charges.
3.2. Etude des différentes librairies.
3.3. Le développement du projet.
3.3.1. Algorithme de remplissage de matériau.
3.3.2. Conception de l’IHM.
4. Planning du projet.
CONCLUSION
BIBLIOGRAPHIE
ANNNEXES
A. Diagramme de Voronoi et triangulation de Delaunay.
B. Algorithme de vérification qu’un point est à l’intérieur d’un volume.
Figure 1: Schéma générale de fonctionnement.
Figure 2: Description de divisions et de joints.
Figure 3: Hiérarchie de la structure d'une division.
Figure 4: Diagramme de classe.
Figure 5: Libraires CGAL (http://www.cgal.org).
Figure 6: Algorithme de remplissage de matériau.
Figure 7: Capture d'écran du logiciel; Visualisation du matériau plein.
Figure 8: Capture d’écran du logiciel;Visualisation du matériau en fil de fer.
Figure 9: Capture d’écran du logiciel; Visualisation du matériau en mettant certaines divisions en transparence.
Figure 10: Capture d’écran du logiciel; Sélection d’une division.
Figure 11: Triangulation 2D de Delaunay.
Figure 12: Triangulation de Delaunay (bleu) et diagramme de Voronoi (Rouge).
Figure 13: Tracé de rayon.
Figure 14: Calcul des angles.
3. Description du travail effectué
3.1. Le cahier des charges.
La première étape du projet fut de réaliser le cahier des charges. Ce fut une étape de réflexion de façon globale sur le projet. Il fallait mettre sur papier toutes les idées et vérifier si elles étaient techniquement faisables et cohérentes dans l’ensemble du logiciel.
Après la phase d’écriture du cahier des charges, j’ai réfléchi à la conception du logiciel. Pour cela, j’ai utilisé Rational Rose pour créer le diagramme de classe (Figure 4).
Figure 4: Diagramme de classe
La conception du logiciel doit être le plus général possible. On doit pouvoir ajouter ou modifier des algorithmes le plus facilement possible.
3.2. Etude des différentes librairies
La plus grosse partie de ce projet était de développer un algorithme pour remplir un matériau avec des grains et des cellules. Pour cela, je devais utiliser l’algorithme de Voronoi (Annexe A). Etant donné que cet algorithme est très compliqué à implémenter, j’ai dû étudier dans un premier temps toutes les librairies permettant de créer des diagrammes de Voronoï en 3D. Après de nombreuses recherches sur Internet, seulement trois librairies ont retenu mon attention (LEDA, CGAL et Qhull) mais seulement deux me permettait de faire des tests. En effet, LEDA était seulement disponible en version de démonstration avec une très vielle version. J’ai donc effectué mes tests avec Qhull et CGAL afin de choisir la plus performante.
Après plusieurs tests, les performances des deux librairies étaient pratiquement identiques. Mais CGAL avait l’avantage d’être plus robuste (moins d’erreur numérique et fonctionne même dans des cas très particuliers) et pouvait beaucoup plus facilement s’intégrer dans un programme. En effet, Qhull est un programme DOS. Je devais donc passer par des fichiers pour pouvoir l’utiliser.
Figure 5: Libraires CGAL (http://www.cgal.org)
CGAL est une librairie spécialisée dans les algorithmes de calcul géométrique. Elle est écrite en C++ et développé dans un projet ESPRIT LTR dont fait partie l’INRIA. Le but de cette librairie est de fabriquer un large corps d’algorithme géométrique se retrouvant dans des applications industrielles.
3.3. Le développement du projet
3.3.1. Algorithme de remplissage de matériau
La principale difficulté dans le développement de ce logiciel était la création d’un algorithme permettant de remplir un volume 3D avec un diagramme de Voronoï (Annexe A) tout en gardant la hiérarchie de la structure (c’est à dire, par exemple, une face est la même face pour les deux divisions l’appartenant).
Après une longue réflexion, l’algorithme retenu était d’abord de générer des points à l’intérieur de ce volume 3D (Annexe B). Ensuite, je calcule la symétrie de chaque point avec chaque plan du volume. Enfin, j’insère tous ces points dans la triangulation de Delaunay, puis je calcul son dual (le diagramme de Voronoï) de chaque segment de Delaunay ayant un point qui n’est pas un point de symétrie. J’obtiens ainsi le matériau avec les grains et les cellules ayant les mêmes frontières que le matériau de départ.
Figure 6: Algorithme de remplissage de matériau
Le figure 6 montre le fonctionnement de cet algorithme. En noir, nous avons le matériau dont les divisions doivent avoir les mêmes frontières. En vert, ce sont les points générés aléatoirement à l’intérieur du matériau ainsi que les symétries de ces points. En calculant, la triangulation de Delaunay (en bleu) à partir des points, nous obtenons le diagramme de Voronoï en rouge. Sur la figure, la triangulation de Delaunay est limitée à l’intérieur du matériau pour des raisons de compréhension, mais normalement, la triangulation s’étend sur tous les points. Par contre, seul le diagramme de Voronoï à l’intérieur du matériau est calculé.
Le problème de cet algorithme est qu’il fonctionne que sur des volumes convexes. La solution pour remplir un volume concave a été d’utiliser un algorithme qui divise le volume en plusieurs volumes convexes enfin de lui appliqué cet algorithme. Mais faute de temps, cet algorithme est resté sous forme de réflexion.
Les principales difficultés de cette étape ont été de voir en 3D ce qu’il fallait faire. De plus, ce genre d’algorithme entraîne de nombreuses erreurs numériques d’où la difficulté de corriger les erreurs de programmation. Je ne savais jamais si une erreur était produite par une erreur dans mon algorithme ou alors par des erreurs numériques. Ces erreurs ont été résolues en utilisant des types numériques autre que «double» (plus grand type réel que les processeurs calculs matériellement). J’ai utilisé des types numériques de la librairie CGAL. Liés à ces problèmes numériques, j’avais le problème de la rapidité de cet algorithme. En effet, ce dernier a une complexité assez grande donc l’utilisation de types numériques de la librairie CGAL faisait ralentir encore plus, puisque ceux-ci sont calculés en logiciel. Donc, il a fallut que je trouve un équilibre entre performance et résultat juste.
3.3.2. Conception de l’IHM
Figure 7 : Capture d'écran du logiciel; Visualisation du matériau plein
L’étape suivante était le développement de l’interface homme machine. Le logiciel devait fonctionner sous Windows avec Visual C++. Dans un premier temps, j’ai développé une grosse partie de l’interface homme machine. La partie la plus importante est la zone de visualisation 3D du matériau. Nous pouvons effectuer des rotations, des transformations et des zooms sur cette zone. Différents modes de visualisation sont disponibles. Nous avons la possibilité de voir le matériau plein (figure 7), en fil de fer (figure 8), ou sous forme plein mais en mettant en transparence certaines divisions pour permettre de voir l’intérieur du matériau (figure 9).
Figure 8: Capture d’écran du logiciel; Visualisation du matériau en fil de fer
Figure 9: Capture d’écran du logiciel; Visualisation du matériau en mettant certaines divisions en transparence
J’ai aussi implémenté l’onglet permettant l’affichage de la hiérarchie de la division en cours. Cet onglet a la particularité de pouvoir être redimensionné, détaché de la fenêtre et même fermé comme une barre d’outil (figure 10). Ceci permet d’avoir une zone d’affichage plus grand si cela est nécessaire.
Comme décrit dans le cahier des charges, nous avons aussi la possibilité de sélectionner une face des divisions (grains ou cellules) avec la souris. Lorsqu’une face est sélectionnée, une boîte de dialogue est affichée montrant les propriétés de la face et aussi les propriétés des divisions appartenant à cette face (figure 10).
Figure 10: Capture d’écran du logiciel; Sélection d’une division