\documentclass[a4paper,12pt]{article} \usepackage[french]{babel} \usepackage[T1]{fontenc} \usepackage[latin1]{inputenc} %\usepackage{amsmath} \author{Rémi Synave, Stefka Gueorguieva, Pascal Desbarats} \title{Manuel de la bibliothèque OVERLAP} \date{} \begin{document} \maketitle \section{Utilisation} Bibliothèque où sont implémentées les fonctions permettant de vérifier l'intersection de Bounding Box ou de calculer le taux de recouvrement de deux maillages. \section{Fonctions} \textbullet \texttt{int intersection\_axis\_aligned\_bounding\_box\_with\_axis\_aligned\_bounding\_box\_list(point3d min, point3d max, point3d *listmin, point3d *listmax, int size)}\\ Test d'intersection entre une Axis Aligned Bounding Box (AABB), \texttt{min} et \texttt{max}, et un ensemble d'AABB, \texttt{listmin} et \texttt{listmax}.\\ ~\\ \underline{Paramètres et type de retour :}\\ \texttt{min} : point minimal de la boundingbox à tester (xmin,ymin,zmin).\\ \texttt{max} : point maximal de la boundingbox à tester (xmax,ymax,zmax).\\ \texttt{listmin} : liste de points minimaux des boundingbox (xmin,ymin,zmin).\\ \texttt{listmax} : liste de points maximaux des boundingbox (xmax,ymax,zmax).\\ \texttt{size} : nombre de boundingbox dans la liste.\\ \texttt{retour} : 1 s'il y a instersection, 0 sinon.\\ \textbullet \texttt{int intersection\_bounding\_ball\_with\_bounding\_ball\_list(point3d c, double rayon, point3d *listcentre, double *listrayon, int nbelt, double alpha)}\\ Test d'intersection d'une bounding ball définie par son centre \texttt{c} et son rayon \texttt{rayon} avec une liste de bounding ball définie par leur centre \texttt{listcentre} et leur rayon \texttt{listrayon}.\\ \textbf{Formule :}\\ Il y a intersection entre la bounding ball de centre $c1$ et de rayon $r1$ et une bounding ball de centre $c2$ et de rayon $r2$ si : $||c2-c1||<||r2-r1|| \times alpha$.\\ ~\\ \underline{Paramètres et type de retour :}\\ \texttt{c} : centre de la bounding sphere à tester.\\ \texttt{rayon} : rayon de la bounding sphere à tester.\\ \texttt{listcentre} : liste de centre des bounding sphere.\\ \texttt{listrayon} : liste des rayons des bounding sphere.\\ \texttt{nbelt} : taille de la liste de bounding sphere.\\ \texttt{alpha} : paramètre de "rapprochement" (voir formule).\\ \texttt{retour} : 1 s'il y a instersection, 0 sinon.\\ \textbullet \texttt{double vf\_model\_bounding\_ball\_ritter\_compute\_overlap(vf\_model *base, vf\_model *m)}\\ Calcul du taux de recouvrement de deux maillages en utilisant les bounding ball de Ritter.\\ \textbf{Algorithme :}\\ 1) Calculer les bounding ball de Ritter de toutes les faces des modèles \texttt{base} et \texttt{m}.\\ 2) Pour toutes les faces de \texttt{m}, si la bounding ball de cette face s'intersecte avec l'une des bounding ball des faces de \texttt{base} alors marquer la face de \texttt{m}.\\ 3) Pour toutes les faces marquées de \texttt{m}, ajouter les sommets sans redondance à une liste \texttt{L}.\\ 4) Le taux de recouvrement = $\frac {||L||} {||m||} $.\\ où ||\texttt{L}|| est le nombre d'éléments de la liste \texttt{L} et ||\texttt{m}| est le nombre de sommets du maillage \texttt{m}.\\ ~\\ \underline{Paramètres et type de retour :}\\ \texttt{base} : premier modele.\\ \texttt{m} : second modele.\\ \texttt{retour} : taux de recouvrement de \texttt{m} sur \texttt{base}.\\ \textbullet \texttt{double vf\_model\_axis\_aligned\_bounding\_box\_compute\_overlap(vf\_model *base, vf\_model *m)}\\ Calcul du taux de recouvrement de deux maillages en utilisant les AABB.\\ \textbf{Algorithme :}\\ 1) Calculer les AABB de toutes les faces des modèles \texttt{base} et \texttt{m}.\\ 2) Pour toutes les faces de \texttt{m}, si l'AABB de cette face s'intersecte avec l'une des AABB des faces de \texttt{base} alors marquer la face de \texttt{m}.\\ 3) Pour toutes les faces marquées de \texttt{m}, ajouter les sommets sans redondance à une liste \texttt{L}.\\ 4) Le taux de recouvrement = $\frac {||L||} {||m||} $.\\ où ||\texttt{L}|| est le nombre d'éléments de la liste \texttt{L} et ||\texttt{m}| est le nombre de sommets du maillage \texttt{m}.\\ ~\\ \underline{Paramètres et type de retour :}\\ \texttt{base} : premier modele.\\ \texttt{m} : second modele.\\ \texttt{retour} : taux de recouvrement de \texttt{m} sur \texttt{base}.\\ \textbullet \texttt{void vf\_model\_bounding\_ball\_ritter\_find\_face\_overlapping(vf\_model *base, vf\_model *m, int **list, int *size, double alpha)}\\ Liste les faces de \texttt{m} s'intersectant avec les face de \texttt{base} en utilisant les bounding ball de Ritter. L'indes des faces est ajoutées à la liste \texttt{list}.\\ \textbf{Algorithme :}\\ 1) Calculer les bounding ball de Ritter de toutes les faces des modèles \texttt{base} et \texttt{m}.\\ 2) Pour toutes les faces de \texttt{m}, si la bounding ball de cette face s'intersecte avec l'une des bounding ball des faces de \texttt{base} alors ajouter la face à la liste \texttt{list}.\\ ~\\ \underline{Paramètres et type de retour :}\\ \texttt{base} : premier modele.\\ \texttt{m} : second modele.\\ \texttt{list} : liste des numéros des faces de \texttt{m} s'intersectant avec \texttt{base}.\\ \texttt{size} : taille de la liste.\\ \texttt{alpha} : paramètre de rapprochement (voir formule de la fonction intersection\_bounding\_ball\_with\_bounding\_ball\_list).\\ \texttt{retour} : aucun.\\ \textbullet \texttt{void vf\_model\_axis\_aligned\_bounding\_box\_find\_face\_overlapping(vf\_model *base, vf\_model *m, int **listface, int *size)}\\ Liste les faces de \texttt{m} s'intersectant avec les face de \texttt{base} en utilisant les AABB. L'indes des faces est ajoutées à la liste \texttt{list}.\\ \textbf{Algorithme :}\\ 1) Calculer les AABB de toutes les faces des modèles \texttt{base} et \texttt{m}.\\ 2) Pour toutes les faces de \texttt{m}, si l'AABB de cette face s'intersecte avec l'une des AABB des faces de \texttt{base} alors ajouter la face à la liste \texttt{list}.\\ ~\\ \underline{Paramètres et type de retour :}\\ \texttt{base} : premier modele.\\ \texttt{m} : second modele.\\ \texttt{list} : liste des numéros des faces de \texttt{m} s'intersectant avec \texttt{base}.\\ \texttt{size} : taille de la liste.\\ \texttt{retour} : aucun.\\ \end{document}