graph.tex 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. \documentclass[a4paper,12pt]{article}
  2. \usepackage[french]{babel}
  3. \usepackage[T1]{fontenc}
  4. \usepackage[latin1]{inputenc}
  5. \usepackage{epsfig}
  6. \usepackage{times}
  7. %\usepackage{amsmath}
  8. \author{Rémi Synave, Stefka Gueorguieva, Pascal Desbarats}
  9. \title{Manuel de la bibliothèque GRAPH}
  10. \date{}
  11. \begin{document}
  12. \maketitle
  13. \section{Utilisation}
  14. Cette bibliothèque implémente toutes les fonctions ayant un rapport avec la théorie des graphes. Un maillage étant un graphe plongé dans l'espace $\mathbf{R}^3$, il peut être considéré comme un graphe.
  15. \section{Fonctions}
  16. \section{Fonctions utilisant les \texttt{vf\_model}}
  17. \textbullet \texttt{void vf\_model\_dijkstra(vf\_model *m, int ve\_dep, int ve\_fin, int **list, int *size)}\\
  18. Fonction qui calcule le chemin le plus court entre les sommets \texttt{ve\_dep} et \texttt{ve\_fin} avec l'algorithme de Dijkstra~\cite{D1971}. La longueur totale du chemin est retournée. Le chemin est retournée sous forme d'une liste de sommets parcourus.\\
  19. L'algorithme de Dijkstra est illustré sur les figures \ref{maillage_base} et \ref{maillage_dijkstra}. L'algorithme peut fournir un résultat assez éloigné de la ligne droite comme montré sur la figure \ref{maillage_bad_dijkstra}. Bien que le chemin soit éloigné de la ligne droite, le chemin est le plus court.\\
  20. L'algorithme utilisé est une base de Dijkstra. La fin de l'algortihme a été modifiée afin d'éviter les cas de la figure \ref{maillage_bad_dijkstra}.\\
  21. \textbf{Algorithme} : (http://fr.wikipedia.org/wiki/Algorithme\_de\_Dijkstra)\\
  22. \begin{verbatim}
  23. Pour tous les sommets S du maillage
  24. S.parcouru=INFINI
  25. S.precedent=-1
  26. FinPour
  27. listeNonParcouru={ensemble des sommets}
  28. ve_deb.parcouru=0
  29. TantQue listeNonParcouru!={liste vide}
  30. S1=minimum(listeNonParcouru)
  31. listeNonParcouru.retirer(S1)
  32. Pour tous les voisins S2 de S1
  33. si S2.parcouru>S1.parcouru+|S1 S2| alors
  34. S2.parcouru=S1.parcouru+|S1 S2|
  35. S2.precedent=S1
  36. FinSi
  37. FinPour
  38. FinTantQue
  39. chemin={liste vide}
  40. S=ve_fin
  41. /*** PARTIE MODIFIE ***/
  42. TantQue S!=ve_deb
  43. Pour tous les voisins S2 de S
  44. Si S2.parcouru==S.precedent.parcouru &&
  45. |S2 ve_fin|<|S.parcouru ve_fin|
  46. S.precedent=S2
  47. FinSi
  48. FinPour
  49. chemin.ajouterDebut(S)
  50. S=S.precedent
  51. FinTantQue
  52. chemin.ajouterDebut(S)
  53. retourner ve_fin.parcouru
  54. \end{verbatim}
  55. ~\\
  56. \underline{Paramètres et type de retour :}\\
  57. \texttt{m} : le modèle de type \texttt{vf\_model}.\\
  58. \texttt{ve\_dep} : numéro du sommet de départ.\\
  59. \texttt{ve\_fin} : numéro du sommet de fin.\\
  60. \texttt{list} : liste contenant les sommets parcourus.\\
  61. \texttt{size} : taille de la liste \texttt{list}.\\
  62. \texttt{retour} : la longueur du chemin entre les deux sommets.\\
  63. \begin{figure}[htbp]
  64. \centering
  65. \includegraphics[width=5cm]{./images/grille.eps}
  66. \caption{}
  67. \label{maillage_base}
  68. \end{figure}
  69. \begin{figure}[htbp]
  70. \centering
  71. \includegraphics[width=5cm]{./images/grille_dijkstra.eps}
  72. \caption{Résultat de l'algorithme de Dijkstra}
  73. \label{maillage_dijkstra}
  74. \end{figure}
  75. \begin{figure}[htbp]
  76. \centering
  77. \includegraphics[width=5cm]{./images/grille_dijkstra_bad.eps}
  78. \caption{Autre résultat possible de l'algorithme de Dijkstra}
  79. \label{maillage_bad_dijkstra}
  80. \end{figure}
  81. \textbullet \texttt{void vf\_model\_chemin\_plus\_proche(vf\_model *m, int ve\_dep, int ve\_fin, int **list, int *size)}\\
  82. Fonction qui calcule le chemin le plus court entre les sommets \texttt{ve\_dep} et \texttt{ve\_fin}. La longueur totale du chemin est retournée. Le chemin est retournée sous forme d'une liste de sommets parcourus.\\
  83. \textbf{Algorithme} : \\
  84. \begin{verbatim}
  85. chemin.ajouter(ve_dep)
  86. S=ve_dep
  87. distance=0
  88. TantQue on trouve un sommet à ajouter
  89. Si l'un des voisins S2 de S est plus proche de ve_fin
  90. distance=distance+|S S2|
  91. S=S2
  92. chemin.ajouter(S)
  93. FinSi
  94. FinTantQue
  95. Si S!=ve_fin
  96. retourner -1
  97. Sinon
  98. retourner distance
  99. \end{verbatim}
  100. ~\\
  101. \underline{Paramètres et type de retour :}\\
  102. \texttt{m} : le modèle de type \texttt{vf\_model}.\\
  103. \texttt{ve\_dep} : numéro du sommet de départ.\\
  104. \texttt{ve\_fin} : numéro du sommet de fin.\\
  105. \texttt{list} : liste contenant les sommets parcourus.\\
  106. \texttt{size} : taille de la liste \texttt{list}.\\
  107. \texttt{retour} : la longueur du chemin entre les deux sommets.\\
  108. \section{Fonctions utilisant les \texttt{vf\_model}}
  109. \textbullet \texttt{void vef\_model\_dijkstra(vf\_model *m, int ve\_dep, int ve\_fin, int **list, int *size)}\\
  110. Fonction qui calcule le chemin le plus court entre les sommets \texttt{ve\_dep} et \texttt{ve\_fin} avec l'algorithme de Dijkstra~\cite{D1971}. La longueur totale du chemin est retournée. Le chemin est retournée sous forme d'une liste de sommets parcourus.\\
  111. L'algorithme de Dijkstra est illustré sur les figures \ref{maillage_base} et \ref{maillage_dijkstra}. L'algorithme peut fournir un résultat assez éloigné de la ligne droite comme montré sur la figure \ref{maillage_bad_dijkstra}. Bien que le chemin soit éloigné de la ligne droite, le chemin est le plus court.\\
  112. L'algorithme utilisé est une base de Dijkstra. La fin de l'algortihme a été modifiée afin d'éviter les cas de la figure \ref{maillage_bad_dijkstra}.\\
  113. \textbf{Algorithme} : (http://fr.wikipedia.org/wiki/Algorithme\_de\_Dijkstra)\\
  114. \begin{verbatim}
  115. Pour tous les sommets S du maillage
  116. S.parcouru=INFINI
  117. S.precedent=-1
  118. FinPour
  119. listeNonParcouru={ensemble des sommets}
  120. ve_deb.parcouru=0
  121. TantQue listeNonParcouru!={liste vide}
  122. S1=minimum(listeNonParcouru)
  123. listeNonParcouru.retirer(S1)
  124. Pour tous les voisins S2 de S1
  125. si S2.parcouru>S1.parcouru+|S1 S2| alors
  126. S2.parcouru=S1.parcouru+|S1 S2|
  127. S2.precedent=S1
  128. FinSi
  129. FinPour
  130. FinTantQue
  131. chemin={liste vide}
  132. S=ve_fin
  133. /*** PARTIE MODIFIE ***/
  134. TantQue S!=ve_deb
  135. Pour tous les voisins S2 de S
  136. Si S2.parcouru==S.precedent.parcouru &&
  137. |S2 ve_fin|<|S.parcouru ve_fin|
  138. S.precedent=S2
  139. FinSi
  140. FinPour
  141. chemin.ajouterDebut(S)
  142. S=S.precedent
  143. FinTantQue
  144. chemin.ajouterDebut(S)
  145. retourner ve_fin.parcouru
  146. \end{verbatim}
  147. ~\\
  148. \underline{Paramètres et type de retour :}\\
  149. \texttt{m} : le modèle de type \texttt{vef\_model}.\\
  150. \texttt{ve\_dep} : numéro du sommet de départ.\\
  151. \texttt{ve\_fin} : numéro du sommet de fin.\\
  152. \texttt{list} : liste contenant les sommets parcourus.\\
  153. \texttt{size} : taille de la liste \texttt{list}.\\
  154. \texttt{retour} : la longueur du chemin entre les deux sommets.\\
  155. \begin{figure}[htbp]
  156. \centering
  157. \includegraphics[width=5cm]{./images/grille.eps}
  158. \caption{}
  159. \label{maillage_base}
  160. \end{figure}
  161. \begin{figure}[htbp]
  162. \centering
  163. \includegraphics[width=5cm]{./images/grille_dijkstra.eps}
  164. \caption{Résultat de l'algorithme de Dijkstra}
  165. \label{maillage_dijkstra}
  166. \end{figure}
  167. \begin{figure}[htbp]
  168. \centering
  169. \includegraphics[width=5cm]{./images/grille_dijkstra_bad.eps}
  170. \caption{Autre résultat possible de l'algorithme de Dijkstra}
  171. \label{maillage_bad_dijkstra}
  172. \end{figure}
  173. \textbullet \texttt{vef\_model* vef\_model\_nearest\_neighbour\_graph(vef\_model *m)}\\
  174. Calcul du graphe de voisin le plus proche tel que défini dans \cite{AS2000}.\\
  175. \textbf{Définition du graphe de voisin le plus proche :}\\
  176. Considérons un nuage de point $P$. Le graphe des voisins le plus proche est l'ensemble des aretes $E$ telles que :\\
  177. $E \subseteq P \times P$ et $E=\{e_k=(P_i,P_j),k=1,\cdots ,n / P_j\textrm{ est le point le plus proche de }P_i\}$.\\
  178. ~\\
  179. \underline{Paramètres et type de retour :}\\
  180. \texttt{m} : le modèle de type \texttt{vef\_model}.\\
  181. \texttt{retour} : un \texttt{vef\_model} contenant les sommets et les aretes du graphe des voisins les plus proche.\\
  182. \textbullet \texttt{vef\_model* vef\_model\_gabriel\_graph(vef\_model *m)}\\
  183. Calcul du "Gabriel graph" tel que défini dans \cite{AS2000}.\\
  184. \textbf{Définition du "Gabriel graph" :}\\
  185. Considérons un nuage de point $P$. Le "Gabriel graph" est le graphe maximal contenant l'ensemble des aretes $E$ telles que :\\
  186. $E \subseteq P \times P$ et $E=\{e_k=(P_i,P_j),k=1,\cdots ,n /\textrm{ la sphère minimal contenant }P_i$\\$\textrm{et }P_j\textrm{ ne contient aucun autre point}\}$.\\
  187. Le "Gabriel graph" est donc l'ensemble des aretes reliant deux points et dont la sphère minimale ne contient pas d'autres points.\\
  188. ~\\
  189. \underline{Paramètres et type de retour :}\\
  190. \texttt{m} : le modèle de type \texttt{vef\_model}.\\
  191. \texttt{retour} : un \texttt{vef\_model} contenant les sommets et les aretes du "Gabriel Graph".\\
  192. \textbullet \texttt{vef\_model* vef\_model\_extended\_gabriel\_hypergraph(vef\_model *m)}\\
  193. Calcul du "Extended Gabriel hypergraph" tel que défini dans \cite{AS2000}.\\
  194. \textbf{Définition du "Extended Gabriel hypergraph" :}\\
  195. Considérons le "Gabriel graph (GG)" (voir fonction correspondante) d'un nuage de point $P$. Le "Extended Gabriel hypergraph" est défini tel que :\\
  196. \begin{itemize}
  197. \item $\forall e_1,e_2 \in GG(P), e_1=(v_1,v_2)\textrm{ et }e_2=(v_2,v_3),$ si $v_1,v_2 \textrm{ et } v_3$ sont non alignés et que la sphère minimal de ces trois points ne contient aucun autre point, alors l'arete $(v_1,v_3)$ est ajouté aà l'"Extended Gabriel hypergraph".
  198. \item tout cycle de trois aretes dans l'"Extended Gabriel hypergraph" forme un triangle.
  199. \end{itemize}
  200. ~\\
  201. \underline{Paramètres et type de retour :}\\
  202. \texttt{m} : le modèle de type \texttt{vef\_model}.\\
  203. \texttt{retour} : un \texttt{vef\_model} contenant les sommets, les aretes et les faces du "Extended Gabriel hypergraph".\\
  204. \textbullet \texttt{vef\_model* vef\_model\_euclidean\_minimal\_spanning\_tree(vef\_model *m)}\\
  205. Calcul de l'arbre minimal couvrant avec la méthode Prim \cite{P1957}.\\
  206. \textbf{Définition du "Euclidean Minimal Spanning Tree" :}\\
  207. L'arbre minimal couvrant d'un graphe est le sous ensemble d'arete formant un arbre incluant toutes les aretes et donc la somme des poids des aretes est minimal.\\
  208. \textbf{Algorithme :} http://en.wikipedia.org/wiki/Prim\%27s\_algorithm\\
  209. \begin{verbatim}
  210. V désigne l'ensemble des sommets
  211. E désigne l'ensemble des aretes
  212. Choisir un sommet S arbitrairement
  213. Vnew={S}
  214. Enew={}
  215. TantQue Vnew!=V
  216. choisir une arete(u,v) ayant le poids minimal telle que:
  217. u appartient à Vnew
  218. v n'appartient pas à Vnew
  219. ajouter v à Vnew
  220. ajouter (u,v) à Enew
  221. FinTantQue
  222. Vnew et Enew est l'arbre couvrant minimal
  223. \end{verbatim}
  224. ~\\
  225. \underline{Paramètres et type de retour :}\\
  226. \texttt{m} : le modèle de type \texttt{vef\_model}.\\
  227. \texttt{retour} : un \texttt{vef\_model} contenant les sommets et les aretes du "Euclidean Minimal Spanning Tree".\\
  228. \bibliographystyle{unsrt}
  229. \bibliography{manuel}
  230. \end{document}