Parcourir la source

Dépôt initial

Rémi Synave il y a 2 ans
Parent
commit
eddd20b83b
100 fichiers modifiés avec 33881 ajouts et 226 suppressions
  1. 8 0
      AUTHORS
  2. 83 0
      ChangeLog
  3. 668 224
      LICENSE
  4. 166 0
      LICENSE.LESSER
  5. 7 0
      Makefile
  6. 0 0
      NEWS
  7. 13 2
      README.md
  8. 26 0
      TODO
  9. BIN
      a2ri.png
  10. 275 0
      a2ri.svg
  11. 264 0
      a2ri_final.svg
  12. BIN
      a2ri_trianglule.png
  13. BIN
      ancienneVersion/a2ri-0.2.tar.gz
  14. BIN
      ancienneVersion/a2ri-0.2.zip
  15. BIN
      ancienneVersion/a2ri-0.3.tar.gz
  16. BIN
      ancienneVersion/a2ri-0.3.zip
  17. 41 0
      build_package.sh
  18. 1795 0
      doc/Doxyfile
  19. 7 0
      doc/Makefile
  20. 103 0
      doc/src/Makefile
  21. 124 0
      doc/src/bounding_box.tex
  22. 30 0
      doc/src/conversion.tex
  23. 83 0
      doc/src/edge.tex
  24. 129 0
      doc/src/face.tex
  25. 259 0
      doc/src/geometry.tex
  26. 267 0
      doc/src/graph.tex
  27. 124 0
      doc/src/hashtable.tex
  28. 56 0
      doc/src/icp.tex
  29. 148 0
      doc/src/images/cercle_inscrit.eps
  30. 23 0
      doc/src/images/cercle_inscrit.fig
  31. 146 0
      doc/src/images/decouparete.eps
  32. 21 0
      doc/src/images/decouparete.fig
  33. 26 0
      doc/src/images/decouparete_hash_model_loop.fig
  34. 170 0
      doc/src/images/decouparete_vef_model_loop.eps
  35. 29 0
      doc/src/images/decouparete_vef_model_loop.fig
  36. 161 0
      doc/src/images/decouparete_vf_model_loop.eps
  37. 176 0
      doc/src/images/decoupface.eps
  38. 34 0
      doc/src/images/decoupface.fig
  39. 53 0
      doc/src/images/decoupface_hash_model_loop.fig
  40. 257 0
      doc/src/images/decoupface_vef_model_loop.eps
  41. 61 0
      doc/src/images/decoupface_vef_model_loop.fig
  42. 227 0
      doc/src/images/decoupface_vf_model_loop.eps
  43. 182 0
      doc/src/images/distance_point_ligne.eps
  44. 31 0
      doc/src/images/distance_point_ligne.fig
  45. 222 0
      doc/src/images/grille.eps
  46. 91 0
      doc/src/images/grille.fig
  47. 248 0
      doc/src/images/grille_dijkstra.eps
  48. 98 0
      doc/src/images/grille_dijkstra.fig
  49. 246 0
      doc/src/images/grille_dijkstra_bad.eps
  50. 96 0
      doc/src/images/grille_dijkstra_bad.fig
  51. 198 0
      doc/src/images/nuage_de_points.eps
  52. 37 0
      doc/src/images/nuage_de_points.fig
  53. 220 0
      doc/src/images/nuage_de_points_bounding_box.eps
  54. 47 0
      doc/src/images/nuage_de_points_bounding_box.fig
  55. 234 0
      doc/src/images/nuage_de_points_sphere_ritter.eps
  56. 51 0
      doc/src/images/nuage_de_points_sphere_ritter.fig
  57. 163 0
      doc/src/images/point_dans_triangle.eps
  58. 27 0
      doc/src/images/point_dans_triangle.fig
  59. 163 0
      doc/src/images/point_non_dans_triangle.eps
  60. 27 0
      doc/src/images/point_non_dans_triangle.fig
  61. 177 0
      doc/src/images/repositionnement.eps
  62. 267 0
      doc/src/images/repositionnement_vef_model_loop.eps
  63. 213 0
      doc/src/images/repositionnement_vf_model_loop.eps
  64. 35 0
      doc/src/images/repostionnement.fig
  65. 47 0
      doc/src/images/repostionnement_hash_model_loop.fig
  66. 65 0
      doc/src/images/repostionnement_vef_model_loop.fig
  67. 143 0
      doc/src/manuel.bib
  68. 123 0
      doc/src/matrix.tex
  69. 1149 0
      doc/src/model.tex
  70. 110 0
      doc/src/overlap.tex
  71. 88 0
      doc/src/point.tex
  72. 45 0
      doc/src/polyhedron.tex
  73. 180 0
      doc/src/quality.tex
  74. 26 0
      doc/src/space_partition.tex
  75. 85 0
      doc/src/subdivision.tex
  76. 33 0
      doc/src/topology.tex
  77. 25 0
      doc/src/triangulation.tex
  78. 125 0
      doc/src/util.tex
  79. 62 0
      doc/src/vector.tex
  80. 167 0
      doc/src/vertex.tex
  81. 25 0
      examples/conversion/Makefile
  82. 35 0
      examples/conversion/main.c
  83. 25 0
      examples/epaississement/Makefile
  84. 40 0
      examples/epaississement/main.c
  85. 339 0
      examples/epaississement/opengl.c
  86. 37 0
      examples/epaississement/opengl.h
  87. 19 0
      examples/geodesique/Makefile
  88. 44 0
      examples/geodesique/main.c
  89. 1505 0
      examples/geodesique/opengl.c
  90. 44 0
      examples/geodesique/opengl.h
  91. 25 0
      examples/graph/Makefile
  92. 40 0
      examples/graph/main.c
  93. 369 0
      examples/graph/opengl.c
  94. 37 0
      examples/graph/opengl.h
  95. 19 0
      examples/icp/Makefile
  96. 53 0
      examples/icp/main.c
  97. 10452 0
      examples/icp/models/armadillo1.off
  98. 8349 0
      examples/icp/models/armadillo2.off
  99. 818 0
      examples/icp/models/cat1.off
  100. 0 0
      examples/icp/models/cat2.off

+ 8 - 0
AUTHORS

@@ -0,0 +1,8 @@
+Auteur :
+Rémi Synave - synave@lisic.univ-littoral.fr
+
+Contributeurs :
+Romain Leguay
+Nguyen Haiduong
+Solange Houeto
+Marianne Fichoux

+ 83 - 0
ChangeLog

@@ -0,0 +1,83 @@
+24/07/10
+	* Optimisation de l'algorithme A*
+
+14/04/10
+	* Ajout de l'algorithme A* pour la recherche de chemin géodésique
+
+25/02/10
+	* Multi-threading des algorithmes de recalage 
+	* Multi-threading de l'algorithme permettant le calcul du taux de
+	recouvrement.
+	* Multi-threading de l'algorithme de nettoyage de vues
+	
+23/02/10
+	* Optimisation de l'algorithme de nettoyage de vues
+	* Multi-threading de l'exemple space_partition
+
+16/02/10
+	* Optimisation de l'algorithme automated_trimmed_icp (tri rapide
+	pour le rejet de paires)
+
+15/02/10 Rémi Synave 
+	* Implémentation de l'ouverture "rapide" d'un fichier STL. Méthode
+	basée sur les space_partition 
+
+08/01/10 Rémi Synave
+	* Changement de nom de la structure hash_model en vf
+
+06/06/09 Rémi Synave
+	* Ajout de l'exemple space_partition
+
+06/06/09 Hai-Duong N'Guyen, Romain Leguay, Marianne Fichoux, Rémi Synave 
+	* Ajout d'un paramètre de sensibilité pour l'algorithme
+	automated_trimmed_icp
+	* Ajout du support multi-passe pour l'algorithme BPA
+	* Adaptation des exemples avec les nouveaux prototypes des
+	fonctions 
+
+28/05/2009 Hai-Duong N'guyen
+	* Modification de la fonction de triangulation BPA
+
+25/05/09 Rémi Synave
+	* Ajout d'une fonction de clonage d'un vf_model
+	* Modification des mesures géodésiques afin de ne pas subdiviser
+	le modèle mais en gardant le même comportement
+
+06/05/09 Rémi Synave
+	* Modification de la fonction “vf_model_oriented_bounding_box”
+	pour calculer l’OBB d’un maillage complet.
+	* Les fonctions “center_of_mass” et “cross_variance” sont
+	maintenant dans le module geometry. 
+
+19/04/09 Rémi Synave
+	* Mise à jour de l'algorithme automated_trimmed_icp
+	* Ajout d'une fonction de calcul d'intersection entre deux
+	bounding ball (vf_model_bounding_ball_minimale_find_overlapping)
+
+07/04/09 Rémi Synave
+	* passage en version 0.2 grâce à la contribution de Romain Leguay,
+	Nguyen Haiduong, Solange Houeto et Marianne Fichoux qui ont
+	travaillé sur la reconstruction de surface - algorithme BPA dans
+	le module triangulation. 
+
+03/03/09 Rémi Synave
+	* Correction d'un bug dans les méthodes de calcul de chemin
+	géodésique utilisant l'algorithme "approche" pour calculer le
+	chemin approximatif menant à une erreur de segmentation 
+
+26/03/09 Rémi Synave
+	* Ajout de la fonction vf_model_automated_trimmed_icp pour un
+	recalage totalement automatique de deux maillages 
+
+20/03/09 Rémi Synave
+	* Correction d'un bug d'allocation de mémoire
+
+15/03/09  Rémi Synave
+	* Modification de la fonction d'épaississement (bug d'orientation
+	des faces)
+	* Modification des fonctions d'ouverture/sauvegarde des fichiers
+	STL 
+
+26/03/11 Rémi Synave
+	* Correction d'un bug dû à un problème de locale par défaut du
+	système

Fichier diff supprimé car celui-ci est trop grand
+ 668 - 224
LICENSE


+ 166 - 0
LICENSE.LESSER

@@ -0,0 +1,166 @@
+		   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions. 
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version. 
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
+

+ 7 - 0
Makefile

@@ -0,0 +1,7 @@
+all:
+	@(cd src && $(MAKE))
+
+clean:
+	@(cd src && $(MAKE) clean)
+	@(cd doc && $(MAKE) clean)
+	rm -rf include/*~ *~

+ 0 - 0
NEWS


+ 13 - 2
README.md

@@ -1,4 +1,15 @@
 # a2ri
 
-Bibliothèque de manipulation de maillage triangulaire.
-Le site web original est ici : liba2ri.free.fr mais je n'ai plus la main dessus.
+Bibliothèque de manipulation de maillage triangulaire.
+Le site web original est ici : liba2ri.free.fr mais je n'ai plus la main dessus.
+
+Le but de cette bibliothèque est le recalage, la reconstruction et le traitement de surfaces dans le cadre d’une chaîne de traitement complète, de l'acquisition à l'impression 3D. Les principales fonctionnalités sont donc :
+- manipulation de maillages triangulaires
+- recalage de maillages triangulaires
+- reconstruction de surface à partir des vues obtenues par acquisition au scanner laser
+- traitement d’une surface non imprimable en vue d'une impression
+
+Auteur : Rémi Synave
+email : remi.synave@nuiv-littoral.fr
+
+Ce code est toujours en développement. N'hésitez pas à signaler les BUGS !!

+ 26 - 0
TODO

@@ -0,0 +1,26 @@
+    * Revoir et réécrire la documentation.
+    * Programmer le passage d’une structure de données à une autre : VEF <-> hash <-> winged edge.
+    * Mise en place des autotools pour la compilation des bibliothèques et leur installation.
+    * Commenter le code. (les parties qui n’ont pas encore été commentées)
+    * Documenter les algos : donner les références ou expliciter la logique de l’algorithme.
+    * Optimiser les algos. (ICP : calcul plus rapide de la nouvelle erreur ?)
+    * Remplacer space partition par kd tree ou octree. (et faire l’étude)
+    * Réécrire les fonctions de sauvegarde/chargement des fichiers obj, pgn, gts, ply etc. en fonction des standards.
+    * Bug dans la fonction calculant le nombre de parties connexes d’un maillage : apparemment le sprintf (??!!) du look_for de la hashtable.
+    * Conversion rapide d’un format de fichier en un autre format de fichier (sans forcément passer par les structures de données).
+    * Fonctions de clonage de vef_model.
+    * Calcul de l’équation d’un plan moyen de n points à vérifier.
+    * Calcul de la courbure moyenne et courbure de Gauss.
+    * Shapematching.
+    * Bug dans la fonction du graphe couvrant minimal (exemple octopus.pgn)
+    * Erreurs BPA : 
+      	      -> modele : logo_aquitaine rayon = 10 - la boule n'est pas bien definie
+	      -> modele : grille rayon = pas entre deux cases*2 - triangles croisés
+	      -> modele : minolta_range7/fantome vue 01-data-16.stl.wrl rayon = 0.1 - loop dans la creation des triangles
+    * Conversion en CPP
+    * Revoir les Structures de Données ?
+    * Revoir les ajouts/suppression de points/arêtes/faces des les SD
+    * Loom3D :
+	      -> gestion des scènes
+	      -> implémentation des screenshots
+    * Interface graphique pour géodésique

BIN
a2ri.png


+ 275 - 0
a2ri.svg

@@ -0,0 +1,275 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+   sodipodi:docname="a2ri.svg"
+   inkscape:export-filename="/home/remi/Images/a2ri_trianglule.png"
+   inkscape:export-xdpi="600"
+   inkscape:export-ydpi="600">
+  <defs
+     id="defs2" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6"
+     inkscape:cx="312.32967"
+     inkscape:cy="120.63115"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1848"
+     inkscape:window-height="1016"
+     inkscape:window-x="72"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     showguides="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid10" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#c0c0c0;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1"
+       d="m 13.229167,283.77083 h 5.291666 V 269.21875 H 23.8125 v 14.55208 h 5.291667 l 0,-33.07291 h -15.875 z"
+       id="path18"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccc" />
+    <path
+       style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1"
+       d="m 18.520833,255.98958 v 5.29167 H 23.8125 v -5.29167 z"
+       id="path26"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#c0c0c0;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1"
+       d="m 33.072916,250.69791 v 6.61459 H 43.65625 v 6.61458 H 33.072917 v 19.84375 h 15.875 v -6.61458 H 38.364583 v -6.61458 h 10.583334 v -19.84375 z"
+       id="path4584"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#c0c0c0;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1"
+       d="m 52.916666,250.69791 v 33.07292 h 5.291667 V 269.21875 H 63.5 v 14.55208 h 5.291667 V 263.92708 H 67.46875 v -13.22916 z"
+       id="path4620"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1"
+       d="m 56.885416,254.66666 v 7.9375 l 6.614584,1e-5 v -7.9375 z"
+       id="path4622"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#c0c0c0;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 72.760416,283.77083 h 15.875 l 10e-7,-6.61458 H 83.34375 V 257.3125 h 5.291667 v -6.61458 h -15.875 v 6.61458 h 5.291666 v 19.84375 h -5.291666 z"
+       id="path4624"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 13.229167,250.69791 5.291666,5.29167"
+       id="path4626"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 13.229167,250.69792 5.291666,10.58333 v 7.9375 l -5.291666,-18.52083"
+       id="path4628"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 18.520833,269.21875 -5.291666,14.55208"
+       id="path4630"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 18.520833,261.28125 5.291667,7.9375"
+       id="path4632"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 23.8125,261.28125 v 7.9375"
+       id="path4634"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 18.520833,255.98958 10.583333,-5.29167"
+       id="path4636"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 23.8125,255.98958 5.291666,-5.29167"
+       id="path4638"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 23.8125,261.28125 5.291666,-10.58334"
+       id="path4640"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 29.104166,250.69791 -5.291666,18.52084 5.291667,14.55208"
+       id="path4642"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 43.656249,263.92708 5.291667,6.61459"
+       id="path4648"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 43.656249,263.92708 -5.291666,6.61459 -5.291666,-6.61459"
+       id="path4650"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 38.364583,270.54167 -5.291667,13.22916"
+       id="path4652"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 38.364583,277.15625 -5.291667,6.61458"
+       id="path4654"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="M 48.947916,283.77083 38.364583,277.15625"
+       id="path4656"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 33.072916,250.69791 10.583333,6.61459"
+       id="path4658"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 43.656249,257.3125 5.291667,-6.61459"
+       id="path4660"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 43.656249,263.92708 5.291667,-13.22917"
+       id="path4662"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 52.916666,250.69791 3.96875,3.96875 10.583334,-3.96874"
+       id="path4664"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 67.468749,250.69791 -3.96875,3.96875 3.968751,9.26042"
+       id="path4666"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 63.499999,262.60416 3.96875,1.32292"
+       id="path4668"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 63.499999,269.21875 3.96875,-5.29167"
+       id="path4670"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 68.791666,263.92708 -5.291667,5.29167 5.291668,14.55208"
+       id="path4672"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 63.499999,269.21875 v -6.61459"
+       id="path4674"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 58.208333,269.21875 5.291666,-6.61459"
+       id="path4676"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 56.885416,262.60416 1.322917,6.61459"
+       id="path4678"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 58.208333,269.21875 -5.291667,14.55208"
+       id="path4680"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 52.916666,283.77083 3.96875,-21.16667 -3.968749,-11.90624"
+       id="path4682"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 78.052082,277.15625 -5.291666,6.61458"
+       id="path4684"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 83.343749,277.15625 5.291667,6.61458"
+       id="path4686"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="M 83.343749,277.15625 H 78.052082"
+       id="path4688"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 78.052082,257.3125 h 5.291667"
+       id="path4690"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 88.635416,250.69791 -5.291667,6.61459"
+       id="path4692"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 72.760416,250.69791 5.291666,6.61459"
+       id="path4694"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="M 78.052082,277.15625 83.343749,257.3125"
+       id="path4696"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 78.052082,257.3125 10.583334,-6.61459"
+       id="path4698"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 83.343749,277.15625 -10.583333,6.61458"
+       id="path4700"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>

+ 264 - 0
a2ri_final.svg

@@ -0,0 +1,264 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg8"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+   sodipodi:docname="a2ri_final.svg"
+   inkscape:export-filename="/home/remi/Images/a2ri_trianglule.png"
+   inkscape:export-xdpi="600"
+   inkscape:export-ydpi="600">
+  <defs
+     id="defs2" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6"
+     inkscape:cx="134.04646"
+     inkscape:cy="119.91686"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1848"
+     inkscape:window-height="1016"
+     inkscape:window-x="72"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     showguides="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid10" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#c0c0c0;fill-opacity:1;stroke:#000000;stroke-width:0.75590551;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 50 947.51953 L 50 1072.5195 L 70 1072.5195 L 70 1017.5195 L 90 1017.5195 L 90 1072.5195 L 110 1072.5195 L 110 947.51953 L 50 947.51953 z M 70 967.51953 L 90 967.51953 L 90 987.51953 L 70 987.51953 L 70 967.51953 z "
+       transform="scale(0.26458333)"
+       id="path18" />
+    <path
+       style="fill:#c0c0c0;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1"
+       d="m 33.072916,250.69791 v 6.61459 H 43.65625 v 6.61458 H 33.072917 v 19.84375 h 15.875 v -6.61458 H 38.364583 v -6.61458 h 10.583334 v -19.84375 z"
+       id="path4584"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#c0c0c0;fill-opacity:1;stroke:#000000;stroke-width:0.75590551;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 200 947.51953 L 200 1072.5195 L 220 1072.5195 L 220 1017.5195 L 240 1017.5195 L 240 1072.5195 L 260 1072.5195 L 260 997.51953 L 255 997.51953 L 255 947.51953 L 200 947.51953 z M 215 962.51953 L 240 962.51953 L 240 992.51953 L 215 992.51953 L 215 962.51953 z "
+       transform="scale(0.26458333)"
+       id="path4620" />
+    <path
+       style="fill:#c0c0c0;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 72.760416,283.77083 h 15.875 l 10e-7,-6.61458 H 83.34375 V 257.3125 h 5.291667 v -6.61458 h -15.875 v 6.61458 h 5.291666 v 19.84375 h -5.291666 z"
+       id="path4624"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 13.229167,250.69791 5.291666,5.29167"
+       id="path4626"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 13.229167,250.69792 5.291666,10.58333 v 7.9375 l -5.291666,-18.52083"
+       id="path4628"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 18.520833,269.21875 -5.291666,14.55208"
+       id="path4630"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 18.520833,261.28125 5.291667,7.9375"
+       id="path4632"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 23.8125,261.28125 v 7.9375"
+       id="path4634"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 18.520833,255.98958 10.583333,-5.29167"
+       id="path4636"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 23.8125,255.98958 5.291666,-5.29167"
+       id="path4638"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 23.8125,261.28125 5.291666,-10.58334"
+       id="path4640"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 29.104166,250.69791 -5.291666,18.52084 5.291667,14.55208"
+       id="path4642"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 43.656249,263.92708 5.291667,6.61459"
+       id="path4648"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 43.656249,263.92708 -5.291666,6.61459 -5.291666,-6.61459"
+       id="path4650"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 38.364583,270.54167 -5.291667,13.22916"
+       id="path4652"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 38.364583,277.15625 -5.291667,6.61458"
+       id="path4654"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="M 48.947916,283.77083 38.364583,277.15625"
+       id="path4656"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 33.072916,250.69791 10.583333,6.61459"
+       id="path4658"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 43.656249,257.3125 5.291667,-6.61459"
+       id="path4660"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 43.656249,263.92708 5.291667,-13.22917"
+       id="path4662"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 52.916666,250.69791 3.96875,3.96875 10.583334,-3.96874"
+       id="path4664"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 67.468749,250.69791 -3.96875,3.96875 3.968751,9.26042"
+       id="path4666"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 63.499999,262.60416 3.96875,1.32292"
+       id="path4668"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 63.499999,269.21875 3.96875,-5.29167"
+       id="path4670"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 68.791666,263.92708 -5.291667,5.29167 5.291668,14.55208"
+       id="path4672"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 63.499999,269.21875 v -6.61459"
+       id="path4674"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 58.208333,269.21875 5.291666,-6.61459"
+       id="path4676"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 56.885416,262.60416 1.322917,6.61459"
+       id="path4678"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 58.208333,269.21875 -5.291667,14.55208"
+       id="path4680"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 52.916666,283.77083 3.96875,-21.16667 -3.968749,-11.90624"
+       id="path4682"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 78.052082,277.15625 -5.291666,6.61458"
+       id="path4684"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 83.343749,277.15625 5.291667,6.61458"
+       id="path4686"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="M 83.343749,277.15625 H 78.052082"
+       id="path4688"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 78.052082,257.3125 h 5.291667"
+       id="path4690"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 88.635416,250.69791 -5.291667,6.61459"
+       id="path4692"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 72.760416,250.69791 5.291666,6.61459"
+       id="path4694"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="M 78.052082,277.15625 83.343749,257.3125"
+       id="path4696"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 78.052082,257.3125 10.583334,-6.61459"
+       id="path4698"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.05;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 83.343749,277.15625 -10.583333,6.61458"
+       id="path4700"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>

BIN
a2ri_trianglule.png


BIN
ancienneVersion/a2ri-0.2.tar.gz


BIN
ancienneVersion/a2ri-0.2.zip


BIN
ancienneVersion/a2ri-0.3.tar.gz


BIN
ancienneVersion/a2ri-0.3.zip


+ 41 - 0
build_package.sh

@@ -0,0 +1,41 @@
+#! /bin/bash
+
+if [ $# -eq 1 ]
+then
+
+rep=$(pwd)/../a2ri-$1
+
+mkdir $rep
+cp -r * $rep/
+rm $rep/build_package.sh
+rm -rf $rep/CVS
+rm -rf $rep/*/CVS
+rm -rf $rep/*/*/CVS
+rm -rf $rep/*/*/*/CVS
+rm -rf $rep/*/*/*/*/CVS
+rm -rf $rep/*/*/*/*/*/CVS
+rm -rf $rep/*/*/*/*/*/*/CVS
+rm -rf $rep/*/*/*/*/*/*/*/CVS
+rm -rf $rep/*/*/*/*/*/*/*/*/CVS
+
+cd $rep
+make clean
+
+exemples=$(ls examples)
+
+for i in $exemples
+do
+    if [ "$i$" != "CVS" ]
+    then
+	cd $rep/examples/$i
+	make clean
+    fi
+done
+
+cd $rep/../
+
+tar czvf a2ri-$1.tar.gz a2ri-$1
+zip -r a2ri-$1.zip a2ri-$1
+
+rm -rf $rep
+fi

+ 1795 - 0
doc/Doxyfile

@@ -0,0 +1,1795 @@
+# Doxyfile 1.8.1.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file 
+# that follow. The default is UTF-8 which is also the encoding used for all 
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
+# iconv built into libc) for the transcoding. See 
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should 
+# identify the project. Note that if you do not use Doxywizard you need 
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME           = liba2ri
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 0.2
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description 
+# for a project that appears at the top of each page and should give viewer 
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          = 
+
+# With the PROJECT_LOGO tag one can specify an logo or icon that is 
+# included in the documentation. The maximum height of the logo should not 
+# exceed 55 pixels and the maximum width should not exceed 200 pixels. 
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO           = 
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = 
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, 
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English 
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, 
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, 
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful if your file system 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like regular Qt-style comments 
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
+# interpret the first line (until the first dot) of a Qt-style 
+# comment as the brief description. If set to NO, the comments 
+# will behave just like regular Qt-style comments (thus requiring 
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only). 
+# A mapping has the form "name=value". For example adding 
+# "class=itcl::class" will allow you to use the command class in the 
+# itcl::class meaning.
+
+TCL_SUBST              = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Java. For instance, namespaces will be presented as packages, qualified 
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
+# sources. Doxygen will then generate output that is tailored for 
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it 
+# parses. With this tag you can assign which parser to use for a given extension. 
+# Doxygen has a built-in mapping, but you can override or extend it using this 
+# tag. The format is ext=language, where ext is a file extension, and language 
+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, 
+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make 
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C 
+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions 
+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING      = 
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all 
+# comments according to the Markdown format, which allows for more readable 
+# documentation. See http://daringfireball.net/projects/markdown/ for details. 
+# The output of markdown processing is further processed by doxygen, so you 
+# can mix doxygen, HTML, and XML commands with Markdown formatting. 
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT       = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
+# to include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also makes the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to 
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
+# Doxygen will parse them like normal C++ but will assume all classes use public 
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter 
+# and setter methods for a property. Setting this option to YES (the default) 
+# will make doxygen replace the get and set methods by a property in the 
+# documentation. This will only work if the methods are indeed getting or 
+# setting a simple type. If this is not the case, or you want to show the 
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and 
+# unions are shown inside the group in which they are included (e.g. using 
+# @ingroup) instead of on a separate page (for HTML and Man pages) or 
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and 
+# unions with only public data fields will be shown inline in the documentation 
+# of the scope in which they are defined (i.e. file, namespace, or group 
+# documentation), provided this scope is documented. If set to NO (the default), 
+# structs, classes, and unions are shown on a separate page (for HTML and Man 
+# pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
+# is documented as struct, union, or enum with the name of the typedef. So 
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
+# with name TypeT. When disabled the typedef will appear as a member of a file, 
+# namespace, or class. And the struct will be named TypeS. This can typically 
+# be useful for C code in case the coding convention dictates that all compound 
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
+# determine which symbols to keep in memory and which to flush to disk. 
+# When the cache is full, less often used symbols will be written to disk. 
+# For small to medium size projects (<1000 input files) the default value is 
+# probably good enough. For larger projects a too small cache size can cause 
+# doxygen to be busy swapping symbols to and from disk most of the time 
+# causing a significant performance penalty. 
+# If the system has enough physical memory increasing the cache will improve the 
+# performance by keeping more symbols in memory. Note that the value works on 
+# a logarithmic scale so increasing the size by one will roughly double the 
+# memory usage. The cache size is given by this formula: 
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+SYMBOL_CACHE_SIZE      = 0
+
+# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be 
+# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given 
+# their name and scope. Since this can be an expensive process and often the 
+# same symbol appear multiple times in the code, doxygen keeps a cache of 
+# pre-resolved symbols. If the cache is too small doxygen will become slower. 
+# If the cache is too large, memory is wasted. The cache size is given by this 
+# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, 
+# corresponding to a cache size of 2^16 = 65536 symbols.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be 
+# extracted and appear in the documentation as a namespace called 
+# 'anonymous_namespace{file}', where file will be replaced with the base 
+# name of the file that contains the anonymous namespace. By default 
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen 
+# will list include files with double quotes in the documentation 
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen 
+# will sort the (brief and detailed) documentation of class members so that 
+# constructors and destructors are listed first. If set to NO (the default) 
+# the constructors will appear in the respective orders defined by 
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. 
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO 
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
+# hierarchy of group names into alphabetical order. If set to NO (the default) 
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to 
+# do proper type resolution of all parameters of a function it will reject a 
+# match between the prototype and the implementation of a member function even 
+# if there is only one candidate or it is obvious which candidate to choose 
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen 
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or macro consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and macros in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. 
+# This will remove the Files entry from the Quick Index and from the 
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index 
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from 
+# the version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed 
+# by doxygen. The layout file controls the global structure of the generated 
+# output files in an output format independent way. To create the layout file 
+# that represents doxygen's defaults, run doxygen with the -l option. 
+# You can optionally specify a file name after the option, if omitted 
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            = 
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files 
+# containing the references data. This must be a list of .bib files. The 
+# .bib extension is automatically appended if omitted. Using this command 
+# requires the bibtex tool to be installed. See also 
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style 
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this 
+# feature you need bibtex and perl available in the search path.
+
+CITE_BIB_FILES         = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = /home/remi/Recherche/a2ri/src \
+                         /home/remi/Recherche/a2ri/include
+
+# This tag can be used to specify the character encoding of the source files 
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
+# also the default input encoding. Doxygen uses libiconv (or the iconv built 
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh 
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py 
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS          = *.c \
+                         *.h
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag. 
+# Note that relative paths are relative to the directory from which doxygen is 
+# run.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or 
+# directories that are symbolic links (a Unix file system feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
+# (namespaces, classes, functions, etc.) that should be excluded from the 
+# output. The symbol name can be a fully qualified name, a word, or if the 
+# wildcard * is used, a substring. Examples: ANamespace, AClass, 
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty or if 
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file 
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) 
+# and it is also possible to disable source filtering for a specific pattern 
+# using *.ext= (so without naming a filter). This option only has effect when 
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS = 
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 
+# link to the source code.  Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header. Note that when using a custom header you are responsible  
+# for the proper inclusion of any scripts and style sheets that doxygen 
+# needs, which is dependent on the configuration options used. 
+# It is advised to generate a default header using "doxygen -w html 
+# header.html footer.html stylesheet.css YourConfigFile" and then modify 
+# that header. Note that the header is subject to change so you typically 
+# have to redo this when upgrading to a newer version of doxygen or when 
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# style sheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or 
+# other source files which should be copied to the HTML output directory. Note 
+# that these files will be copied to the base HTML output directory. Use the 
+# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these 
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that 
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES       = 
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. 
+# Doxygen will adjust the colors in the style sheet and background images 
+# according to this color. Hue is specified as an angle on a colorwheel, 
+# see http://en.wikipedia.org/wiki/Hue for more information. 
+# For instance the value 0 represents red, 60 is yellow, 120 is green, 
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. 
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of 
+# the colors in the HTML output. For a value of 0 the output will use 
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to 
+# the luminance component of the colors in the HTML output. Values below 
+# 100 gradually make the output lighter, whereas values above 100 make 
+# the output darker. The value divided by 100 is the actual gamma applied, 
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, 
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 
+# page will contain the date and time when the page was generated. Setting 
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
+# documentation will contain sections that can be hidden and shown after the 
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of 
+# entries shown in the various tree structured indices initially; the user 
+# can expand and collapse entries dynamically later on. Doxygen will expand 
+# the tree to such a level that at most the specified number of entries are 
+# visible (unless a fully collapsed tree already exceeds this amount). 
+# So setting the number of entries 1 will produce a full collapsed tree by 
+# default. 0 is a special value representing an infinite number of entries 
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files 
+# will be generated that can be used as input for Apple's Xcode 3 
+# integrated development environment, introduced with OSX 10.5 (Leopard). 
+# To create a documentation set, doxygen will generate a Makefile in the 
+# HTML output directory. Running make will produce the docset in that 
+# directory and running "make install" will install the docset in 
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
+# it at startup. 
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
+# feed. A documentation feed provides an umbrella under which multiple 
+# documentation sets from a single provider (such as a company or product suite) 
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
+# should uniquely identify the documentation set bundle. This should be a 
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify 
+# the documentation publisher. This should be a reverse domain-name style 
+# string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file 
+# content.
+
+CHM_INDEX_ENCODING     = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and 
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated 
+# that can be used as input for Qt's qhelpgenerator to generate a 
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
+# be used to specify the file name of the resulting .qch file. 
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               = 
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to 
+# add. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   = 
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the 
+# custom filter to add. For more information please see 
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> 
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  = 
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this 
+# project's 
+# filter section matches. 
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> 
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  = 
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
+# be used to specify the location of Qt's qhelpgenerator. 
+# If non-empty doxygen will try to run qhelpgenerator on the generated 
+# .qhp file.
+
+QHG_LOCATION           = 
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files  
+# will be generated, which together with the HTML files, form an Eclipse help 
+# plugin. To install this plugin and make it available under the help contents 
+# menu in Eclipse, the contents of the directory containing the HTML and XML 
+# files needs to be copied into the plugins directory of eclipse. The name of 
+# the directory within the plugins directory should be the same as 
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before 
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin 
+# the directory name containing the HTML and XML files should also have 
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) 
+# at top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it. Since the tabs have the same information as the 
+# navigation tree you can set this option to NO if you already set 
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
+# structure should be generated to display hierarchical information. 
+# If the tag value is set to YES, a side panel will be generated 
+# containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). 
+# Windows users are probably better off using the HTML help feature. 
+# Since the tree basically has the same information as the tab index you 
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW      = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values 
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML 
+# documentation. Note that a value of 0 will completely suppress the enum 
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open 
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included 
+# as images in the HTML documentation. The default is 10. Note that 
+# when you change the font size after a successful doxygen run you need 
+# to manually remove any form_*.png images from the HTML output directory 
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images 
+# generated for formulas are transparent PNGs. Transparent PNGs are 
+# not supported properly for IE 6.0, but are supported on all modern browsers. 
+# Note that when changing this option you need to delete any form_*.png files 
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax 
+# (see http://www.mathjax.org) which uses client side Javascript for the 
+# rendering instead of using prerendered bitmaps. Use this if you do not 
+# have LaTeX installed or if you want to formulas look prettier in the HTML 
+# output. When enabled you may also need to install MathJax separately and 
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you need to specify the location relative to the 
+# HTML output directory using the MATHJAX_RELPATH option. The destination 
+# directory should contain the MathJax.js script. For instance, if the mathjax 
+# directory is located at the same level as the HTML output directory, then 
+# MATHJAX_RELPATH should be ../mathjax. The default value points to 
+# the MathJax Content Delivery Network so you can quickly see the result without 
+# installing MathJax.  However, it is strongly recommended to install a local 
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension 
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS     = 
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box 
+# for the HTML output. The underlying search engine uses javascript 
+# and DHTML and should work on any modern browser. Note that when using 
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets 
+# (GENERATE_DOCSET) there is already a search function so this one should 
+# typically be disabled. For large projects the javascript based search engine 
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be 
+# implemented using a PHP enabled web server instead of at the web client 
+# using Javascript. Doxygen will generate the search PHP script and index 
+# file to put on the web server. The advantage of the server 
+# based approach is that it scales better to large projects and allows 
+# full text search. The disadvantages are that it is more difficult to setup 
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name. 
+# Note that when enabling USE_PDFLATEX this option is only used for 
+# generating bitmaps for formulas in the HTML output, but not in the 
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for 
+# the generated latex document. The footer should contain everything after 
+# the last chapter. If it is left blank doxygen will generate a 
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include 
+# source code with syntax highlighting in the LaTeX output. 
+# Note that which sources are shown also depends on other settings 
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the 
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See 
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE        = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition that 
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all references to function-like macros 
+# that are alone on a line, have an all uppercase name, and do not end with a 
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each 
+# tag file the location of the external documentation should be added. The 
+# format of a tag file without this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths 
+# or URLs. Note that each tag file must have a unique name (where the name does 
+# NOT include the path). If a tag file is not located in the directory in which 
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option also works with HAVE_DOT disabled, but it is recommended to 
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc 
+# command. Doxygen will then run the mscgen tool (see 
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
+# the mscgen tool resides. If left empty the tool is assumed to be found in the 
+# default search path.
+
+MSCGEN_PATH            = 
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is 
+# allowed to run in parallel. When set to 0 (the default) doxygen will 
+# base this on the number of processors available in the system. You can set it 
+# explicitly to a value larger than 0 to get control over the balance 
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will use the Helvetica font for all dot files that 
+# doxygen generates. When you want a differently looking font you can specify 
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find 
+# the font, which can be done by putting it in a standard location or by setting 
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the 
+# directory containing the font.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the Helvetica font. 
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to 
+# set the path where dot can find it.
+
+DOT_FONTPATH           = 
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside 
+# the class node. If there are many fields or methods and many nodes the 
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS 
+# threshold limits the number of items for each type to make the size more 
+# managable. Set this to 0 for no limit. Note that the threshold may be 
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
+# doxygen will generate a call dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable call graphs 
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
+# doxygen will generate a caller dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable caller 
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include 
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are svg, png, jpg, or gif. 
+# If left blank png will be used. If you choose svg you need to set 
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files 
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to 
+# enable generation of interactive SVG images that allow zooming and panning. 
+# Note that this requires a modern browser other than Internet Explorer. 
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you 
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files 
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG        = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that 
+# contain msc files that are included in the documentation (see the 
+# \mscfile command).
+
+MSCFILE_DIRS           = 
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
+# nodes that will be shown in the graph. If the number of nodes in a graph 
+# becomes larger than this value, doxygen will truncate the graph, which is 
+# visualized by representing a node as a red box. Note that doxygen if the 
+# number of direct children of the root node in a graph is already larger than 
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that the size of a graph can be further restricted by 
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, because dot on Windows does not 
+# seem to support this out of the box. Warning: Depending on the platform used, 
+# enabling this option may lead to badly anti-aliased labels on the edges of 
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES

+ 7 - 0
doc/Makefile

@@ -0,0 +1,7 @@
+all:
+	@(cd src && $(MAKE))
+	mv src/*.pdf pdf/
+
+clean:
+	@(cd src && $(MAKE) clean)
+	rm -rf *~ pdf/*.pdf

+ 103 - 0
doc/src/Makefile

@@ -0,0 +1,103 @@
+all : model util matrix vector point geometry vertex edge face conversion topology bounding_box overlap icp quality subdivision hashtable graph space_partition polyhedron triangulation
+
+model :
+	latex $@.tex
+	dvipdf $@.dvi
+	
+hashtable :
+	latex $@.tex
+	dvipdf $@.dvi
+
+space_partition :
+	latex $@.tex
+	dvipdf $@.dvi
+
+triangulation :
+	latex $@.tex
+	dvipdf $@.dvi
+
+polyhedron :
+	latex $@.tex
+	dvipdf $@.dvi
+
+graph :
+	latex $@.tex
+	bibtex $@
+	latex $@.tex
+	latex $@.tex
+	dvipdf $@.dvi
+
+util :
+	latex $@.tex
+	dvipdf $@.dvi
+
+matrix :
+	latex $@.tex
+	dvipdf $@.dvi
+
+vector :
+	latex $@.tex
+	dvipdf $@.dvi
+
+point : 
+	latex $@.tex
+	dvipdf $@.dvi
+
+geometry :
+	latex $@.tex
+	dvipdf $@.dvi
+
+vertex :	
+	latex $@.tex
+	dvipdf $@.dvi
+
+edge :
+	latex $@.tex
+	dvipdf $@.dvi
+
+face :
+	latex $@.tex
+	dvipdf $@.dvi
+
+conversion :
+	latex $@.tex
+	dvipdf $@.dvi
+
+topology :
+	latex $@.tex
+	dvipdf $@.dvi
+
+bounding_box :
+	latex $@.tex
+	bibtex $@
+	latex $@.tex
+	latex $@.tex
+	dvipdf $@.dvi
+
+overlap :
+	latex $@.tex
+	dvipdf $@.dvi
+
+icp :
+	latex $@.tex
+	bibtex $@
+	latex $@.tex
+	latex $@.tex
+	dvipdf $@.dvi
+
+quality :
+	latex $@.tex
+	bibtex $@
+	latex $@.tex
+	latex $@.tex
+	dvipdf $@.dvi
+
+subdivision :
+	latex $@.tex
+	bibtex $@
+	latex $@.tex
+	latex $@.tex
+	dvipdf $@.dvi
+
+clean :
+	rm -f *~ *.aux *.log *.pdf *.dvi *.bbl *.blg

Fichier diff supprimé car celui-ci est trop grand
+ 124 - 0
doc/src/bounding_box.tex


+ 30 - 0
doc/src/conversion.tex

@@ -0,0 +1,30 @@
+\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 CONVERSION}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+Bibliothèque permettant de faire des conversion de format de fichiers.\\
+
+\section{Fonction}
+
+\textbullet \texttt{void vf\_model\_conversion(char* input, char* output)}\\
+Conversion d'un type de fichier vers un autre type de fichier. Les types de fichiers sont définis en fonction de leur extension.\\
+Formats supportés en ouverture : PGN, OFF, PLY, OBJ, WRL, VEF, GTS.\\
+Formats supportés en écriture : PGN, OFF, PLY, WRL, VEF.\\
+~//
+\underline{Paramètres et type de retour :}\\
+\texttt{input} : Chaine de caractères désignant un modèle.\\
+\texttt{ouput} : Chaine de caractères désignant le nom du nouveau modèle.\\
+\texttt{retour} : aucun.\\
+
+\end{document}

+ 83 - 0
doc/src/edge.tex

@@ -0,0 +1,83 @@
+\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 EDGE}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+Cette bibliothèque implémente les structures de données nécessaires au stockage des arêtes d'un maillage.\\
+Deux structures de données sont disponibles : \texttt{vf\_edge} et \texttt{vef\_vertex} pour la manipulation et le stockage des maillages \texttt{vf\_model} et \texttt{vef\_model}.\\
+
+\section{Structures de données}
+
+Cette structure contient les deux sommets \texttt{ve1} et \texttt{ve2} qui sont les extrémités de l'arête, une liste \texttt{sharedfaces} d'index des faces partagées par l'arête et un index \texttt{midvertex} à utilité variable servant notamment pour la subdivision lors du découpage des arêtes.\\
+\begin{verbatim}
+typedef struct
+{
+  int ve1; //extrémité de l'arête
+  int ve2; //extrémité de l'arête
+  int *sharedfaces; //liste des faces partagées
+  int nbsharedfaces; //nombre de faces partagées
+  int midvertex; //index à utilité variable
+}vf_edge;
+\end{verbatim}
+
+Les \texttt{vef\_edge} sont utilisées pour le stockage des arêtes dans les \texttt{vef\_model}. Les arêtes sont composées des sommets \texttt{ve1} et \texttt{ve2} qui sont les extrémités et une liste de faces partagées \texttt{sharedfaces} par celle-ci.\\
+\begin{verbatim}
+typedef struct
+{
+  int ve1; //extrémité de l'arête
+  int ve2; //extrémité de l'arête
+  int *sharedfaces; //liste des faces partagées
+  int nbsharedfaces; //nombre de faces partagées
+}vef_edge;
+\end{verbatim}
+
+\section{Fonctions}
+\subsection{Fonction utilisée par \texttt{vf\_edge}}
+
+\textbullet \texttt{void vf\_edge\_display(vf\_edge e)}\\
+Affichage de l'arête sous la forme :\\
+\begin{verbatim}
+ARETE : (ve1,ve2)
+\end{verbatim}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{e} : arete de type vf\_edge.\\
+\texttt{retour} : aucun.\\
+
+\textbullet \texttt{void vf\_edge\_free(vf\_edge *e)}\\
+Libération de la mémoire allouée pour les \texttt{sharedfaces}.
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{e} : arete de type vf\_edge.\\
+\texttt{retour} : aucun.\\
+
+\subsection{Fonction utilisée par \texttt{vef\_edge}}
+
+\textbullet \texttt{void vef\_edge\_display(vef\_edge e)}\\
+Affichage de l'arête sous la forme :\\
+\begin{verbatim}
+ARETE : (ve1,ve2)
+\end{verbatim}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{e} : arete de type vef\_edge.\\
+\texttt{retour} : aucun.\\
+
+\textbullet \texttt{void vef\_edge\_free(vef\_edge *e)}\\
+Libération de la mémoire allouée pour les \texttt{sharedfaces}.
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{e} : arete de type vef\_edge.\\
+\texttt{retour} : aucun.\\
+
+\end{document}

+ 129 - 0
doc/src/face.tex

@@ -0,0 +1,129 @@
+\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 FACE}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+Cette bibliothèque implémente les structures de données nécessaires au stockage des faces d'un maillage ainsi que des fonctions pour manipuler celles-ci.\\
+Deux structures de données sont disponibles : \texttt{vf\_face} pour le stockage des maillages \texttt{vf\_model} et \texttt{vef\_face} pour le stockage des maillages \texttt{vef\_model}.\\
+Les faces, quelles soient \texttt{vf\_face} ou \texttt{vef\_face}, sont orientées. Une \texttt{vf\_face} (resp. \texttt{vef\_face}) définie par les sommets (resp. arêtes) $(0,2,5)$ sera l'inverse de la \texttt{vf\_face} (resp. \texttt{vef\_face}) défini par les sommets (resp. arêtes) $(0,5,2)$.\\
+
+\section{Structures de données}
+
+Les faces des \texttt{vf\_model} sont définis par trois sommets : \texttt{ve1,ve2,ve3}, les trois index des sommets de la structure \texttt{vf\_face}.\\
+La variable \texttt{type} permet d'enregistrer le type de la face s'il est disponible.\\
+\begin{verbatim}
+typedef struct
+{
+  int ve1; //premier sommet de la face
+  int ve2; //second sommet de la face
+  int ve3; //troisième sommet de la face
+  int type; //type de la face : UNKNOW, BLACK, WHITE ou GRAY
+}vf_face;
+\end{verbatim}
+
+Les faces des \texttt{vef\_model} sont définis par trois arêtes : \texttt{ed1,ed2,ed3}, les trois index des arêtes de la structure \texttt{vef\_face}.\\
+La variable \texttt{type} permet d'enregistrer le type de la face s'il est disponible.\\
+\begin{verbatim}
+typedef struct
+{
+  int ed1; //première arête de la face
+  int ed2; //seconde arête de la face
+  int ed3; //troisième arête de la face
+  int type; //type de la face : UNKNOW, BLACK, WHITE ou GRAY
+}vef_face;
+\end{verbatim}
+
+\section{Fonctions}
+\subsection{Fonctions utilisant \texttt{vf\_face}}
+
+\textbullet \texttt{void vf\_face\_display(vf\_face f)}\\
+Affichage des trois sommets de la face sous la forme :\\
+\begin{verbatim}
+FACE : (ve1,ve2,ve3)
+\end{verbatim}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{f} : face de type vf\_face.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_face\_reverse(vf\_face *f)}\\
+Inversion de l'orientation de la face.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{f} : face de type vf\_face.\\
+\texttt{retour} : aucun.\\
+
+\textbullet \texttt{int vf\_face\_contains(vf\_face *f, int numvertex)}\\
+Teste la présence du sommet \texttt{numvertex} dans la face \texttt{f}.
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{f} : face de type vf\_face.\\
+\texttt{numvertex} : numéro du sommet à tester.\\
+\texttt{retour} : 1 si le sommet apparatient à la face, 0 sinon.\\
+
+\textbullet \texttt{void vf\_face\_free(vf\_face *f)}\\
+Libération de la mémoire allouée pour les \texttt{sharedpolyhedrons}.
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{f} : face de type vf\_face.\\
+\texttt{retour} : aucun.\\
+
+\subsection{Fonctions utilisant \texttt{vef\_face}}
+
+\textbullet \texttt{void vef\_face\_display(vef\_face f)}\\
+Affichage des trois aretes de la face sous la forme :\\
+\begin{verbatim}
+FACE : (ed1,ed2,ed3)
+\end{verbatim}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{f} : face de type vefh\_face.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_face\_reverse(vef\_face *f)}\\
+Inversion de l'orientation de la face.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{f} : face de type vefh\_face.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_face\_get\_vertices(vef\_face f, vef\_edge *list, int *ve1, int *ve2, int *ve3)}\\
+Permet de retrouver les index des trois sommets orientés de la face.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{f} : face de type vef\_face.\\
+\texttt{list} : liste des aretes vef\_edge du modèle.\\
+\texttt{ve1} : numéro du premier sommet.\\
+\texttt{ve2} : numéro du second sommet.\\
+\texttt{ve3} : numéro du troisième sommet.\\
+\texttt{retour} : aucun.\\
+
+\textbullet \texttt{int vef\_face\_contains(vf\_face *f, int numvertex)}\\
+Teste la présence du sommet \texttt{numvertex} dans la face \texttt{f}.
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{f} : face de type vef\_face.\\
+\texttt{numvertex} : numéro du sommet à tester.\\
+\texttt{retour} : 1 si le sommet apparatient à la face, 0 sinon.\\
+
+\textbullet \texttt{void vef\_face\_free(vef\_face *f)}\\
+Libération de la mémoire allouée pour les \texttt{sharedpolyhedrons}.
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{f} : face de type vef\_face.\\
+\texttt{retour} : aucun.\\
+
+\end{document}

+ 259 - 0
doc/src/geometry.tex

@@ -0,0 +1,259 @@
+\documentclass[a4paper,12pt]{article}
+
+\usepackage[french]{babel}
+\usepackage[T1]{fontenc} 
+\usepackage[latin1]{inputenc}
+\usepackage{amsmath}
+\usepackage{graphicx}
+\usepackage{times}
+
+\author{Rémi Synave, Stefka Gueorguieva, Pascal Desbarats}
+\title{Manuel de la bibliothèque GEOMETRY}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+Cette bibliothèque implémente des calculs géométriques sur les points, vecteurs, triangles etc.
+
+\section{Fonctions}
+
+\textbullet \texttt{double point3d\_length(point3d p1, point3d p2)}\\
+Calcul de la longueur entre deux \texttt{point3d}.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{p1} : premier point.\\
+\texttt{p2} : second point.\\
+\texttt{retour} : longueur entre les deux points.\\
+
+
+\textbullet \texttt{double point3d\_square\_length(point3d p1, point3d p2)}\\
+Calcul de la longueur au carré entre deux \texttt{point3d}.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{p1} : premier point.\\
+\texttt{p2} : second point.\\
+\texttt{retour} : longueur au carré entre les deux points.\\
+
+
+\textbullet \texttt{double point2d\_length(point2d p1, point2d p2)}\\
+Calcul de la longueur entre deux \texttt{point2d}.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{p1} : premier point.\\
+\texttt{p2} : second point.\\
+\texttt{retour} : longueur entre les deux points.\\
+
+
+\textbullet \texttt{void equation\_plan(point3d *p, int size, double *aeq, double *beq, double *ceq, double *deq)}\\
+Calcul de l'équation d'un plan définit par un ensemble de points en utilisant la mèthode du plan des moindres carrés.\\
+Cette méthode, calculant l'équation d'un plan moyen, n'est pas exacte sauf dans le cas où le nombre de points passé à la fonction est de trois.\\
+\textbf{Algortihme} (http://www.a525g.com/mathematiques/moindres-carres.php) :\\
+Soit un ensemble de \texttt{size} points \texttt{p}.\\
+Nous cherchons \texttt{aeq,beq,c,eq,deq} tel que :\\
+$$aeq \times x+beq \times y+ceq \times z+deq=0$$\\
+$aeq=\sum_{i=0}^{size-1}(y_i-y_{(i+1) \% size})\times(z_i-z_{(i+1) \% size})$\\
+$beq=\sum_{i=0}^{size-1}(z_i-z_{(i+1) \% size})\times(x_i-x_{(i+1) \% size})$\\
+$ceq=\sum_{i=0}^{size-1}(x_i-x_{(i+1) \% size})\times(y_i-y_{(i+1) \% size})$\\
+$x_{av} = \frac {\sum_{i=0}^{size-1} x_i} {size}$\\
+$y_{av} = \frac {\sum_{i=0}^{size-1} y_i} {size}$\\
+$z_{av} = \frac {\sum_{i=0}^{size-1} z_i} {size}$\\
+$deq=-\begin{pmatrix} x_{av}&y_{av}&z_{av}\end{pmatrix} \times \begin{pmatrix} a&b&c\end{pmatrix}^T$\\
+avec $\%$ l'opérateur modulo.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{p} : liste de point pour lesquels on veut calculer le plan moyen.\\
+\texttt{size} : nombre de point du tableau.\\
+\texttt{aeq} : paramètre a de l'équation de plan.\\
+\texttt{beq} : paramètre b de l'équation de plan.\\
+\texttt{ceq} : paramètre c de l'équation de plan.\\
+\texttt{deq} : paramètre d de l'équation de plan.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void plan\_lms\_contraint(point3d A, point3d B, point3d *listept, int size, point3d *C)}\\
+Calcule le plan moyen de la liste de points \texttt{listept} passant par les deux points \texttt{A} et \texttt{B}. Les points \texttt{A} et \texttt{B} sont fixés. L'algorithme calcule le point \texttt{C} pour former le plan.
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{A} : premier point - le plan est contraint à passer par celui-ci.\\
+\texttt{B} : second point - le plan est contraint à passer par celui-ci.\\
+\texttt{listept} : liste de point servant à calculer le troisieme point du plan.\\
+\texttt{size} : nombre de point de la liste.\\
+\texttt{C} : troisième point calculé formant le plan.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{double point3d\_area(point3d p1, point3d p2, point3d p3)}\\
+Calcul de l'aire du triangle défini par les trois \texttt{point3d}.\\
+\textbf{Formule pour le calcul de l'aire d'une triangle ABC :}\\
+$$Aire=\frac {||\overrightarrow{AB}\otimes\overrightarrow{AC}||} 2$$\\
+avec $||\overrightarrow{U}||$ la norme du vecteur $\overrightarrow{U}$.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{p1} : premier point du triangle.\\
+\texttt{p2} : second point du triangle.\\
+\texttt{p3} : troisieme point du triangle.\\
+\texttt{retour} : aire du triangle défini par les trois points.\\
+
+
+\textbullet \texttt{void base\_modification\_3d\_to\_2d(point3d p, point3d origin, vector3d base1, vector3d base2, point2d *newp)}\\
+Changement de base du \texttt{point3d p} vers une base d'origine le \texttt{point3d origin} et de vecteur unitaire (\texttt{base1,base2}). Le nouveau point est un \texttt{point2d} exprimé dans la nouvelle base.\\
+\textbf{Exemple :}\\
+\texttt{point3d} de départ : \texttt{p}=(2,1,5)\\
+Nouvelle base : \texttt{origin}=(1,1,1), \texttt{base1}=(1,0,0), \texttt{base2}=(0,0,1)\\
+\texttt{point2d} trouvé : \texttt{newp}=(1,4).\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{p} : point que l'on veut changer de base.\\
+\texttt{origin} : origine de la nouvelle base.\\
+\texttt{base1} : premier vecteur de la base.\\
+\texttt{base2} : second vecteur de la base.\\
+\texttt{newp} : point dans la nouvelle base.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void find\_second\_base\_vector(vector3d AB, vector3d AC, vector3d *U)}\\
+Trouve le second \texttt{vector3d} normal à \texttt{AB} et contenu dans le même plan que (\texttt{AB},\texttt{AC}).\\
+\textbf{Algorithme :}\\
+Le produit vectoriel ($\overrightarrow{AB}$,$\overrightarrow{AC}$) nous donne un vecteur $\overrightarrow{W}$ normal au plan formé par ($\overrightarrow{AB}$,$\overrightarrow{AC}$).\\
+Un second produit vectoriel ($\overrightarrow{W}$,$\overrightarrow{AB}$) nous donne le vecteur normal au plan formé par ($\overrightarrow{W}$,$\overrightarrow{AB}$) et donc le vecteur recherché.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{AB} : Premier vecteur de la base.\\
+\texttt{AC} : Second vecteur formant un plan avec AB.\\
+\texttt{U} : Vecteur calculé contenu dans le plan ABC et normal à AB.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int point\_in\_triangle(point3d M, point3d A, point3d B, point3d C)}\\
+Vérifie si un \texttt{point3d M} se trouve à l'intérieur du triangle ABC.\\
+\textbf{Algorithme :}\\
+si $\widehat{AMB}+\widehat{BMC}+\widehat{CMA}==360$ alors le point est à l'intérieur du triangle (voir figure \ref{point_dans_triangle} et \ref{point_non_dans_triangle}).\\
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=8cm]{./images/point_dans_triangle.eps}
+\caption{Le point \texttt{M} est dans le triangle ABC -> somme des angles = 360}
+\label{point_dans_triangle}
+\end{figure}
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=8cm]{./images/point_non_dans_triangle.eps}
+\caption{Le point \texttt{M} n'est pas dans le triangle ABC -> somme des angles = 0}
+\label{point_non_dans_triangle}
+\end{figure}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{M} : point à tester.\\
+\texttt{A} : premier point du triangle.\\
+\texttt{B} : second point du triangle.\\
+\texttt{C} : troisieme point du triangle.\\
+\texttt{retour} : 1 si le point M est contenu dans le triangle ABC, 0 sinon.\\
+
+\textbullet \texttt{double vector3d\_angle\_radian(vector3d v1, vector3d v2)}\\
+Calcule l'angle en radian entre les deux \texttt{vector3d v1} et \texttt{v2}.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{v1} : premier vecteur.\\
+\texttt{v2} : second vecteur.\\
+\texttt{retour} : angle formé par les deux vecteurs en radian.\\
+
+
+\textbullet \texttt{double vector3d\_angle\_degre(vector3d v1, vector3d v2)}\\
+Calcule l'angle en degré entre les deux \texttt{vector3d v1} et \texttt{v2}.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{v1} : premier vecteur.\\
+\texttt{v2} : second vecteur.\\
+\texttt{retour} : angle formé par les deux vecteurs en degré.\\
+
+
+\textbullet \texttt{point3d incircle\_center(point3d A, point3d B, point3d C)}\\
+Calcul du centre du cercle inscrit au triangle ABC.\\
+\textbf{Formule :}(http://en.wikipedia.org/wiki/Incircle)\\
+Soit le triangle ABC défini par les trois points :$ A (x_a,y_a,z_a)$, $B (x_b,y_b,z_b)$ et $C (x_c,y_c,z_c)$. (voir figure \ref{cercle_inscrit})\\
+Le centre $(x_{centre},y_{centre},z_{centre})$ du cercle inscrit au triangle ABC est :\\
+$x_{centre}=\frac {a \times x_a+b \times x_b+c \times x_c} {a+b+c}$\\
+$y_{centre}=\frac {a \times y_a+b \times y_b+c \times y_c} {a+b+c}$\\
+$z_{centre}=\frac {a \times z_a+b \times z_b+c \times z_c} {a+b+c}$\\
+avec $a=||\overrightarrow{BC}||$, $b=||\overrightarrow{AC}||$ et $c=||\overrightarrow{AB}||$.
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=10cm]{./images/cercle_inscrit.eps}
+\caption{Calcul du centre du cercle insrit au triangle.}
+\label{cercle_inscrit}
+\end{figure}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{A} : premier point du triangle.\\
+\texttt{B} : second point du triangle.\\
+\texttt{C} : troisème point du triangle.\\
+\texttt{retour} : point contenant le centre du cercle inscrit au triangle.\\
+
+
+\textbullet \texttt{point3d circumcircle\_center(point3d A, point3d B, point3d C)}\\
+Calcul du centre du cercle circonscrit du triangle ABC.\\
+\textbf{Formule : (livre 3D Math Pimer for Graphics and Game Development)}\\
+Soit : \\
+$\overrightarrow{e_1}=\overrightarrow{BC}$\\
+$\overrightarrow{e_2}=\overrightarrow{CA}$\\
+$\overrightarrow{e_3}=\overrightarrow{AB}$\\
+~\\
+$d_1=-\overrightarrow{e_2}.\overrightarrow{e_3}$\\
+$d_2=-\overrightarrow{e_3}.\overrightarrow{e_1}$\\
+$d_3=-\overrightarrow{e_1}.\overrightarrow{e_2}$\\
+~\\
+$c_1=d_2*d_3$\\
+$c_2=d_3*d_1$\\
+$c_3=d_1*d_2$\\
+$c=c_1+c_2+c_3$\\
+~\\
+$circumcircle\_center=\frac{c_2+c_3}{2\times c}A+\frac{c_3+c_1}{2\times c}B+\frac{c_1+c_2}{2\times c}C$\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{A} : premier point du triangle.\\
+\texttt{B} : second point du triangle.\\
+\texttt{C} : troisème point du triangle.\\
+\texttt{retour} : point contenant le centre du cercle circonscrit au triangle.\\
+
+\textbullet \texttt{double distance\_point\_straight\_line(point3d M, point3d A, point3d B)}\\
+Calcul de la distance entre un point M et la \underline{\textbf{droite}} (AB) (voir figure \ref{distance_point_ligne}).\\
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=10cm]{./images/distance_point_ligne.eps}
+\caption{La distance entre M et (AB) est de d et la distance entre M' et (AB) est de d'.}
+\label{distance_point_ligne}
+\end{figure}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{M} : point M dont on veut connaitre la distance à la droite (AB).\\
+\texttt{A} : premier point définissant la ligne.\\
+\texttt{B} : second point définissant la ligne.\\
+\texttt{retour} : distance entre M et la droite (AB).\\
+
+
+\textbullet \texttt{double distance\_point\_plane(point3d M, point3d A, point3d B, point3d C)}\\
+Calcul de la distance entre un point M et le plan défini par les trois points A,B et C.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{M} : point M dont on veut connaitre la distance au plan.\\
+\texttt{A} : premier point définissant le plan.\\
+\texttt{B} : second point définissant le plan.\\
+\texttt{C} : troisième point définissant le plan.\\
+\texttt{retour} : distance entre M et le plan.\\
+
+
+\textbullet \texttt{void sample\_triangle(point3d A, point3d B, point3d C, int nb\_sample, point3d **list)}\\
+Echantillonnage du triangle ABC.\\
+Le nombre d'échantillons voulu est passé en paramètre et la liste d'échantillons est stockée dans \texttt{list}.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{A} : premier point du triangle.\\
+\texttt{B} : second point du triangle.\\
+\texttt{C} : troisième point du triangle.\\
+\texttt{nb\_sample} : nombre d'échantillons souhaités.\\
+\texttt{list} : liste d'échantillons.\\
+\texttt{retour} : aucun.\\
+
+
+\end{document}

+ 267 - 0
doc/src/graph.tex

@@ -0,0 +1,267 @@
+\documentclass[a4paper,12pt]{article}
+
+\usepackage[french]{babel}
+\usepackage[T1]{fontenc} 
+\usepackage[latin1]{inputenc}
+\usepackage{epsfig}
+\usepackage{times}
+%\usepackage{amsmath}
+
+\author{Rémi Synave, Stefka Gueorguieva, Pascal Desbarats}
+\title{Manuel de la bibliothèque GRAPH}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+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.
+
+
+\section{Fonctions}
+\section{Fonctions utilisant les \texttt{vf\_model}}
+\textbullet \texttt{void vf\_model\_dijkstra(vf\_model *m, int ve\_dep, int ve\_fin, int **list, int *size)}\\
+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.\\
+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.\\
+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}.\\
+\textbf{Algorithme} : (http://fr.wikipedia.org/wiki/Algorithme\_de\_Dijkstra)\\
+\begin{verbatim}
+Pour tous les sommets S du maillage
+  S.parcouru=INFINI
+  S.precedent=-1
+FinPour
+
+listeNonParcouru={ensemble des sommets}
+ve_deb.parcouru=0
+
+TantQue listeNonParcouru!={liste vide}
+  S1=minimum(listeNonParcouru)
+  listeNonParcouru.retirer(S1)
+  Pour tous les voisins S2 de S1
+    si S2.parcouru>S1.parcouru+|S1 S2| alors
+      S2.parcouru=S1.parcouru+|S1 S2|
+      S2.precedent=S1
+    FinSi
+  FinPour
+FinTantQue
+
+chemin={liste vide}
+S=ve_fin
+
+/*** PARTIE MODIFIE ***/
+TantQue S!=ve_deb
+  Pour tous les voisins S2 de S
+    Si S2.parcouru==S.precedent.parcouru && 
+       |S2 ve_fin|<|S.parcouru ve_fin|
+      S.precedent=S2
+    FinSi
+  FinPour
+  chemin.ajouterDebut(S)
+  S=S.precedent
+FinTantQue
+chemin.ajouterDebut(S)
+
+retourner ve_fin.parcouru
+\end{verbatim}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle de type \texttt{vf\_model}.\\
+\texttt{ve\_dep} : numéro du sommet de départ.\\
+\texttt{ve\_fin} : numéro du sommet de fin.\\
+\texttt{list} : liste contenant les sommets parcourus.\\
+\texttt{size} : taille de la liste \texttt{list}.\\
+\texttt{retour} : la longueur du chemin entre les deux sommets.\\
+
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=5cm]{./images/grille.eps}
+\caption{}
+\label{maillage_base}
+\end{figure}
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=5cm]{./images/grille_dijkstra.eps}
+\caption{Résultat de l'algorithme de Dijkstra}
+\label{maillage_dijkstra}
+\end{figure}
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=5cm]{./images/grille_dijkstra_bad.eps}
+\caption{Autre résultat possible de l'algorithme de Dijkstra}
+\label{maillage_bad_dijkstra}
+\end{figure}
+
+
+\textbullet \texttt{void vf\_model\_chemin\_plus\_proche(vf\_model *m, int ve\_dep, int ve\_fin, int **list, int *size)}\\
+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.\\
+\textbf{Algorithme} : \\
+\begin{verbatim}
+chemin.ajouter(ve_dep)
+S=ve_dep
+distance=0
+
+TantQue on trouve un sommet à ajouter
+  Si l'un des voisins S2 de S est plus proche de ve_fin
+    distance=distance+|S S2|
+    S=S2
+    chemin.ajouter(S)
+  FinSi
+FinTantQue
+
+Si S!=ve_fin
+  retourner -1
+Sinon
+  retourner distance
+\end{verbatim}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle de type \texttt{vf\_model}.\\
+\texttt{ve\_dep} : numéro du sommet de départ.\\
+\texttt{ve\_fin} : numéro du sommet de fin.\\
+\texttt{list} : liste contenant les sommets parcourus.\\
+\texttt{size} : taille de la liste \texttt{list}.\\
+\texttt{retour} : la longueur du chemin entre les deux sommets.\\
+
+
+
+
+
+
+\section{Fonctions utilisant les \texttt{vf\_model}}
+\textbullet \texttt{void vef\_model\_dijkstra(vf\_model *m, int ve\_dep, int ve\_fin, int **list, int *size)}\\
+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.\\
+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.\\
+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}.\\
+\textbf{Algorithme} : (http://fr.wikipedia.org/wiki/Algorithme\_de\_Dijkstra)\\
+\begin{verbatim}
+Pour tous les sommets S du maillage
+  S.parcouru=INFINI
+  S.precedent=-1
+FinPour
+
+listeNonParcouru={ensemble des sommets}
+ve_deb.parcouru=0
+
+TantQue listeNonParcouru!={liste vide}
+  S1=minimum(listeNonParcouru)
+  listeNonParcouru.retirer(S1)
+  Pour tous les voisins S2 de S1
+    si S2.parcouru>S1.parcouru+|S1 S2| alors
+      S2.parcouru=S1.parcouru+|S1 S2|
+      S2.precedent=S1
+    FinSi
+  FinPour
+FinTantQue
+
+chemin={liste vide}
+S=ve_fin
+
+/*** PARTIE MODIFIE ***/
+TantQue S!=ve_deb
+  Pour tous les voisins S2 de S
+    Si S2.parcouru==S.precedent.parcouru && 
+       |S2 ve_fin|<|S.parcouru ve_fin|
+      S.precedent=S2
+    FinSi
+  FinPour
+  chemin.ajouterDebut(S)
+  S=S.precedent
+FinTantQue
+chemin.ajouterDebut(S)
+
+retourner ve_fin.parcouru
+\end{verbatim}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle de type \texttt{vef\_model}.\\
+\texttt{ve\_dep} : numéro du sommet de départ.\\
+\texttt{ve\_fin} : numéro du sommet de fin.\\
+\texttt{list} : liste contenant les sommets parcourus.\\
+\texttt{size} : taille de la liste \texttt{list}.\\
+\texttt{retour} : la longueur du chemin entre les deux sommets.\\
+
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=5cm]{./images/grille.eps}
+\caption{}
+\label{maillage_base}
+\end{figure}
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=5cm]{./images/grille_dijkstra.eps}
+\caption{Résultat de l'algorithme de Dijkstra}
+\label{maillage_dijkstra}
+\end{figure}
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=5cm]{./images/grille_dijkstra_bad.eps}
+\caption{Autre résultat possible de l'algorithme de Dijkstra}
+\label{maillage_bad_dijkstra}
+\end{figure}
+
+\textbullet \texttt{vef\_model* vef\_model\_nearest\_neighbour\_graph(vef\_model *m)}\\
+Calcul du graphe de voisin le plus proche tel que défini dans \cite{AS2000}.\\
+\textbf{Définition du graphe de voisin le plus proche :}\\
+Considérons un nuage de point $P$. Le graphe des voisins le plus proche est l'ensemble des aretes $E$ telles que :\\
+$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\}$.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle de type \texttt{vef\_model}.\\
+\texttt{retour} : un \texttt{vef\_model} contenant les sommets et les aretes du graphe des voisins les plus proche.\\
+
+\textbullet \texttt{vef\_model* vef\_model\_gabriel\_graph(vef\_model *m)}\\
+Calcul du "Gabriel graph" tel que défini dans \cite{AS2000}.\\
+\textbf{Définition du "Gabriel graph" :}\\
+Considérons un nuage de point $P$. Le "Gabriel graph" est le graphe maximal contenant l'ensemble des aretes $E$ telles que :\\
+$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}\}$.\\
+Le "Gabriel graph" est donc l'ensemble des aretes reliant deux points et dont la sphère minimale ne contient pas d'autres points.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle de type \texttt{vef\_model}.\\
+\texttt{retour} : un \texttt{vef\_model} contenant les sommets et les aretes du "Gabriel Graph".\\
+
+\textbullet \texttt{vef\_model* vef\_model\_extended\_gabriel\_hypergraph(vef\_model *m)}\\
+Calcul du "Extended Gabriel hypergraph" tel que défini dans \cite{AS2000}.\\
+\textbf{Définition du "Extended Gabriel hypergraph" :}\\
+Considérons le "Gabriel graph (GG)" (voir fonction correspondante) d'un nuage de point $P$. Le "Extended Gabriel hypergraph" est défini tel que :\\
+\begin{itemize}
+\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".
+\item tout cycle de trois aretes dans l'"Extended Gabriel hypergraph" forme un triangle.
+\end{itemize}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle de type \texttt{vef\_model}.\\
+\texttt{retour} : un \texttt{vef\_model} contenant les sommets, les aretes et les faces du "Extended Gabriel hypergraph".\\
+
+
+\textbullet \texttt{vef\_model* vef\_model\_euclidean\_minimal\_spanning\_tree(vef\_model *m)}\\
+Calcul de l'arbre minimal couvrant avec la méthode Prim \cite{P1957}.\\
+\textbf{Définition du "Euclidean Minimal Spanning Tree" :}\\
+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.\\
+\textbf{Algorithme :} http://en.wikipedia.org/wiki/Prim\%27s\_algorithm\\
+\begin{verbatim}
+V désigne l'ensemble des sommets
+E désigne l'ensemble des aretes
+
+Choisir un sommet S arbitrairement
+Vnew={S}
+Enew={}
+TantQue Vnew!=V
+  choisir une arete(u,v) ayant le poids minimal telle que:
+    u appartient à Vnew
+    v n'appartient pas à Vnew
+  ajouter v à Vnew
+  ajouter (u,v) à Enew
+FinTantQue
+
+Vnew et Enew est l'arbre couvrant minimal
+\end{verbatim}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle de type \texttt{vef\_model}.\\
+\texttt{retour} : un \texttt{vef\_model} contenant les sommets et les aretes du "Euclidean Minimal Spanning Tree".\\
+
+\bibliographystyle{unsrt}
+\bibliography{manuel}
+
+\end{document}

Fichier diff supprimé car celui-ci est trop grand
+ 124 - 0
doc/src/hashtable.tex


+ 56 - 0
doc/src/icp.tex

@@ -0,0 +1,56 @@
+\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 ICP}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+Les différentes variantes de l'ICP (Iterative Closest Point \cite{BK1992}) sont implémentées dans cette biliothèque.\\
+
+\section{Fonctions}
+
+
+\textbullet \texttt{void vf\_model\_trimmed\_icp(vf\_model *P, vf\_model *X,double recouvrement, double dkarret)}\\
+Trimmed Icp est une variante de l'ICP\cite{BK1992} introduit par Chetverikov \cite{CSK2002}. Pour fonctionner, la fonction a besoin d'un taux de recouvrement qui pourra être calculé avec l'une des fonctions de la bibliothèque \texttt{OVERLAP.SO}.\\
+\textbf{Algorithme :}\\
+1)Mettre en correspondance tous les sommets de \texttt{P} avec le sommet le plus proche, suivant la distance euclidienne, de \texttt{X}.\\
+2)Trier les couples par ordre croissant de distance et ne garder que le pourcentage correspondant au taux de recouvrement passé en paramètre.\\
+3)Calcul de la transformation rigide (translation et rotation) minimisant l'erreur des moindres carrés (somme des distances au carré) sur les couples selectionnés : la méthode utilisée pour calculer la transformation rigide est celle des quaternions unités \cite{H1987,ELF1997}. Application de la transformation au modèle \texttt{P}.\\
+4)Calcul de l'erreur des moindres carrés entre les deux modèles et réitération si le critère d'arrêt n'est pas satisfait.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{P} : Modèle servant de base au recalage.\\
+\texttt{X} : Modèle à recaler.\\
+\texttt{recouvrement} : taux de recouvrement entre les deux modèles.\\
+\texttt{dkarret} : critère d'arret. L'algorithme s'arrete si l'erreur moyenne est inférieur à dkarret.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_icp\_bb(vf\_model *P, vf\_model *X, double dkarret)}\\
+Variante de l'ICP. Application de l'algorithme ICP sur les sommets appartenant aux faces s'intersectant.\\
+\textbf{Algorithme :}\\
+1)Trouver les faces du modèle \texttt{P} et \texttt{X} s'intersectant.
+2)Extraire les sommets de ces deux listes de faces.
+3)Mettre en correspondance tous les sommets trouvés de \texttt{P} avec le sommet le plus proche, suivant la distance euclidienne, de la liste de sommets de \texttt{X}.\\
+4)Calcul de la transformation rigide (translation et rotation) minimisant l'erreur des moindres carrés (somme des distances au carré) : la méthode utilisée pour calculer la transformation rigide est celle des quaternions unités \cite{H1987,ELF1997}. Application de la transformation au modèle \texttt{P}.\\
+5)Calcul de l'erreur des moindres carrés entre les deux modèles et réitération si le critère d'arrêt n'est pas satisfait.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{P} : Modèle servant de base au recalage.\\
+\texttt{X} : Modèle à recaler.\\
+\texttt{dkarret} : critère d'arret. L'algorithme s'arrete si l'erreur moyenne est inférieur à dkarret.\\
+\texttt{retour} : aucun.\\
+
+
+\bibliographystyle{unsrt}
+\bibliography{manuel}
+
+\end{document}

+ 148 - 0
doc/src/images/cercle_inscrit.eps

@@ -0,0 +1,148 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: cercle_inscrit.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Thu Sep  6 10:55:07 2007
+%%BoundingBox: 0 0 545 239
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 239 moveto 0 0 lineto 545 0 lineto 545 239 lineto closepath clip newpath
+-183.3 448.8 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 6300 5400 1350 1350 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 6300 5400 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+0 slj
+0 slc
+n 3150 6750 m
+ 11250 6750 l gs col0 s gr 
+% Polyline
+n 3150 6750 m
+ 6030 3690 l gs col0 s gr 
+% Polyline
+n 11250 6750 m
+ 6030 3690 l gs col0 s gr 
+/Times-Roman ff 285.75 scf sf
+2925 7065 m
+gs 1 -1 sc (A) col0 sh gr
+/Times-Roman ff 285.75 scf sf
+6975 7110 m
+gs 1 -1 sc (c) col0 sh gr
+/Times-Roman ff 285.75 scf sf
+8685 5040 m
+gs 1 -1 sc (a) col0 sh gr
+/Times-Roman ff 285.75 scf sf
+4455 5175 m
+gs 1 -1 sc (b) col0 sh gr
+/Times-Roman ff 285.75 scf sf
+5940 3555 m
+gs 1 -1 sc (C) col0 sh gr
+/Times-Roman ff 285.75 scf sf
+11340 6930 m
+gs 1 -1 sc (B) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 23 - 0
doc/src/images/cercle_inscrit.fig

@@ -0,0 +1,23 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6300 5400 1350 1350 6300 5400 6300 6750
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6300 5400 23 23 6300 5400 6323 5400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3150 6750 11250 6750
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3150 6750 6030 3690
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 11250 6750 6030 3690
+4 0 0 50 -1 0 18 0.0000 4 195 210 2925 7065 A\001
+4 0 0 50 -1 0 18 0.0000 4 135 120 6975 7110 c\001
+4 0 0 50 -1 0 18 0.0000 4 135 135 8685 5040 a\001
+4 0 0 50 -1 0 18 0.0000 4 195 135 4455 5175 b\001
+4 0 0 50 -1 0 18 0.0000 4 195 195 5940 3555 C\001
+4 0 0 50 -1 0 18 0.0000 4 195 195 11340 6930 B\001

+ 146 - 0
doc/src/images/decouparete.eps

@@ -0,0 +1,146 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: decouparete.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Mon Sep  3 10:34:54 2007
+%%For: rr@rr-desktop (rr,,,)
+%%BoundingBox: 0 0 415 7
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 7 moveto 0 0 lineto 415 0 lineto 415 7 lineto closepath clip newpath
+-25.0 65.7 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 450 990 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2880 990 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 4500 990 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6930 990 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5715 990 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+0 slj
+0 slc
+n 450 990 m
+ 2880 990 l gs col0 s gr 
+% Polyline
+gs  clippath
+3913 1020 m 4065 1020 l 4065 960 l 3913 960 l 3913 960 l 4033 990 l 3913 1020 l cp
+eoclip
+n 3420 990 m
+ 4050 990 l gs col0 s gr gr
+
+% arrowhead
+n 3913 1020 m 4033 990 l 3913 960 l  col0 s
+% Polyline
+n 4500 990 m
+ 6930 990 l gs col0 s gr 
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 21 - 0
doc/src/images/decouparete.fig

@@ -0,0 +1,21 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 450 990 45 45 450 990 450 1035
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2880 990 45 45 2880 990 2880 1035
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 4500 990 45 45 4500 990 4500 1035
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6930 990 45 45 6930 990 6930 1035
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5715 990 45 45 5715 990 5715 1035
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 450 990 2880 990
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3420 990 4050 990
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4500 990 6930 990

+ 26 - 0
doc/src/images/decouparete_hash_model_loop.fig

@@ -0,0 +1,26 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 450 990 45 45 450 990 450 1035
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2880 990 45 45 2880 990 2880 1035
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 4500 990 45 45 4500 990 4500 1035
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6930 990 45 45 6930 990 6930 1035
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5715 990 45 45 5715 990 5715 1035
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3420 990 4050 990
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 450 990 2880 990
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4500 990 6930 990
+4 0 0 50 -1 0 12 0.0000 4 150 345 270 1260 Ve1\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 2700 1260 Ve2\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 4410 1260 Ve1\001
+4 0 0 50 -1 0 12 0.0000 4 195 675 5400 1260 ptmilieu\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 6750 1260 Ve2\001

+ 170 - 0
doc/src/images/decouparete_vef_model_loop.eps

@@ -0,0 +1,170 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: decouparete_vef_model_loop.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Mon Sep  3 19:47:57 2007
+%%For: rr@rr-laptop (rr,,,)
+%%BoundingBox: 0 0 433 32
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 32 moveto 0 0 lineto 433 0 lineto 433 32 lineto closepath clip newpath
+-16.1 77.5 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 450 990 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2880 990 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 4500 990 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6930 990 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5715 990 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+0 slj
+0 slc
+n 450 990 m
+ 2880 990 l gs col0 s gr 
+% Polyline
+gs  clippath
+3913 1020 m 4065 1020 l 4065 960 l 3913 960 l 3913 960 l 4033 990 l 3913 1020 l cp
+eoclip
+n 3420 990 m
+ 4050 990 l gs col0 s gr gr
+
+% arrowhead
+n 3913 1020 m 4033 990 l 3913 960 l  col0 s
+% Polyline
+n 4500 990 m
+ 6930 990 l gs col0 s gr 
+/Times-Roman ff 190.50 scf sf
+270 1215 m
+gs 1 -1 sc (Ve1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+2700 1215 m
+gs 1 -1 sc (Ve2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+4320 1215 m
+gs 1 -1 sc (Ve1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6750 1215 m
+gs 1 -1 sc (Ve2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+5265 1215 m
+gs 1 -1 sc (nbvertex+ed) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+1440 900 m
+gs 1 -1 sc (ed) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+4995 900 m
+gs 1 -1 sc (ed) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6255 900 m
+gs 1 -1 sc (ed') col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 29 - 0
doc/src/images/decouparete_vef_model_loop.fig

@@ -0,0 +1,29 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 450 990 45 45 450 990 450 1035
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2880 990 45 45 2880 990 2880 1035
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 4500 990 45 45 4500 990 4500 1035
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6930 990 45 45 6930 990 6930 1035
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5715 990 45 45 5715 990 5715 1035
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 450 990 2880 990
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3420 990 4050 990
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4500 990 6930 990
+4 0 0 50 -1 0 12 0.0000 4 150 345 270 1215 Ve1\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 2700 1215 Ve2\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 4320 1215 Ve1\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 6750 1215 Ve2\001
+4 0 0 50 -1 0 12 0.0000 4 150 1095 5265 1215 nbvertex+ed\001
+4 0 0 50 -1 0 12 0.0000 4 150 210 1440 900 ed\001
+4 0 0 50 -1 0 12 0.0000 4 150 210 4995 900 ed\001
+4 0 0 50 -1 0 12 0.0000 4 150 255 6255 900 ed'\001

+ 161 - 0
doc/src/images/decouparete_vf_model_loop.eps

@@ -0,0 +1,161 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: decouparete_hash_model_loop.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Mon Sep  3 17:54:39 2007
+%%For: rr@rr-laptop (rr,,,)
+%%BoundingBox: 0 0 433 25
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 25 moveto 0 0 lineto 433 0 lineto 433 25 lineto closepath clip newpath
+-16.1 84.0 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 450 990 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2880 990 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 4500 990 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6930 990 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5715 990 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+0 slj
+0 slc
+gs  clippath
+3913 1020 m 4065 1020 l 4065 960 l 3913 960 l 3913 960 l 4033 990 l 3913 1020 l cp
+eoclip
+n 3420 990 m
+ 4050 990 l gs col0 s gr gr
+
+% arrowhead
+n 3913 1020 m 4033 990 l 3913 960 l  col0 s
+% Polyline
+n 450 990 m
+ 2880 990 l gs col0 s gr 
+% Polyline
+n 4500 990 m
+ 6930 990 l gs col0 s gr 
+/Times-Roman ff 190.50 scf sf
+270 1260 m
+gs 1 -1 sc (Ve1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+2700 1260 m
+gs 1 -1 sc (Ve2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+4410 1260 m
+gs 1 -1 sc (Ve1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+5400 1260 m
+gs 1 -1 sc (ptmilieu) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6750 1260 m
+gs 1 -1 sc (Ve2) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 176 - 0
doc/src/images/decoupface.eps

@@ -0,0 +1,176 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: decoupface.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Mon Sep  3 10:49:12 2007
+%%For: rr@rr-desktop (rr,,,)
+%%BoundingBox: 0 0 415 160
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 160 moveto 0 0 lineto 415 0 lineto 415 160 lineto closepath clip newpath
+-59.0 275.7 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 3420 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 990 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5040 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 7470 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6300 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2205 1890 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6255 1890 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5625 3150 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6885 3150 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2205 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2835 3150 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1575 3150 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+0 slj
+0 slc
+n 990 4320 m
+ 3420 4320 l gs col0 s gr 
+% Polyline
+n 5040 4320 m
+ 7470 4320 l gs col0 s gr 
+% Polyline
+n 990 4320 m 2205 1890 l
+ 3420 4320 l gs col0 s gr 
+% Polyline
+n 5040 4320 m 6255 1890 l
+ 7470 4365 l gs col0 s gr 
+% Polyline
+gs  clippath
+4408 3180 m 4560 3180 l 4560 3120 l 4408 3120 l 4408 3120 l 4528 3150 l 4408 3180 l cp
+eoclip
+n 3915 3150 m
+ 4545 3150 l gs col0 s gr gr
+
+% arrowhead
+n 4408 3180 m 4528 3150 l 4408 3120 l  col0 s
+% Polyline
+n 5625 3150 m 6300 4320 l 6885 3150 l
+ 5670 3150 l gs col0 s gr 
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 34 - 0
doc/src/images/decoupface.fig

@@ -0,0 +1,34 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3420 4320 45 45 3420 4320 3420 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 990 4320 45 45 990 4320 990 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5040 4320 45 45 5040 4320 5040 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 7470 4320 45 45 7470 4320 7470 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6300 4320 45 45 6300 4320 6300 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2205 1890 45 45 2205 1890 2205 1935
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6255 1890 45 45 6255 1890 6255 1935
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5625 3150 45 45 5625 3150 5670 3150
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6885 3150 45 45 6885 3150 6840 3150
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2205 4320 45 45 2205 4320 2205 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2835 3150 45 45 2835 3150 2880 3150
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 1575 3150 45 45 1575 3150 1530 3150
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 990 4320 3420 4320
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5040 4320 7470 4320
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 3
+	 990 4320 2205 1890 3420 4320
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 3
+	 5040 4320 6255 1890 7470 4365
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3915 3150 4545 3150
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 4
+	 5625 3150 6300 4320 6885 3150 5670 3150

+ 53 - 0
doc/src/images/decoupface_hash_model_loop.fig

@@ -0,0 +1,53 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+6 675 1620 3780 4590
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3420 4320 45 45 3420 4320 3420 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 990 4320 45 45 990 4320 990 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2205 1890 45 45 2205 1890 2205 1935
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2205 4320 45 45 2205 4320 2205 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2835 3150 45 45 2835 3150 2880 3150
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 1575 3150 45 45 1575 3150 1530 3150
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 990 4320 3420 4320
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 3
+	 990 4320 2205 1890 3420 4320
+4 0 0 50 -1 0 12 0.0000 4 195 780 675 3195 ptmilieu2\001
+4 0 0 50 -1 0 12 0.0000 4 195 780 2970 3195 ptmilieu3\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 2025 1800 Ve3\001
+4 0 0 50 -1 0 12 0.0000 4 195 780 1845 4545 ptmilieu1\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 3240 4545 Ve2\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 810 4545 Ve1\001
+-6
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5040 4320 45 45 5040 4320 5040 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 7470 4320 45 45 7470 4320 7470 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6255 1890 45 45 6255 1890 6255 1935
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5625 3150 45 45 5625 3150 5670 3150
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6885 3150 45 45 6885 3150 6840 3150
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 7470 4320 45 45 7470 4320 7470 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5040 4320 45 45 5040 4320 5040 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6255 1890 45 45 6255 1890 6255 1935
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6885 3150 45 45 6885 3150 6930 3150
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5625 3150 45 45 5625 3150 5580 3150
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6300 4320 45 45 6300 4320 6300 4365
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3915 3150 4545 3150
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 4
+	 5625 3150 6300 4320 6885 3150 5670 3150
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5040 4320 7470 4320
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 3
+	 5040 4320 6255 1890 7470 4320
+4 0 0 50 -1 0 12 0.0000 4 195 780 4725 3195 ptmilieu2\001
+4 0 0 50 -1 0 12 0.0000 4 195 780 7020 3195 ptmilieu3\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 6075 1800 Ve3\001
+4 0 0 50 -1 0 12 0.0000 4 195 780 5895 4545 ptmilieu1\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 7290 4545 Ve2\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 4860 4545 Ve1\001

+ 257 - 0
doc/src/images/decoupface_vef_model_loop.eps

@@ -0,0 +1,257 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: decoupface_vef_model_loop.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Tue Sep  4 19:57:09 2007
+%%For: rr@rr-desktop (rr,,,)
+%%BoundingBox: 0 0 506 187
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 187 moveto 0 0 lineto 506 0 lineto 506 187 lineto closepath clip newpath
+-24.6 290.1 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 7785 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5355 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6570 1890 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6570 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 7200 3150 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5940 3150 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3420 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 990 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2205 1890 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2205 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2835 3150 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1575 3150 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+0 slj
+0 slc
+gs  clippath
+4408 3180 m 4560 3180 l 4560 3120 l 4408 3120 l 4408 3120 l 4528 3150 l 4408 3180 l cp
+eoclip
+n 3915 3150 m
+ 4545 3150 l gs col0 s gr gr
+
+% arrowhead
+n 4408 3180 m 4528 3150 l 4408 3120 l  col0 s
+% Polyline
+n 5355 4320 m
+ 7785 4320 l gs col0 s gr 
+% Polyline
+n 5355 4320 m 6570 1890 l
+ 7785 4320 l gs col0 s gr 
+% Polyline
+n 990 4320 m
+ 3420 4320 l gs col0 s gr 
+% Polyline
+n 990 4320 m 2205 1890 l
+ 3420 4320 l gs col0 s gr 
+% Polyline
+n 5940 3150 m 6570 4320 l 7200 3150 l
+ 5940 3150 l  cp gs col0 s gr 
+/Times-Roman ff 190.50 scf sf
+6390 1800 m
+gs 1 -1 sc (Ve3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+7605 4545 m
+gs 1 -1 sc (Ve2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+5175 4545 m
+gs 1 -1 sc (Ve1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6030 4590 m
+gs 1 -1 sc (nbvertex+ed1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+7245 3060 m
+gs 1 -1 sc (nbvertex+ed2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+4770 3105 m
+gs 1 -1 sc (nbvertex+ed3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+5310 3735 m
+gs 1 -1 sc (ed3') col0 sh gr
+/Times-Roman ff 190.50 scf sf
+7605 3735 m
+gs 1 -1 sc (ed2') col0 sh gr
+/Times-Roman ff 190.50 scf sf
+7020 2565 m
+gs 1 -1 sc (ed2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+5895 2565 m
+gs 1 -1 sc (ed3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+2025 1800 m
+gs 1 -1 sc (Ve3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+3240 4545 m
+gs 1 -1 sc (Ve2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+810 4545 m
+gs 1 -1 sc (Ve1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+1665 4590 m
+gs 1 -1 sc (nbvertex+ed1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+2880 3060 m
+gs 1 -1 sc (nbvertex+ed2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+405 3105 m
+gs 1 -1 sc (nbvertex+ed3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+945 3735 m
+gs 1 -1 sc (ed3') col0 sh gr
+/Times-Roman ff 190.50 scf sf
+1485 4230 m
+gs 1 -1 sc (ed1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+2655 4230 m
+gs 1 -1 sc (ed1') col0 sh gr
+/Times-Roman ff 190.50 scf sf
+3240 3735 m
+gs 1 -1 sc (ed2') col0 sh gr
+/Times-Roman ff 190.50 scf sf
+2655 2565 m
+gs 1 -1 sc (ed2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+1530 2565 m
+gs 1 -1 sc (ed3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+7065 4275 m
+gs 1 -1 sc (ed1') col0 sh gr
+/Times-Roman ff 190.50 scf sf
+5805 4275 m
+gs 1 -1 sc (ed1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6210 3645 m
+gs 1 -1 sc (ed4) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6660 3645 m
+gs 1 -1 sc (ed5) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6435 3105 m
+gs 1 -1 sc (ed6) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 61 - 0
doc/src/images/decoupface_vef_model_loop.fig

@@ -0,0 +1,61 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 7785 4320 45 45 7785 4320 7785 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5355 4320 45 45 5355 4320 5355 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6570 1890 45 45 6570 1890 6570 1935
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6570 4320 45 45 6570 4320 6570 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 7200 3150 45 45 7200 3150 7245 3150
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5940 3150 45 45 5940 3150 5895 3150
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3420 4320 45 45 3420 4320 3420 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 990 4320 45 45 990 4320 990 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2205 1890 45 45 2205 1890 2205 1935
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2205 4320 45 45 2205 4320 2205 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2835 3150 45 45 2835 3150 2880 3150
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 1575 3150 45 45 1575 3150 1530 3150
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3915 3150 4545 3150
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5355 4320 7785 4320
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 3
+	 5355 4320 6570 1890 7785 4320
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 990 4320 3420 4320
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 3
+	 990 4320 2205 1890 3420 4320
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
+	 5940 3150 6570 4320 7200 3150 5940 3150
+4 0 0 50 -1 0 12 0.0000 4 135 330 6390 1800 Ve3\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 7605 4545 Ve2\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 5175 4545 Ve1\001
+4 0 0 50 -1 0 12 0.0000 4 135 1125 6030 4590 nbvertex+ed1\001
+4 0 0 50 -1 0 12 0.0000 4 135 1125 7245 3060 nbvertex+ed2\001
+4 0 0 50 -1 0 12 0.0000 4 135 1125 4770 3105 nbvertex+ed3\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 5310 3735 ed3'\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 7605 3735 ed2'\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 7020 2565 ed2\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 5895 2565 ed3\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 2025 1800 Ve3\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 3240 4545 Ve2\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 810 4545 Ve1\001
+4 0 0 50 -1 0 12 0.0000 4 135 1125 1665 4590 nbvertex+ed1\001
+4 0 0 50 -1 0 12 0.0000 4 135 1125 2880 3060 nbvertex+ed2\001
+4 0 0 50 -1 0 12 0.0000 4 135 1125 405 3105 nbvertex+ed3\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 945 3735 ed3'\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 1485 4230 ed1\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 2655 4230 ed1'\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 3240 3735 ed2'\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 2655 2565 ed2\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 1530 2565 ed3\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 7065 4275 ed1'\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 5805 4275 ed1\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 6210 3645 ed4\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 6660 3645 ed5\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 6435 3105 ed6\001

+ 227 - 0
doc/src/images/decoupface_vf_model_loop.eps

@@ -0,0 +1,227 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: decoupface_hash_model_loop.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Mon Sep  3 18:06:26 2007
+%%For: rr@rr-laptop (rr,,,)
+%%BoundingBox: 0 0 452 188
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 188 moveto 0 0 lineto 452 0 lineto 452 188 lineto closepath clip newpath
+-41.6 290.9 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 3420 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 990 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2205 1890 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2205 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2835 3150 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1575 3150 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+0 slj
+0 slc
+n 990 4320 m
+ 3420 4320 l gs col0 s gr 
+% Polyline
+n 990 4320 m 2205 1890 l
+ 3420 4320 l gs col0 s gr 
+/Times-Roman ff 190.50 scf sf
+675 3195 m
+gs 1 -1 sc (ptmilieu2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+2970 3195 m
+gs 1 -1 sc (ptmilieu3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+2025 1800 m
+gs 1 -1 sc (Ve3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+1845 4545 m
+gs 1 -1 sc (ptmilieu1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+3240 4545 m
+gs 1 -1 sc (Ve2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+810 4545 m
+gs 1 -1 sc (Ve1) col0 sh gr
+% Ellipse
+n 5040 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 7470 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6255 1890 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5625 3150 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6885 3150 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 7470 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5040 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6255 1890 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6885 3150 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5625 3150 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6300 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+gs  clippath
+4408 3180 m 4560 3180 l 4560 3120 l 4408 3120 l 4408 3120 l 4528 3150 l 4408 3180 l cp
+eoclip
+n 3915 3150 m
+ 4545 3150 l gs col0 s gr gr
+
+% arrowhead
+n 4408 3180 m 4528 3150 l 4408 3120 l  col0 s
+% Polyline
+n 5625 3150 m 6300 4320 l 6885 3150 l
+ 5670 3150 l gs col0 s gr 
+% Polyline
+n 5040 4320 m
+ 7470 4320 l gs col0 s gr 
+% Polyline
+n 5040 4320 m 6255 1890 l
+ 7470 4320 l gs col0 s gr 
+/Times-Roman ff 190.50 scf sf
+4725 3195 m
+gs 1 -1 sc (ptmilieu2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+7020 3195 m
+gs 1 -1 sc (ptmilieu3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6075 1800 m
+gs 1 -1 sc (Ve3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+5895 4545 m
+gs 1 -1 sc (ptmilieu1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+7290 4545 m
+gs 1 -1 sc (Ve2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+4860 4545 m
+gs 1 -1 sc (Ve1) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 182 - 0
doc/src/images/distance_point_ligne.eps

@@ -0,0 +1,182 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: distance_point_ligne.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Thu Sep  6 10:35:59 2007
+%%BoundingBox: 0 0 769 544
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 544 moveto 0 0 lineto 769 0 lineto 769 544 lineto closepath clip newpath
+-27.0 568.3 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 4050 8550 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6750 900 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5850 5400 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 9900 2700 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+0 slj
+0 slc
+15.000 slw
+n 5850 5400 m
+ 9900 2700 l gs col0 s gr 
+% Polyline
+ [60] 0 sd
+gs  clippath
+8440 3488 m 8533 3629 l 8583 3595 l 8490 3455 l 8490 3455 l 8532 3572 l 8440 3488 l cp
+6859 1011 m 6766 870 l 6716 904 l 6809 1044 l 6809 1044 l 6768 928 l 6859 1011 l cp
+eoclip
+n 6750 900 m
+ 8550 3600 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+7.500 slw
+n 6859 1011 m 6768 928 l 6809 1044 l  col0 s
+% arrowhead
+n 8440 3488 m 8532 3572 l 8490 3455 l  col0 s
+% Polyline
+15.000 slw
+ [60] 0 sd
+n 450 9000 m
+ 12600 900 l gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+gs  clippath
+3259 7311 m 3166 7170 l 3116 7204 l 3209 7344 l 3209 7344 l 3168 7228 l 3259 7311 l cp
+3940 8438 m 4033 8579 l 4083 8545 l 3990 8405 l 3990 8405 l 4032 8522 l 3940 8438 l cp
+eoclip
+n 4050 8550 m
+ 3150 7200 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+7.500 slw
+n 3940 8438 m 4032 8522 l 3990 8405 l  col0 s
+% arrowhead
+n 3259 7311 m 3168 7228 l 3209 7344 l  col0 s
+/Times-Roman ff 381.00 scf sf
+4140 8730 m
+gs 1 -1 sc (M') col0 sh gr
+/Times-Roman ff 381.00 scf sf
+9900 3150 m
+gs 1 -1 sc (B) col0 sh gr
+/Times-Roman ff 381.00 scf sf
+5850 5850 m
+gs 1 -1 sc (A) col0 sh gr
+/Times-Roman ff 381.00 scf sf
+4050 7875 m
+gs 1 -1 sc (d') col0 sh gr
+/Times-Roman ff 381.00 scf sf
+7650 1800 m
+gs 1 -1 sc (d) col0 sh gr
+/Times-Roman ff 381.00 scf sf
+6525 675 m
+gs 1 -1 sc (M) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 31 - 0
doc/src/images/distance_point_ligne.fig

@@ -0,0 +1,31 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 4050 8550 45 45 4050 8550 4095 8550
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6750 900 45 45 6750 900 6795 900
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5850 5400 45 45 5850 5400 5895 5400
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 9900 2700 45 45 9900 2700 9945 2700
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5850 5400 9900 2700
+2 1 1 2 0 7 50 -1 -1 4.000 0 0 -1 1 1 2
+	0 0 1.00 60.00 120.00
+	0 0 1.00 60.00 120.00
+	 6750 900 8550 3600
+2 1 1 2 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 450 9000 12600 900
+2 1 1 2 0 7 50 -1 -1 4.000 0 0 -1 1 1 2
+	0 0 1.00 60.00 120.00
+	0 0 1.00 60.00 120.00
+	 4050 8550 3150 7200
+4 0 0 50 -1 0 24 0.0000 4 270 435 4140 8730 M'\001
+4 0 0 50 -1 0 24 0.0000 4 270 270 9900 3150 B\001
+4 0 0 50 -1 0 24 0.0000 4 270 300 5850 5850 A\001
+4 0 0 50 -1 0 24 0.0000 4 270 285 4050 7875 d'\001
+4 0 0 50 -1 0 24 0.0000 4 270 210 7650 1800 d\001
+4 0 0 50 -1 0 24 0.0000 4 270 360 6525 675 M\001

+ 222 - 0
doc/src/images/grille.eps

@@ -0,0 +1,222 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: grille.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Thu Jun 26 10:44:52 2008
+%%For: synave@mycene (Rémi Synave,,,)
+%%BoundingBox: 0 0 723 723
+%%Magnification: 2.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 723 moveto 0 0 lineto 723 0 lineto 723 723 lineto closepath clip newpath
+-142.6 865.4 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.12000 0.12000 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Polyline
+7.500 slw
+n 1200 1200 m
+ 1200 7200 l gs col0 s gr 
+% Polyline
+n 1800 1200 m
+ 1800 7200 l gs col0 s gr 
+% Polyline
+n 2400 1200 m
+ 2400 7200 l gs col0 s gr 
+% Polyline
+n 3000 1200 m
+ 3000 7200 l gs col0 s gr 
+% Polyline
+n 3600 1200 m
+ 3600 7200 l gs col0 s gr 
+% Polyline
+n 4200 1200 m
+ 4200 7200 l gs col0 s gr 
+% Polyline
+n 4800 1200 m
+ 4800 7200 l gs col0 s gr 
+% Polyline
+n 5400 1200 m
+ 5400 7200 l gs col0 s gr 
+% Polyline
+n 6000 1200 m
+ 6000 7200 l gs col0 s gr 
+% Polyline
+n 6600 1200 m
+ 6600 7200 l gs col0 s gr 
+% Polyline
+n 7200 1200 m
+ 7200 7200 l gs col0 s gr 
+% Polyline
+n 1200 1200 m
+ 7200 1200 l gs col0 s gr 
+% Polyline
+n 1200 1800 m
+ 7200 1800 l gs col0 s gr 
+% Polyline
+n 1200 2400 m
+ 7200 2400 l gs col0 s gr 
+% Polyline
+n 1200 3000 m
+ 7200 3000 l gs col0 s gr 
+% Polyline
+n 1200 3600 m
+ 7200 3600 l gs col0 s gr 
+% Polyline
+n 1200 4200 m
+ 7200 4200 l gs col0 s gr 
+% Polyline
+n 1200 4800 m
+ 7200 4800 l gs col0 s gr 
+% Polyline
+n 1200 5400 m
+ 7200 5400 l gs col0 s gr 
+% Polyline
+n 1200 6000 m
+ 7200 6000 l gs col0 s gr 
+% Polyline
+n 1200 6600 m
+ 7200 6600 l gs col0 s gr 
+% Polyline
+n 1200 7200 m
+ 7200 7200 l gs col0 s gr 
+% Polyline
+n 1200 6600 m
+ 1800 7200 l gs col0 s gr 
+% Polyline
+n 1200 6000 m
+ 2400 7200 l gs col0 s gr 
+% Polyline
+n 1200 5400 m
+ 3000 7200 l gs col0 s gr 
+% Polyline
+n 1200 4800 m
+ 3600 7200 l gs col0 s gr 
+% Polyline
+n 1200 4200 m
+ 4200 7200 l gs col0 s gr 
+% Polyline
+n 1200 3600 m
+ 4800 7200 l gs col0 s gr 
+% Polyline
+n 1200 3000 m
+ 5400 7200 l gs col0 s gr 
+% Polyline
+n 1200 2400 m
+ 6000 7200 l gs col0 s gr 
+% Polyline
+n 1200 1800 m
+ 6600 7200 l gs col0 s gr 
+% Polyline
+n 1200 1200 m
+ 7200 7200 l gs col0 s gr 
+% Polyline
+n 1800 1200 m
+ 7200 6600 l gs col0 s gr 
+% Polyline
+n 2400 1200 m
+ 7200 6000 l gs col0 s gr 
+% Polyline
+n 3000 1200 m
+ 7200 5400 l gs col0 s gr 
+% Polyline
+n 3600 1200 m
+ 7200 4800 l gs col0 s gr 
+% Polyline
+n 4200 1200 m
+ 7200 4200 l gs col0 s gr 
+% Polyline
+n 4800 1200 m
+ 7200 3600 l gs col0 s gr 
+% Polyline
+n 5400 1200 m
+ 7200 3000 l gs col0 s gr 
+% Polyline
+n 6000 1200 m
+ 7200 2400 l gs col0 s gr 
+% Polyline
+n 6600 1200 m
+ 7200 1800 l gs col0 s gr 
+% here ends figure;
+$F2psEnd
+rs
+showpage

+ 91 - 0
doc/src/images/grille.fig

@@ -0,0 +1,91 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 1200 1200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1800 1200 1800 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2400 1200 2400 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3000 1200 3000 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3600 1200 3600 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4200 1200 4200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4800 1200 4800 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5400 1200 5400 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6000 1200 6000 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6600 1200 6600 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 7200 1200 7200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 1200 7200 1200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 1800 7200 1800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 2400 7200 2400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 3000 7200 3000
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 3600 7200 3600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 4200 7200 4200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 4800 7200 4800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 5400 7200 5400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 6000 7200 6000
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 6600 7200 6600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 7200 7200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 6600 1800 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 6000 2400 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 5400 3000 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 4800 3600 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 4200 4200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 3600 4800 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 3000 5400 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 2400 6000 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 1800 6600 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 1200 7200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1800 1200 7200 6600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2400 1200 7200 6000
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3000 1200 7200 5400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3600 1200 7200 4800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4200 1200 7200 4200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4800 1200 7200 3600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5400 1200 7200 3000
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6000 1200 7200 2400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6600 1200 7200 1800

+ 248 - 0
doc/src/images/grille_dijkstra.eps

@@ -0,0 +1,248 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: grille_dijkstra.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Thu Jun 26 12:19:53 2008
+%%For: synave@mycene (Rémi Synave,,,)
+%%BoundingBox: 0 0 740 740
+%%Magnification: 2.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 740 moveto 0 0 lineto 740 0 lineto 740 740 lineto closepath clip newpath
+-134.0 874.0 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.12000 0.12000 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 1200 7200 75 75 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Ellipse
+n 7200 1200 75 75 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Polyline
+n 1200 1200 m
+ 1200 7200 l gs col0 s gr 
+% Polyline
+n 1800 1200 m
+ 1800 7200 l gs col0 s gr 
+% Polyline
+n 2400 1200 m
+ 2400 7200 l gs col0 s gr 
+% Polyline
+n 3000 1200 m
+ 3000 7200 l gs col0 s gr 
+% Polyline
+n 3600 1200 m
+ 3600 7200 l gs col0 s gr 
+% Polyline
+n 4200 1200 m
+ 4200 7200 l gs col0 s gr 
+% Polyline
+n 4800 1200 m
+ 4800 7200 l gs col0 s gr 
+% Polyline
+n 5400 1200 m
+ 5400 7200 l gs col0 s gr 
+% Polyline
+n 6000 1200 m
+ 6000 7200 l gs col0 s gr 
+% Polyline
+n 6600 1200 m
+ 6600 7200 l gs col0 s gr 
+% Polyline
+n 7200 1200 m
+ 7200 7200 l gs col0 s gr 
+% Polyline
+n 1200 1200 m
+ 7200 1200 l gs col0 s gr 
+% Polyline
+n 1200 1800 m
+ 7200 1800 l gs col0 s gr 
+% Polyline
+n 1200 2400 m
+ 7200 2400 l gs col0 s gr 
+% Polyline
+n 1200 3000 m
+ 7200 3000 l gs col0 s gr 
+% Polyline
+n 1200 3600 m
+ 7200 3600 l gs col0 s gr 
+% Polyline
+n 1200 4200 m
+ 7200 4200 l gs col0 s gr 
+% Polyline
+n 1200 4800 m
+ 7200 4800 l gs col0 s gr 
+% Polyline
+n 1200 5400 m
+ 7200 5400 l gs col0 s gr 
+% Polyline
+n 1200 6000 m
+ 7200 6000 l gs col0 s gr 
+% Polyline
+n 1200 6600 m
+ 7200 6600 l gs col0 s gr 
+% Polyline
+n 1200 7200 m
+ 7200 7200 l gs col0 s gr 
+% Polyline
+n 1200 6600 m
+ 1800 7200 l gs col0 s gr 
+% Polyline
+n 1200 6000 m
+ 2400 7200 l gs col0 s gr 
+% Polyline
+n 1200 5400 m
+ 3000 7200 l gs col0 s gr 
+% Polyline
+n 1200 4800 m
+ 3600 7200 l gs col0 s gr 
+% Polyline
+n 1200 4200 m
+ 4200 7200 l gs col0 s gr 
+% Polyline
+n 1200 3600 m
+ 4800 7200 l gs col0 s gr 
+% Polyline
+n 1200 3000 m
+ 5400 7200 l gs col0 s gr 
+% Polyline
+n 1200 2400 m
+ 6000 7200 l gs col0 s gr 
+% Polyline
+n 1200 1800 m
+ 6600 7200 l gs col0 s gr 
+% Polyline
+n 1200 1200 m
+ 7200 7200 l gs col0 s gr 
+% Polyline
+n 1800 1200 m
+ 7200 6600 l gs col0 s gr 
+% Polyline
+n 2400 1200 m
+ 7200 6000 l gs col0 s gr 
+% Polyline
+n 3000 1200 m
+ 7200 5400 l gs col0 s gr 
+% Polyline
+n 3600 1200 m
+ 7200 4800 l gs col0 s gr 
+% Polyline
+n 4200 1200 m
+ 7200 4200 l gs col0 s gr 
+% Polyline
+n 4800 1200 m
+ 7200 3600 l gs col0 s gr 
+% Polyline
+n 5400 1200 m
+ 7200 3000 l gs col0 s gr 
+% Polyline
+n 6000 1200 m
+ 7200 2400 l gs col0 s gr 
+% Polyline
+n 6600 1200 m
+ 7200 1800 l gs col0 s gr 
+% Polyline
+60.000 slw
+n 1200 7200 m 1800 7200 l 1800 6600 l 2400 6600 l 2400 6000 l 3000 6000 l
+ 3000 5400 l 3600 5400 l 3600 4800 l 4200 4800 l 4200 4200 l
+ 4800 4200 l 4800 3600 l 5400 3600 l 5400 3000 l 6000 3000 l
+ 6000 2400 l 6600 2400 l 6600 1800 l 7200 1800 l
+ 7200 1200 l gs col0 s gr 
+% here ends figure;
+$F2psEnd
+rs
+showpage

+ 98 - 0
doc/src/images/grille_dijkstra.fig

@@ -0,0 +1,98 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 7 50 -1 0 0.000 1 0.0000 1200 7200 75 75 1200 7200 1200 7275
+1 3 0 1 0 7 50 -1 0 0.000 1 0.0000 7200 1200 75 75 7200 1200 7200 1125
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 1200 1200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1800 1200 1800 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2400 1200 2400 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3000 1200 3000 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3600 1200 3600 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4200 1200 4200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4800 1200 4800 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5400 1200 5400 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6000 1200 6000 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6600 1200 6600 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 7200 1200 7200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 1200 7200 1200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 1800 7200 1800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 2400 7200 2400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 3000 7200 3000
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 3600 7200 3600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 4200 7200 4200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 4800 7200 4800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 5400 7200 5400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 6000 7200 6000
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 6600 7200 6600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 7200 7200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 6600 1800 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 6000 2400 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 5400 3000 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 4800 3600 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 4200 4200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 3600 4800 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 3000 5400 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 2400 6000 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 1800 6600 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 1200 7200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1800 1200 7200 6600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2400 1200 7200 6000
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3000 1200 7200 5400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3600 1200 7200 4800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4200 1200 7200 4200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4800 1200 7200 3600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5400 1200 7200 3000
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6000 1200 7200 2400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6600 1200 7200 1800
+2 1 0 5 0 7 50 -1 -1 0.000 0 0 -1 0 0 21
+	 1200 7200 1800 7200 1800 6600 2400 6600 2400 6000 3000 6000
+	 3000 5400 3600 5400 3600 4800 4200 4800 4200 4200 4800 4200
+	 4800 3600 5400 3600 5400 3000 6000 3000 6000 2400 6600 2400
+	 6600 1800 7200 1800 7200 1200

+ 246 - 0
doc/src/images/grille_dijkstra_bad.eps

@@ -0,0 +1,246 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: grille_dijkstra_bad.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Thu Jun 26 12:20:33 2008
+%%For: synave@mycene (Rémi Synave,,,)
+%%BoundingBox: 0 0 740 740
+%%Magnification: 2.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 740 moveto 0 0 lineto 740 0 lineto 740 740 lineto closepath clip newpath
+-134.0 874.0 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.12000 0.12000 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 1200 7200 75 75 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Ellipse
+n 7200 1200 75 75 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Polyline
+n 1200 1200 m
+ 1200 7200 l gs col0 s gr 
+% Polyline
+n 1800 1200 m
+ 1800 7200 l gs col0 s gr 
+% Polyline
+n 2400 1200 m
+ 2400 7200 l gs col0 s gr 
+% Polyline
+n 3000 1200 m
+ 3000 7200 l gs col0 s gr 
+% Polyline
+n 3600 1200 m
+ 3600 7200 l gs col0 s gr 
+% Polyline
+n 4200 1200 m
+ 4200 7200 l gs col0 s gr 
+% Polyline
+n 4800 1200 m
+ 4800 7200 l gs col0 s gr 
+% Polyline
+n 5400 1200 m
+ 5400 7200 l gs col0 s gr 
+% Polyline
+n 6000 1200 m
+ 6000 7200 l gs col0 s gr 
+% Polyline
+n 6600 1200 m
+ 6600 7200 l gs col0 s gr 
+% Polyline
+n 7200 1200 m
+ 7200 7200 l gs col0 s gr 
+% Polyline
+n 1200 1200 m
+ 7200 1200 l gs col0 s gr 
+% Polyline
+n 1200 1800 m
+ 7200 1800 l gs col0 s gr 
+% Polyline
+n 1200 2400 m
+ 7200 2400 l gs col0 s gr 
+% Polyline
+n 1200 3000 m
+ 7200 3000 l gs col0 s gr 
+% Polyline
+n 1200 3600 m
+ 7200 3600 l gs col0 s gr 
+% Polyline
+n 1200 4200 m
+ 7200 4200 l gs col0 s gr 
+% Polyline
+n 1200 4800 m
+ 7200 4800 l gs col0 s gr 
+% Polyline
+n 1200 5400 m
+ 7200 5400 l gs col0 s gr 
+% Polyline
+n 1200 6000 m
+ 7200 6000 l gs col0 s gr 
+% Polyline
+n 1200 6600 m
+ 7200 6600 l gs col0 s gr 
+% Polyline
+n 1200 7200 m
+ 7200 7200 l gs col0 s gr 
+% Polyline
+n 1200 6600 m
+ 1800 7200 l gs col0 s gr 
+% Polyline
+n 1200 6000 m
+ 2400 7200 l gs col0 s gr 
+% Polyline
+n 1200 5400 m
+ 3000 7200 l gs col0 s gr 
+% Polyline
+n 1200 4800 m
+ 3600 7200 l gs col0 s gr 
+% Polyline
+n 1200 4200 m
+ 4200 7200 l gs col0 s gr 
+% Polyline
+n 1200 3600 m
+ 4800 7200 l gs col0 s gr 
+% Polyline
+n 1200 3000 m
+ 5400 7200 l gs col0 s gr 
+% Polyline
+n 1200 2400 m
+ 6000 7200 l gs col0 s gr 
+% Polyline
+n 1200 1800 m
+ 6600 7200 l gs col0 s gr 
+% Polyline
+n 1200 1200 m
+ 7200 7200 l gs col0 s gr 
+% Polyline
+n 1800 1200 m
+ 7200 6600 l gs col0 s gr 
+% Polyline
+n 2400 1200 m
+ 7200 6000 l gs col0 s gr 
+% Polyline
+n 3000 1200 m
+ 7200 5400 l gs col0 s gr 
+% Polyline
+n 3600 1200 m
+ 7200 4800 l gs col0 s gr 
+% Polyline
+n 4200 1200 m
+ 7200 4200 l gs col0 s gr 
+% Polyline
+n 4800 1200 m
+ 7200 3600 l gs col0 s gr 
+% Polyline
+n 5400 1200 m
+ 7200 3000 l gs col0 s gr 
+% Polyline
+n 6000 1200 m
+ 7200 2400 l gs col0 s gr 
+% Polyline
+n 6600 1200 m
+ 7200 1800 l gs col0 s gr 
+% Polyline
+60.000 slw
+n 1200 7200 m 5400 7200 l 5400 6600 l 6600 6600 l 6600 4200 l 7200 4200 l
+
+ 7200 1200 l gs col0 s gr 
+% here ends figure;
+$F2psEnd
+rs
+showpage

+ 96 - 0
doc/src/images/grille_dijkstra_bad.fig

@@ -0,0 +1,96 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 7 50 -1 0 0.000 1 0.0000 1200 7200 75 75 1200 7200 1200 7275
+1 3 0 1 0 7 50 -1 0 0.000 1 0.0000 7200 1200 75 75 7200 1200 7200 1125
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 1200 1200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1800 1200 1800 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2400 1200 2400 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3000 1200 3000 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3600 1200 3600 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4200 1200 4200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4800 1200 4800 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5400 1200 5400 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6000 1200 6000 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6600 1200 6600 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 7200 1200 7200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 1200 7200 1200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 1800 7200 1800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 2400 7200 2400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 3000 7200 3000
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 3600 7200 3600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 4200 7200 4200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 4800 7200 4800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 5400 7200 5400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 6000 7200 6000
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 6600 7200 6600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 7200 7200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 6600 1800 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 6000 2400 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 5400 3000 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 4800 3600 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 4200 4200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 3600 4800 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 3000 5400 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 2400 6000 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 1800 6600 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1200 1200 7200 7200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1800 1200 7200 6600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2400 1200 7200 6000
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3000 1200 7200 5400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3600 1200 7200 4800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4200 1200 7200 4200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4800 1200 7200 3600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5400 1200 7200 3000
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6000 1200 7200 2400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6600 1200 7200 1800
+2 1 0 5 0 7 50 -1 -1 0.000 0 0 -1 0 0 7
+	 1200 7200 5400 7200 5400 6600 6600 6600 6600 4200 7200 4200
+	 7200 1200

+ 198 - 0
doc/src/images/nuage_de_points.eps

@@ -0,0 +1,198 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: nuage_de_points.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Tue Sep  4 21:51:18 2007
+%%For: rr@rr-desktop (rr,,,)
+%%BoundingBox: 0 0 430 339
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 339 moveto 0 0 lineto 430 0 lineto 430 339 lineto closepath clip newpath
+-34.9 350.6 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 2295 1980 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1552 1395 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1305 3465 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col-1 s gr
+
+% Ellipse
+n 4500 4005 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2520 3870 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5130 2745 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3825 675 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3645 2970 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6660 720 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6435 4590 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3375 4815 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 855 2745 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1867 4230 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 4725 225 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2790 630 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3150 5535 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 4770 1485 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5670 3600 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6323 2025 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 7335 3195 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5130 4590 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5715 855 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3285 2407 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3600 1575 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2160 3060 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 585 4005 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1305 405 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3330 1080 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 37 - 0
doc/src/images/nuage_de_points.fig

@@ -0,0 +1,37 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 2295 1980 23 23 2295 1958 2295 2003
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 1552 1395 23 23 1552 1373 1552 1418
+1 4 0 1 -1 0 50 -1 20 0.000 1 0.0000 1305 3465 23 23 1282 3465 1328 3465
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 4500 4005 23 23 4500 3983 4500 4028
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 2520 3870 23 23 2520 3848 2520 3893
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 5130 2745 23 23 5130 2723 5130 2768
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3825 675 23 23 3825 653 3825 698
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3645 2970 23 23 3645 2948 3645 2993
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 6660 720 23 23 6660 698 6660 743
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 6435 4590 23 23 6435 4568 6435 4613
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3375 4815 23 23 3375 4793 3375 4838
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 855 2745 23 23 855 2723 855 2768
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 1867 4230 23 23 1867 4208 1867 4253
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 4725 225 23 23 4725 203 4725 248
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 2790 630 23 23 2790 608 2790 653
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3150 5535 23 23 3150 5513 3150 5558
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 4770 1485 23 23 4770 1463 4770 1508
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 5670 3600 23 23 5670 3578 5670 3623
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 6323 2025 23 23 6323 2003 6323 2048
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 7335 3195 23 23 7335 3173 7335 3218
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 5130 4590 23 23 5130 4568 5130 4613
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 5715 855 23 23 5715 833 5715 878
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3285 2407 23 23 3285 2385 3285 2430
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3600 1575 23 23 3600 1553 3600 1598
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 2160 3060 23 23 2160 3038 2160 3083
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 585 4005 23 23 585 3983 585 4028
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 1305 405 23 23 1305 383 1305 428
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3330 1080 23 23 3330 1058 3330 1103

+ 220 - 0
doc/src/images/nuage_de_points_bounding_box.eps

@@ -0,0 +1,220 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: nuage_de_points_bounding_box.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Wed Sep  5 11:25:01 2007
+%%BoundingBox: 0 0 492 360
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 360 moveto 0 0 lineto 492 0 lineto 492 360 lineto closepath clip newpath
+-4.7 361.2 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 2295 1980 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1552 1395 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1305 3465 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col-1 s gr
+
+% Ellipse
+n 4500 4005 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2520 3870 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5130 2745 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3825 675 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3645 2970 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6660 720 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6435 4590 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3375 4815 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 855 2745 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1867 4230 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 4725 225 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2790 630 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3150 5535 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 4770 1485 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5670 3600 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6323 2025 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 7335 3195 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5130 4590 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5715 855 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3285 2407 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3600 1575 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2160 3060 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3960 2880 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 585 4005 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1305 405 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3330 1080 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+0 slj
+0 slc
+n 585 225 m
+ 7335 5535 l gs col0 s gr 
+% Polyline
+n 585 5535 m
+ 7335 225 l gs col0 s gr 
+% Polyline
+n 585 5535 m 7335 5535 l 7335 225 l 585 225 l
+ 585 5535 l  cp gs col0 s gr 
+/Times-Roman ff 190.50 scf sf
+4095 2925 m
+gs 1 -1 sc (C) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+7335 5670 m
+gs 1 -1 sc (ptmax) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+90 180 m
+gs 1 -1 sc (ptmin) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 47 - 0
doc/src/images/nuage_de_points_bounding_box.fig

@@ -0,0 +1,47 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 2295 1980 23 23 2295 1958 2295 2003
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 1552 1395 23 23 1552 1373 1552 1418
+1 4 0 1 -1 0 50 -1 20 0.000 1 0.0000 1305 3465 23 23 1282 3465 1328 3465
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 4500 4005 23 23 4500 3983 4500 4028
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 2520 3870 23 23 2520 3848 2520 3893
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 5130 2745 23 23 5130 2723 5130 2768
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3825 675 23 23 3825 653 3825 698
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3645 2970 23 23 3645 2948 3645 2993
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 6660 720 23 23 6660 698 6660 743
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 6435 4590 23 23 6435 4568 6435 4613
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3375 4815 23 23 3375 4793 3375 4838
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 855 2745 23 23 855 2723 855 2768
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 1867 4230 23 23 1867 4208 1867 4253
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 4725 225 23 23 4725 203 4725 248
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 2790 630 23 23 2790 608 2790 653
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3150 5535 23 23 3150 5513 3150 5558
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 4770 1485 23 23 4770 1463 4770 1508
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 5670 3600 23 23 5670 3578 5670 3623
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 6323 2025 23 23 6323 2003 6323 2048
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 7335 3195 23 23 7335 3173 7335 3218
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 5130 4590 23 23 5130 4568 5130 4613
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 5715 855 23 23 5715 833 5715 878
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3285 2407 23 23 3285 2385 3285 2430
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3600 1575 23 23 3600 1553 3600 1598
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 2160 3060 23 23 2160 3038 2160 3083
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3960 2880 45 45 3960 2880 3960 2925
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 585 4005 23 23 585 3983 585 4028
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 1305 405 23 23 1305 383 1305 428
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3330 1080 23 23 3330 1058 3330 1103
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 585 225 7335 5535
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 585 5535 7335 225
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 5
+	 585 5535 7335 5535 7335 225 585 225 585 5535
+4 0 0 50 -1 0 12 0.0000 4 135 135 4095 2925 C\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 7335 5670 ptmax\001
+4 0 0 50 -1 0 12 0.0000 4 180 480 90 180 ptmin\001

+ 234 - 0
doc/src/images/nuage_de_points_sphere_ritter.eps

@@ -0,0 +1,234 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: nuage_de_points_sphere_ritter.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Tue Sep  4 21:49:04 2007
+%%For: rr@rr-desktop (rr,,,)
+%%BoundingBox: 0 0 461 461
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 461 moveto 0 0 lineto 461 0 lineto 461 461 lineto closepath clip newpath
+-19.1 411.8 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 2295 1980 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1552 1395 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1305 3465 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col-1 s gr
+
+% Ellipse
+n 4500 4005 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2520 3870 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5130 2745 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3825 675 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3645 2970 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6660 720 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6435 4590 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3375 4815 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 855 2745 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1867 4230 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 4725 225 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2790 630 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3150 5535 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 4770 1485 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5670 3600 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6323 2025 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 7335 3195 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5130 4590 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5715 855 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3285 2407 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3600 1575 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2160 3060 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3960 2880 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3960 2880 3649 3649 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 585 4005 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1305 405 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3330 1080 23 23 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+0 slj
+0 slc
+n 585 225 m
+ 7335 5535 l gs col0 s gr 
+% Polyline
+n 585 5535 m
+ 7335 225 l gs col0 s gr 
+% Polyline
+n 585 5535 m 7335 5535 l 7335 225 l 585 225 l
+ 585 5535 l  cp gs col0 s gr 
+% Polyline
+ [60] 0 sd
+gs  clippath
+3839 2809 m 3950 2912 l 3991 2868 l 3880 2765 l 3880 2765 l 3948 2869 l 3839 2809 l cp
+1425 475 m 1314 372 l 1273 416 l 1384 519 l 1384 519 l 1317 416 l 1425 475 l cp
+eoclip
+n 1305 405 m
+ 3960 2880 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+n 1425 475 m 1317 416 l 1384 519 l 1425 475 l  cp gs 0.00 setgray ef gr  col0 s
+% arrowhead
+n 3839 2809 m 3948 2869 l 3880 2765 l 3839 2809 l  cp gs 0.00 setgray ef gr  col0 s
+/Times-Roman ff 190.50 scf sf
+4095 2925 m
+gs 1 -1 sc (C) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+2655 1620 m
+gs 1 -1 sc (r) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 51 - 0
doc/src/images/nuage_de_points_sphere_ritter.fig

@@ -0,0 +1,51 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 2295 1980 23 23 2295 1958 2295 2003
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 1552 1395 23 23 1552 1373 1552 1418
+1 4 0 1 -1 0 50 -1 20 0.000 1 0.0000 1305 3465 23 23 1282 3465 1328 3465
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 4500 4005 23 23 4500 3983 4500 4028
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 2520 3870 23 23 2520 3848 2520 3893
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 5130 2745 23 23 5130 2723 5130 2768
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3825 675 23 23 3825 653 3825 698
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3645 2970 23 23 3645 2948 3645 2993
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 6660 720 23 23 6660 698 6660 743
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 6435 4590 23 23 6435 4568 6435 4613
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3375 4815 23 23 3375 4793 3375 4838
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 855 2745 23 23 855 2723 855 2768
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 1867 4230 23 23 1867 4208 1867 4253
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 4725 225 23 23 4725 203 4725 248
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 2790 630 23 23 2790 608 2790 653
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3150 5535 23 23 3150 5513 3150 5558
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 4770 1485 23 23 4770 1463 4770 1508
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 5670 3600 23 23 5670 3578 5670 3623
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 6323 2025 23 23 6323 2003 6323 2048
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 7335 3195 23 23 7335 3173 7335 3218
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 5130 4590 23 23 5130 4568 5130 4613
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 5715 855 23 23 5715 833 5715 878
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3285 2407 23 23 3285 2385 3285 2430
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3600 1575 23 23 3600 1553 3600 1598
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 2160 3060 23 23 2160 3038 2160 3083
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3960 2880 45 45 3960 2880 3960 2925
+1 3 0 1 0 0 50 -1 -1 0.000 1 0.0000 3960 2880 3649 3649 3960 2880 315 2700
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 585 4005 23 23 585 3983 585 4028
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 1305 405 23 23 1305 383 1305 428
+1 4 0 1 0 0 50 -1 20 0.000 1 0.0000 3330 1080 23 23 3330 1058 3330 1103
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 585 225 7335 5535
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 585 5535 7335 225
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 5
+	 585 5535 7335 5535 7335 225 585 225 585 5535
+2 1 1 1 0 0 50 -1 -1 4.000 0 0 -1 1 1 2
+	1 1 1.00 60.00 120.00
+	1 1 1.00 60.00 120.00
+	 1305 405 3960 2880
+4 0 0 50 -1 0 12 0.0000 4 135 135 4095 2925 C\001
+4 0 0 50 -1 0 12 0.0000 4 90 60 2655 1620 r\001

+ 163 - 0
doc/src/images/point_dans_triangle.eps

@@ -0,0 +1,163 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: point_dans_triangle.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Wed Sep  5 22:13:46 2007
+%%For: rr@rr-desktop (rr,,,)
+%%BoundingBox: 0 0 300 317
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 317 moveto 0 0 lineto 300 0 lineto 300 317 lineto closepath clip newpath
+-78.4 343.9 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Arc
+7.500 slw
+0 slc
+gs  clippath
+3289 3237 m 3141 3207 l 3129 3266 l 3277 3296 l 3277 3296 l 3166 3243 l 3289 3237 l cp
+eoclip
+ [60] 0 sd
+n 3122.4 3720.2 481.0 36.3033 -86.7055 arcn
+gs col0 s gr
+ gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 3289 3237 m 3166 3243 l 3277 3296 l  col0 s
+% Arc
+gs  clippath
+2768 3784 m 2866 3900 l 2912 3862 l 2814 3745 l 2814 3745 l 2869 3857 l 2768 3784 l cp
+eoclip
+ [60] 0 sd
+n 2998.9 3680.4 223.8 -74.1675 122.0924 arcn
+gs col0 s gr
+ gr
+ [] 0 sd
+% arrowhead
+n 2768 3784 m 2869 3857 l 2814 3745 l  col0 s
+% Arc
+gs  clippath
+3358 4052 m 3360 3900 l 3300 3899 l 3298 4051 l 3298 4051 l 3330 3932 l 3358 4052 l cp
+eoclip
+ [60] 0 sd
+n 3040.4 3979.1 296.6 174.9852 -12.4776 arcn
+gs col0 s gr
+ gr
+ [] 0 sd
+% arrowhead
+n 3358 4052 m 3330 3932 l 3298 4051 l  col0 s
+% Polyline
+n 3600 675 m 1350 5175 l 5850 5175 l
+ 3600 675 l  cp gs col0 s gr 
+% Polyline
+ [60] 0 sd
+n 3015 3735 m
+ 3600 675 l gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 3015 3735 m
+ 1350 5175 l gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 3015 3735 m
+ 5850 5175 l gs col0 s gr  [] 0 sd
+/Times-Roman ff 190.50 scf sf
+5850 5400 m
+gs 1 -1 sc (C) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+3510 585 m
+gs 1 -1 sc (A) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+1260 5445 m
+gs 1 -1 sc (B) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+3105 3735 m
+gs 1 -1 sc (M) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 27 - 0
doc/src/images/point_dans_triangle.fig

@@ -0,0 +1,27 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+5 1 1 1 0 7 50 -1 -1 4.000 0 1 1 0 3122.357 3720.214 3510 4005 3555 3510 3150 3240
+	0 0 1.00 60.00 120.00
+5 1 1 1 0 7 50 -1 -1 4.000 0 1 1 0 2998.928 3680.357 3060 3465 2790 3600 2880 3870
+	0 0 1.00 60.00 120.00
+5 1 1 1 0 7 50 -1 -1 4.000 0 1 1 0 3040.435 3979.076 2745 4005 3060 4275 3330 3915
+	0 0 1.00 60.00 120.00
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
+	 3600 675 1350 5175 5850 5175 3600 675
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 3015 3735 3600 675
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 3015 3735 1350 5175
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 3015 3735 5850 5175
+4 0 0 50 -1 0 12 0.0000 4 135 135 5850 5400 C\001
+4 0 0 50 -1 0 12 0.0000 4 135 135 3510 585 A\001
+4 0 0 50 -1 0 12 0.0000 4 135 135 1260 5445 B\001
+4 0 0 50 -1 0 12 0.0000 4 135 180 3105 3735 M\001

+ 163 - 0
doc/src/images/point_non_dans_triangle.eps

@@ -0,0 +1,163 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: point_non_dans_triangle.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Wed Sep  5 22:13:34 2007
+%%For: rr@rr-desktop (rr,,,)
+%%BoundingBox: 0 0 309 317
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 317 moveto 0 0 lineto 309 0 lineto 309 317 lineto closepath clip newpath
+-69.9 343.9 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Arc
+7.500 slw
+0 slc
+gs  clippath
+1759 2622 m 1614 2576 l 1596 2634 l 1741 2679 l 1741 2679 l 1636 2615 l 1759 2622 l cp
+eoclip
+ [60] 0 sd
+n 1616.8 2844.6 234.7 66.5954 -89.2152 arcn
+gs col0 s gr
+ gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 1759 2622 m 1636 2615 l 1741 2679 l  col0 s
+% Arc
+gs  clippath
+1895 3289 m 1922 3140 l 1863 3129 l 1836 3278 l 1836 3278 l 1887 3166 l 1895 3289 l cp
+eoclip
+ [60] 0 sd
+n 1578.6 3163.0 311.7 137.1553 -2.3950 arcn
+gs col0 s gr
+ gr
+ [] 0 sd
+% arrowhead
+n 1895 3289 m 1887 3166 l 1836 3278 l  col0 s
+% Arc
+gs  clippath
+1484 3830 m 1332 3841 l 1337 3901 l 1488 3890 l 1488 3890 l 1367 3869 l 1484 3830 l cp
+eoclip
+ [60] 0 sd
+n 1350.6 2993.4 876.6 -48.1897 90.0387 arc
+gs col0 s gr
+ gr
+ [] 0 sd
+% arrowhead
+n 1484 3830 m 1367 3869 l 1488 3890 l  col0 s
+% Polyline
+n 3600 675 m 1350 5175 l 5850 5175 l
+ 3600 675 l  cp gs col0 s gr 
+% Polyline
+ [60] 0 sd
+n 1350 2880 m
+ 1350 5175 l gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 1350 2880 m
+ 5850 5175 l gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 1350 2880 m
+ 3600 675 l gs col0 s gr  [] 0 sd
+/Times-Roman ff 190.50 scf sf
+5850 5400 m
+gs 1 -1 sc (C) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+3510 585 m
+gs 1 -1 sc (A) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+1260 5445 m
+gs 1 -1 sc (B) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+1125 2925 m
+gs 1 -1 sc (M) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 27 - 0
doc/src/images/point_non_dans_triangle.fig

@@ -0,0 +1,27 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+5 1 1 1 0 7 50 -1 -1 4.000 0 1 1 0 1616.786 2844.643 1710 3060 1845 2790 1620 2610
+	0 0 1.00 60.00 120.00
+5 1 1 1 0 7 50 -1 -1 4.000 0 1 1 0 1578.553 3163.026 1350 3375 1755 3420 1890 3150
+	0 0 1.00 60.00 120.00
+5 1 1 1 0 7 50 -1 -1 4.000 0 0 1 0 1350.592 2993.388 1935 2340 2160 3330 1350 3870
+	0 0 1.00 60.00 120.00
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
+	 3600 675 1350 5175 5850 5175 3600 675
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 1350 2880 1350 5175
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 1350 2880 5850 5175
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 1350 2880 3600 675
+4 0 0 50 -1 0 12 0.0000 4 135 135 5850 5400 C\001
+4 0 0 50 -1 0 12 0.0000 4 135 135 3510 585 A\001
+4 0 0 50 -1 0 12 0.0000 4 135 135 1260 5445 B\001
+4 0 0 50 -1 0 12 0.0000 4 135 180 1125 2925 M\001

+ 177 - 0
doc/src/images/repositionnement.eps

@@ -0,0 +1,177 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: repostionnement.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Mon Sep  3 11:09:34 2007
+%%For: rr@rr-desktop (rr,,,)
+%%BoundingBox: 0 0 407 166
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 166 moveto 0 0 lineto 407 0 lineto 407 166 lineto closepath clip newpath
+-70.4 275.5 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 1170 4230 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3600 4230 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2430 4230 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1755 3060 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3015 3060 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 7515 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6840 3060 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5567 3028 35 35 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5085 4140 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6345 4230 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2385 1800 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6300 1845 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+0 slj
+0 slc
+gs  clippath
+4408 3180 m 4560 3180 l 4560 3120 l 4408 3120 l 4408 3120 l 4528 3150 l 4408 3180 l cp
+eoclip
+n 3915 3150 m
+ 4545 3150 l gs col0 s gr gr
+
+% arrowhead
+n 4408 3180 m 4528 3150 l 4408 3120 l  col0 s
+% Polyline
+n 1170 4230 m
+ 3600 4230 l gs col0 s gr 
+% Polyline
+n 1170 4230 m 2385 1800 l
+ 3600 4275 l gs col0 s gr 
+% Polyline
+n 1755 3060 m 2430 4230 l 3015 3060 l
+ 1800 3060 l gs col0 s gr 
+% Polyline
+n 5580 3015 m 6345 4230 l 6840 3060 l
+ 5580 3015 l  cp gs col0 s gr 
+% Polyline
+n 5085 4140 m 6345 4230 l 7515 4320 l 6840 3060 l 6300 1845 l 5580 3015 l
+
+ 5085 4140 l  cp gs col0 s gr 
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 267 - 0
doc/src/images/repositionnement_vef_model_loop.eps

@@ -0,0 +1,267 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: repostionnement_vef_model_loop.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Tue Sep  4 20:10:03 2007
+%%For: rr@rr-desktop (rr,,,)
+%%BoundingBox: 0 0 478 189
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 189 moveto 0 0 lineto 478 0 lineto 478 189 lineto closepath clip newpath
+-33.1 287.2 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 1170 4230 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3600 4230 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2430 4230 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1755 3060 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3015 3060 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 7515 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6840 3060 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5567 3028 35 35 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5085 4140 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6345 4230 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2385 1800 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6300 1845 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+0 slj
+0 slc
+gs  clippath
+4408 3180 m 4560 3180 l 4560 3120 l 4408 3120 l 4408 3120 l 4528 3150 l 4408 3180 l cp
+eoclip
+n 3915 3150 m
+ 4545 3150 l gs col0 s gr gr
+
+% arrowhead
+n 4408 3180 m 4528 3150 l 4408 3120 l  col0 s
+% Polyline
+n 1170 4230 m
+ 3600 4230 l gs col0 s gr 
+% Polyline
+n 1170 4230 m 2385 1800 l
+ 3600 4275 l gs col0 s gr 
+% Polyline
+n 1755 3060 m 2430 4230 l 3015 3060 l
+ 1800 3060 l gs col0 s gr 
+% Polyline
+n 5580 3015 m 6345 4230 l 6840 3060 l
+ 5580 3015 l  cp gs col0 s gr 
+% Polyline
+n 5085 4140 m 6345 4230 l 7515 4320 l 6840 3060 l 6300 1845 l 5580 3015 l
+
+ 5085 4140 l  cp gs col0 s gr 
+/Times-Roman ff 190.50 scf sf
+2205 1710 m
+gs 1 -1 sc (Ve3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+990 4455 m
+gs 1 -1 sc (Ve1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+3420 4455 m
+gs 1 -1 sc (Ve2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+4905 4365 m
+gs 1 -1 sc (Ve1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+7335 4545 m
+gs 1 -1 sc (Ve2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6120 1755 m
+gs 1 -1 sc (Ve3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+3105 3060 m
+gs 1 -1 sc (nbvertex+ed2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+540 3060 m
+gs 1 -1 sc (nbvertex+ed3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+2205 3015 m
+gs 1 -1 sc (ed6) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+2025 3510 m
+gs 1 -1 sc (ed4) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+2520 3510 m
+gs 1 -1 sc (ed5) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+1665 4185 m
+gs 1 -1 sc (ed1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+2925 4185 m
+gs 1 -1 sc (ed1') col0 sh gr
+/Times-Roman ff 190.50 scf sf
+3375 3735 m
+gs 1 -1 sc (ed2') col0 sh gr
+/Times-Roman ff 190.50 scf sf
+2745 2385 m
+gs 1 -1 sc (ed2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+1755 2385 m
+gs 1 -1 sc (ed3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+1080 3735 m
+gs 1 -1 sc (ed3') col0 sh gr
+/Times-Roman ff 190.50 scf sf
+1935 4455 m
+gs 1 -1 sc (nbvertex+ed1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+5760 4455 m
+gs 1 -1 sc (nbvertex+ed1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+5535 4140 m
+gs 1 -1 sc (ed1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6795 4230 m
+gs 1 -1 sc (ed1') col0 sh gr
+/Times-Roman ff 190.50 scf sf
+4410 3060 m
+gs 1 -1 sc (nbvertex+ed3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6930 3060 m
+gs 1 -1 sc (nbvertex+ed2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6660 2565 m
+gs 1 -1 sc (ed2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+5625 2475 m
+gs 1 -1 sc (ed3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+4995 3645 m
+gs 1 -1 sc (ed3') col0 sh gr
+/Times-Roman ff 190.50 scf sf
+7200 3690 m
+gs 1 -1 sc (ed2') col0 sh gr
+/Times-Roman ff 190.50 scf sf
+5940 3510 m
+gs 1 -1 sc (ed4) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6300 3690 m
+gs 1 -1 sc (ed5) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6120 3015 m
+gs 1 -1 sc (ed6) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 213 - 0
doc/src/images/repositionnement_vf_model_loop.eps

@@ -0,0 +1,213 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: repostionnement_hash_model_loop.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 5-alpha7
+%%CreationDate: Mon Sep  3 18:36:38 2007
+%%For: rr@rr-laptop (rr,,,)
+%%BoundingBox: 0 0 438 190
+%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 190 moveto 0 0 lineto 438 0 lineto 438 190 lineto closepath clip newpath
+-52.9 287.2 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 1170 4230 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3600 4230 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2430 4230 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 1755 3060 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 3015 3060 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 7515 4320 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6840 3060 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5567 3028 35 35 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5085 4140 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6345 4230 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 2385 1800 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 6300 1845 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+0 slj
+0 slc
+gs  clippath
+4408 3180 m 4560 3180 l 4560 3120 l 4408 3120 l 4408 3120 l 4528 3150 l 4408 3180 l cp
+eoclip
+n 3915 3150 m
+ 4545 3150 l gs col0 s gr gr
+
+% arrowhead
+n 4408 3180 m 4528 3150 l 4408 3120 l  col0 s
+% Polyline
+n 1170 4230 m
+ 3600 4230 l gs col0 s gr 
+% Polyline
+n 1170 4230 m 2385 1800 l
+ 3600 4275 l gs col0 s gr 
+% Polyline
+n 1755 3060 m 2430 4230 l 3015 3060 l
+ 1800 3060 l gs col0 s gr 
+% Polyline
+n 5580 3015 m 6345 4230 l 6840 3060 l
+ 5580 3015 l  cp gs col0 s gr 
+% Polyline
+n 5085 4140 m 6345 4230 l 7515 4320 l 6840 3060 l 6300 1845 l 5580 3015 l
+
+ 5085 4140 l  cp gs col0 s gr 
+/Times-Roman ff 190.50 scf sf
+2205 1710 m
+gs 1 -1 sc (Ve3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+990 4455 m
+gs 1 -1 sc (Ve1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+2070 4455 m
+gs 1 -1 sc (ptmilieu1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+3420 4455 m
+gs 1 -1 sc (Ve2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+855 3105 m
+gs 1 -1 sc (ptmilieu2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+3150 3105 m
+gs 1 -1 sc (ptmilieu3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+4905 4365 m
+gs 1 -1 sc (Ve1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+5985 4455 m
+gs 1 -1 sc (ptmilieu1) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+7335 4545 m
+gs 1 -1 sc (Ve2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+4725 3060 m
+gs 1 -1 sc (ptmilieu2) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6975 3105 m
+gs 1 -1 sc (ptmilieu3) col0 sh gr
+/Times-Roman ff 190.50 scf sf
+6120 1755 m
+gs 1 -1 sc (Ve3) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
+%%Trailer
+%EOF

+ 35 - 0
doc/src/images/repostionnement.fig

@@ -0,0 +1,35 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 1170 4230 45 45 1170 4230 1170 4275
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3600 4230 45 45 3600 4230 3600 4275
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2430 4230 45 45 2430 4230 2430 4275
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 1755 3060 45 45 1755 3060 1800 3060
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3015 3060 45 45 3015 3060 2970 3060
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 7515 4320 45 45 7515 4320 7515 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6840 3060 45 45 6840 3060 6795 3060
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5567 3028 35 35 5567 3028 5580 3060
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5085 4140 45 45 5085 4140 5040 4140
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6345 4230 45 45 6345 4230 6390 4230
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2385 1800 45 45 2385 1800 2385 1845
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6300 1845 45 45 6300 1845 6300 1890
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3915 3150 4545 3150
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1170 4230 3600 4230
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 3
+	 1170 4230 2385 1800 3600 4275
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 4
+	 1755 3060 2430 4230 3015 3060 1800 3060
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 4
+	 5580 3015 6345 4230 6840 3060 5580 3015
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 7
+	 5085 4140 6345 4230 7515 4320 6840 3060 6300 1845 5580 3015
+	 5085 4140

+ 47 - 0
doc/src/images/repostionnement_hash_model_loop.fig

@@ -0,0 +1,47 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 1170 4230 45 45 1170 4230 1170 4275
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3600 4230 45 45 3600 4230 3600 4275
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2430 4230 45 45 2430 4230 2430 4275
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 1755 3060 45 45 1755 3060 1800 3060
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3015 3060 45 45 3015 3060 2970 3060
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 7515 4320 45 45 7515 4320 7515 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6840 3060 45 45 6840 3060 6795 3060
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5567 3028 35 35 5567 3028 5580 3060
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5085 4140 45 45 5085 4140 5040 4140
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6345 4230 45 45 6345 4230 6390 4230
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2385 1800 45 45 2385 1800 2385 1845
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6300 1845 45 45 6300 1845 6300 1890
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3915 3150 4545 3150
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1170 4230 3600 4230
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 3
+	 1170 4230 2385 1800 3600 4275
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 4
+	 1755 3060 2430 4230 3015 3060 1800 3060
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 4
+	 5580 3015 6345 4230 6840 3060 5580 3015
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 7
+	 5085 4140 6345 4230 7515 4320 6840 3060 6300 1845 5580 3015
+	 5085 4140
+4 0 0 50 -1 0 12 0.0000 4 150 345 2205 1710 Ve3\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 990 4455 Ve1\001
+4 0 0 50 -1 0 12 0.0000 4 195 780 2070 4455 ptmilieu1\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 3420 4455 Ve2\001
+4 0 0 50 -1 0 12 0.0000 4 195 780 855 3105 ptmilieu2\001
+4 0 0 50 -1 0 12 0.0000 4 195 780 3150 3105 ptmilieu3\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 4905 4365 Ve1\001
+4 0 0 50 -1 0 12 0.0000 4 195 780 5985 4455 ptmilieu1\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 7335 4545 Ve2\001
+4 0 0 50 -1 0 12 0.0000 4 195 780 4725 3060 ptmilieu2\001
+4 0 0 50 -1 0 12 0.0000 4 195 780 6975 3105 ptmilieu3\001
+4 0 0 50 -1 0 12 0.0000 4 150 345 6120 1755 Ve3\001

+ 65 - 0
doc/src/images/repostionnement_vef_model_loop.fig

@@ -0,0 +1,65 @@
+#FIG 3.2  Produced by xfig version 3.2.5-alpha5
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 1170 4230 45 45 1170 4230 1170 4275
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3600 4230 45 45 3600 4230 3600 4275
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2430 4230 45 45 2430 4230 2430 4275
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 1755 3060 45 45 1755 3060 1800 3060
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3015 3060 45 45 3015 3060 2970 3060
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 7515 4320 45 45 7515 4320 7515 4365
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6840 3060 45 45 6840 3060 6795 3060
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5567 3028 35 35 5567 3028 5580 3060
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 5085 4140 45 45 5085 4140 5040 4140
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6345 4230 45 45 6345 4230 6390 4230
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 2385 1800 45 45 2385 1800 2385 1845
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 6300 1845 45 45 6300 1845 6300 1890
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3915 3150 4545 3150
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1170 4230 3600 4230
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 3
+	 1170 4230 2385 1800 3600 4275
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 4
+	 1755 3060 2430 4230 3015 3060 1800 3060
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 4
+	 5580 3015 6345 4230 6840 3060 5580 3015
+2 1 0 1 0 0 50 -1 -1 0.000 0 0 -1 0 0 7
+	 5085 4140 6345 4230 7515 4320 6840 3060 6300 1845 5580 3015
+	 5085 4140
+4 0 0 50 -1 0 12 0.0000 4 135 330 2205 1710 Ve3\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 990 4455 Ve1\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 3420 4455 Ve2\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 4905 4365 Ve1\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 7335 4545 Ve2\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 6120 1755 Ve3\001
+4 0 0 50 -1 0 12 0.0000 4 135 1125 3105 3060 nbvertex+ed2\001
+4 0 0 50 -1 0 12 0.0000 4 135 1125 540 3060 nbvertex+ed3\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 2205 3015 ed6\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 2025 3510 ed4\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 2520 3510 ed5\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 1665 4185 ed1\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 2925 4185 ed1'\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 3375 3735 ed2'\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 2745 2385 ed2\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 1755 2385 ed3\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 1080 3735 ed3'\001
+4 0 0 50 -1 0 12 0.0000 4 135 1125 1935 4455 nbvertex+ed1\001
+4 0 0 50 -1 0 12 0.0000 4 135 1125 5760 4455 nbvertex+ed1\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 5535 4140 ed1\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 6795 4230 ed1'\001
+4 0 0 50 -1 0 12 0.0000 4 135 1125 4410 3060 nbvertex+ed3\001
+4 0 0 50 -1 0 12 0.0000 4 135 1125 6930 3060 nbvertex+ed2\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 6660 2565 ed2\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 5625 2475 ed3\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 4995 3645 ed3'\001
+4 0 0 50 -1 0 12 0.0000 4 135 330 7200 3690 ed2'\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 5940 3510 ed4\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 6300 3690 ed5\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 6120 3015 ed6\001

+ 143 - 0
doc/src/manuel.bib

@@ -0,0 +1,143 @@
+@MastersThesis{L1987,
+  author = 	 {Charles Loop},
+  title = 	 {Smooth subdivision surfaces based on triangles},
+  school = 	 {University of Utah},
+  year = 	 {1987}
+}
+
+@inproceedings{GH1997,
+  author    = {Michael Garland and
+               Paul S. Heckbert},
+  title     = {Surface simplification using quadric error metrics.},
+  booktitle = {SIGGRAPH},
+  year      = {1997},
+  pages     = {209-216}
+}
+
+@inproceedings{G1999,
+  author    = {Michael Garland},
+  title     = {Multiresolution Modeling: Survey and 
+Future Opportunities.},
+  booktitle = {EUROGRAPHICS'99},
+  year      = {1999}
+}
+
+@article{CRS1998,
+    author = "P. Cignoni and C. Rocchini and R. Scopigno",
+    title = "{Metro}: Measuring Error on Simplified Surfaces",
+    journal = "Com{\-}pu{\-}ter Graphics Forum",
+    volume = "17",
+    number = "2",
+    pages = "167--174",
+    year = "1998",
+}
+
+@article{DKMS2006,
+ author = {Lori Freitag Diachin and Patrick Knupp and Todd Munson and Suzanne Shontz},
+ title = {A comparison of two optimization methods for mesh quality improvement},
+ journal = {Eng. with Comput.},
+ volume = {22},
+ number = {2},
+ year = {2006},
+ issn = {0177-0667},
+ pages = {61--74},
+ doi = {http://dx.doi.org/10.1007/s00366-006-0015-0},
+ publisher = {Springer-Verlag},
+ address = {London, UK},
+ }
+
+@article{ELF1997,
+ author = {D. W. Eggert and A. Lorusso and R. B. Fisher},
+ title = {Estimating 3-D rigid body transformations: a comparison of four major algorithms},
+ journal = {Mach. Vision Appl.},
+ volume = {9},
+ number = {5-6},
+ year = {1997},
+ issn = {0932-8092},
+ pages = {272--290},
+ doi = {http://dx.doi.org/10.1007/s001380050048},
+ publisher = {Springer-Verlag New York, Inc.},
+ address = {Secaucus, NJ, USA},
+ }
+
+@Article{H1987,
+  author = 	 {B. K. P. Horn},
+  title = 	 {Closed-form solution of absolute orientation using unit quaternions},
+  journal = 	 {Journal of the Optical Society of America. A, Optics and image science  (J. Opt. Soc. Am., A Opt. image sci.) },
+  year = 	 {1987},
+  volume = 	 {4},
+  number = 	 {4},
+  pages = 	 {629--642}
+}
+
+@misc{CSK2002,
+  author = "D. Chetverikov and D. Svirko and D. Stepanov and P. Krsek",
+  title = "The Trimmed Iterative Closest Point Algorithm",
+  text = "D. Chetverikov, D. Svirko, D. Stepanov, and P. Krsek. The Trimmed Iterative
+    Closest Point Algorithm. In Proc. International Conf. on Pattern Recognition,
+    Quebec, Canada, 2002. IEEE Comp. Soc.",
+  year = "2002",
+  url = "citeseer.ist.psu.edu/chetverikov02trimmed.html" 
+}
+
+@article{BK1992,
+author = {P.J. Besl and N.D. McKay},
+title = {A Method for Registration of 3-D Shapes},
+journal = {IEEE Transactions on Pattern Analysis and Machine Intelligence},
+volume = {14},
+number = {2},
+year = {1992},
+issn = {0162-8828},
+pages = {239-256},
+doi = {http://doi.ieeecomputersociety.org/10.1109/34.121791},
+publisher = {IEEE Computer Society},
+address = {Los Alamitos, CA, USA}
+}
+
+@article{R1990,
+ author = {Jack Ritter},
+ title = {An efficient bounding sphere},
+ book = {Graphics gems},
+ year = {1990},
+ isbn = {0-12-286169-5},
+ pages = {301--303},
+ publisher = {Academic Press Professional, Inc.},
+ address = {San Diego, CA, USA},
+ }
+
+@ARTICLE{C1885,
+  author = {CHRYSTAL},
+  title = {Sur le problème de la construction du cercle minimum renfermant n
+	points donnés d'un plan},
+  journal = {Bulletin de la Société Mathématique de France},
+  year = {1885},
+  volume = {13},
+  pages = {198--200}
+}
+
+@article{P1957,
+  author    = {R. Prim},
+  title     = {Shortest connection networks and some generalizations},
+  journal   = {Bell System Technical Journal},
+  volume    = {36},
+  year      = {1957},
+  pages     = {1389--1401}
+}
+
+@article{AS2000,
+    author = "Marco Attene and Michela Spagnuolo",
+    title = "Automatic surface reconstruction from point sets in space",
+    journal = "Computer Graphics Forum",
+    volume = "19",
+    number = "3",
+    pages = "457--465",
+    year = "2000"
+}
+
+@TechReport{D1971,
+  author = 	 {E. W. Dijkstra},
+  title = 	 {A Short Introduction to the Art of Programming},
+  institution =  {Technische Hogeschool Eindhoven},
+  year = 	 {1971},
+  month = 	 {August}
+}

+ 123 - 0
doc/src/matrix.tex

@@ -0,0 +1,123 @@
+\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 MATRIX}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+Cette bibliothèque permet la manipulation de matrice et d'effectuer différents calculs comme le calcul du déterminant, l'addition, la soustraction ou la multiplication de deux matrices.\\
+Cette bibliothèque utilise les matrices définies dans la bibliothèque GSL (http://www.gnu.org/software/gsl/).\\
+Il faudra donc installer GSL avant d'utiliser cette bibliothèque.
+
+\section{Fonctions}
+
+\textbullet \texttt{double matrix\_determinant(gsl\_matrix *m)}\\
+Calcul du déterminant d'une matrice.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : matrice dont on cherche le déterminant.\\
+\texttt{retour} : déterminant de la matrice.\\
+
+
+\textbullet \texttt{double matrix\_frobenius\_norm(gsl\_matrix *m)}\\
+Calcul de la norme de frobenius (aussi appelée norme euclidienne) d'une matrice. La norme de frobenius d'une matrice $A$ est notée : $||A||_F\\$
+\textbf{Formule :} (http://mathworld.wolfram.com/FrobeniusNorm.html)\\
+La norme de frobenius est la racine carrée de la somme des éléments au carrés.\\
+Calcul de la norme de frobenius d'un matrice $A$ de $m$ lignes et $n$ colonnes.\\
+$$||A||_F=\sqrt{\sum_{i=0}^m \sum_{j=0}^n a_{ij}^2}$$
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : matrice dont on cherche la norme de Frobenius.\\
+\texttt{retour} : norme de Frobenius.\\
+
+
+
+\textbullet \texttt{gsl\_matrix* matrix\_add(gsl\_matrix *A, gsl\_matrix *B)}\\
+Addition de deux matrices. Attention aux tailles des matrices qui doivent être compatibles avec le calcul.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{A} : première matrice.\\
+\texttt{B} : seconde matrice.\\
+\texttt{retour} : Nouvelle matrice contenant l'addition de A et B.\\
+
+
+\textbullet \texttt{gsl\_matrix* matrix\_sub(gsl\_matrix *A, gsl\_matrix *B)}\\
+Soustraction de deux matrices. Attention aux tailles des matrices qui doivent être compatibles avec le calcul.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{A} : première matrice.\\
+\texttt{B} : seconde matrice.\\
+\texttt{retour} : Nouvelle matrice contenant la soustraction de A et B.\\
+
+
+\textbullet \texttt{gsl\_matrix* matrix\_mul\_scale(gsl\_matrix *A, double n)}\\
+Multiplication d'une matrice par un scalaire.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{A} : la matrice à multiplier.\\
+\texttt{n} : le scalaire.\\
+\texttt{retour} : Nouvelle matrice contenant la matrice multiplié par le scalaire.\\
+
+
+\textbullet \texttt{gsl\_matrix* matrix\_mul(gsl\_matrix *A, gsl\_matrix *B)}\\
+Multiplication de deux matrices. Attention aux tailles des matrices qui doivent être compatibles avec le calcul.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{A} : première matrice.\\
+\texttt{B} : seconde matrice.\\
+\texttt{retour} : Nouvelle matrice contenant la multiplication de A et B.\\
+
+
+\textbullet \texttt{gsl\_matrix* matrix\_inverse(gsl\_matrix *m)}\\
+Calcul de l'inverse d'une matrice.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : la matrice.\\
+\texttt{retour} : Nouvelle matrice contenant l'inverse de m.\\
+
+
+\textbullet \texttt{void matrix\_display(gsl\_matrix *m)}\\
+Affichage d'une matrice.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : la matrice.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{gsl\_matrix* matrix\_init(double *data, int nbline, int nbcol)}\\
+Initialisation d'une matrice à l'aide d'un tableau de rééls.\\
+\textbf{Exemple d'utilisation :}
+\begin{verbatim}
+data = {1 2 3 4 5 6}
+nbline = 3
+nbcol = 2
+
+          (1 2)
+matrice = (3 4)
+          (5 6)
+\end{verbatim}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{data} : données pour remplir la matrice.\\
+\texttt{nbline} : Nombre de lignes.\\
+\texttt{nbcol} : Nombre de colonnes\\
+\texttt{retour} : Nouvelle matrice contenant les données du tableau data dans \texttt{nbline} lignes et \texttt{nbcol} colonnes.\\
+
+
+\textbullet \texttt{gsl\_matrix* matrix\_transpose(gsl\_matrix *m)}\\
+Calcul de la transposé d'une matrice.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : la matrice.\\
+\texttt{retour} : Nouvelle matrice contenant la transpose de m.\\
+
+
+\end{document}

+ 1149 - 0
doc/src/model.tex

@@ -0,0 +1,1149 @@
+\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 MODEL}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+
+Cette bibliothèque permet de gérer, ouvrir et sauver des maillages représentés par un nuage de points et un ensemble de faces. Elle contient les structures de données \texttt{vf\_model} et \texttt{vef\_model} dans lesquelles sont stockées les maillages.\\
+Des fonctions permettant d'initialiser un nouveau maillage, d'ouvrir un modèle et d'enregistrer dans un fichier sont accessibles à partir de cette bibliothèque. Il est également possible d'ajouter des sommets, des arêtes et des faces en fonction du type de structures de données utilisé.\\
+Toutes les fonctions implémentées pour une structure de données l'est pour toutes les structures de données.\\
+\\
+Pour avoir accès à ces structures de données il faut inclure le fichier d'en-tete ``model.h'' :\\
+\begin{verbatim}
+#include ``model.h''
+\end{verbatim}
+
+\section{Structures de données}
+
+La première structure de données est \texttt{vf\_model}. Le maillage stocké contient une liste de sommets \texttt{ve} de \texttt{vf\_vertex} et une liste de faces \texttt{fa} de (\texttt{vf\_face}. Les arêtes ne sont donc pas explicitement stockées mais peuvent être retrouvées au moyen d'une table de hachage.\\
+Les variables \texttt{xmin,ymin,zmin} et \texttt{xmax,ymax,zmax} permettent de stocker la bounding box générale du maillage.\\
+\begin{verbatim}
+typedef struct
+{
+  vf_vertex *ve; //liste des sommets
+  vf_face *fa; //lsite des faces
+  int nbvertex; //nombre de sommets
+  int nbface; //nombre de faces
+  double xmin,ymin,zmin,xmax,ymax,zmax; //bounding box du maillage
+}vf_model;
+\end{verbatim}
+
+La structure de données \texttt{vef\_model} permet les mêmes opérations que \texttt{vf\_model}. Elle contient une liste de sommets \texttt{ve} de \texttt{vef\_vertex}, une liste d'arêtes \texttt{ed} de \texttt{vef\_edge} et une liste de faces \texttt{fa} de \texttt{vef\_face}.\\
+Les variables \texttt{xmin,ymin,zmin} et \texttt{xmax,ymax,zmax} permettent de stocker la bounding box générale du maillage.\\
+\begin{verbatim}
+typedef struct
+{
+  vef_vertex *ve; //liste de sommets
+  vef_edge *ed; //liste d'arêtes
+  vef_face *fa; //liste de faces
+  int nbvertex; //nombre de sommets
+  int nbedge; //nombre d'arêtes
+  int nbface; //nombre de faces
+  double xmin,ymin,zmin,xmax,ymax,zmax; //bounding box du maillage
+}vef_model;
+\end{verbatim}
+
+
+\section{Fonctions}
+\subsection{fonctions utilisant \texttt{vf\_model}}
+
+\textbullet \texttt{void vf\_model\_init(vf\_model *m)}\\
+Initialisation d'un modèle avec un maillage vide.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_free(vf\_model *m)}\\
+Libération de l'espace mémoire utilisé.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+\textbullet \texttt{void vf\_model\_display(vf\_model m)}\\
+Affichage du nombre de sommets et du nombre de faces du modèle ainsi que la bounding box.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_display\_detail(vf\_model m)}\\
+Affichage du nombre de sommets, leurs coordonnées et leur valence et la liste des sommets adjacents.\\
+Affichage du nombre de faces ainsi que les trois points les définissant et leur type.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_update\_num\_edge(vf\_edge *e, vf\_model *m, hashtable *table)}\\
+Fonction pouvant etre passé en paramètre lors de la contruction de la table de hachage contenant les aretes du modèle.\\
+Cette fonction mettra à jour les aretes en leur attribuant un numéro unique.\\
+\textbf{Utilisation : }\\
+\begin{verbatim}
+ptf_func_hashtable func[1];
+func[0]=vf_model_update_num_edge;
+
+hashtable *table=vf_model_construction_edge_table(m,func,1);
+\end{verbatim}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{e} : la \texttt{vf\_edge} qui sera mis à jour.\\
+\texttt{m} : le modèle.\\
+\texttt{table} : la table de hachage.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_update\_length\_edge(vf\_edge *e, vf\_model *m, hashtable *table)}\\
+Fonction pouvant etre passé en paramètre lors de la contruction de la table de hachage contenant les aretes du modèle.\\
+Cette fonction mettra à jour les longueurs des aretes.\\
+\textbf{Utilisation : }\\
+\begin{verbatim}
+ptf_func_hashtable func[1];
+func[0]=vf_model_update_length_edge;
+
+hashtable *table=vf_model_construction_edge_table(m,func,1);
+\end{verbatim}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{e} : la \texttt{vf\_edge} qui sera mis à jour.\\
+\texttt{m} : le modèle.\\
+\texttt{table} : la table de hachage.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{hashtable* vf\_model\_construction\_edge\_table(vf\_model *m, ptf\_func\_hashtable *func, int nbfunc)}\\
+Construction de la table de hachage stockant les arete du modèle.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{func} : tableau de pointeur de fonction qui seront appliquées aux aretes.\\
+\texttt{nbfunc} : taille du tableau.\\
+\texttt{retour} : la table de hachage.\\
+
+
+\textbullet \texttt{void vf\_model\_destroy\_edge\_table(hashtable *table)}\\
+Destruction de la table de hachage stockant les arete du modèle.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{table} : la table de hachage.\\
+\texttt{retour} : aucun.\\
+
+
+
+\textbullet \texttt{int vf\_model\_open\_file(char* file, vf\_model *m)}\\
+Ouverture d'un fichier contenant un modèle.\\
+Les types de fichiers reconnus sont :pgn, wrl, off, ply, vef, obj.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_load\_vef(char *file, vf\_model *m)}\\
+Ouverture d'un fichier vef.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+\textbullet \texttt{int vf\_model\_load\_gts(char *file, vf\_model *m)}\\
+Ouverture d'un fichier gts.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_load\_pgn(char *file, vf\_model *m)}\\
+Ouverture d'un fichier pgn.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_load\_off(char *file, vf\_model *m)}\\
+Ouverture d'un fichier off.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_load\_ply(char *file, vf\_model *m)}\\
+Ouverture d'un fichier ply.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_load\_wrl(char *file, vf\_model *m)}\\
+Ouverture d'un fichier wrl.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_load\_obj(char *file, vf\_model *m)}\\
+Ouverture d'un fichier obj.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+\textbullet \texttt{int vf\_model\_load\_tet(char *file, vf\_model *m)}\\
+Ouverture d'un fichier tet.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_save\_file(char* file, vf\_model m)}\\
+Sauvegarde d'un maillage dans un fichier.\\
+Les types de fichiers supportés pour la sauvegarde sont : pgn, wrl, off, ply, vef, obj.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_save\_vef(char *file, vf\_model m)}\\
+Sauvegarde d'un maillage dans un fichier vef.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_save\_gts(char *file, vf\_model m)}\\
+Sauvegarde d'un maillage dans un fichier gts.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_save\_pgn(char *file, vf\_model m)}\\
+Sauvegarde d'un maillage dans un fichier pgn.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_save\_off(char *file, vf\_model m)}\\
+Sauvegarde d'un lmaillage dans un fichier off.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_save\_ply(char *file, vf\_model m)}\\
+Sauvegarde d'un maillage dans un fichier ply.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_save\_wrl(char *file, vf\_model m)}\\
+Sauvegarde d'un maillage dans un fichier wrl.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_save\_obj(char *file, vf\_model m)}\\
+Sauvegarde d'un maillage dans un fichier obj.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_add\_vertex(vf\_model *m, double x, double y, double z)}\\
+Ajout d'un sommet au maillage.\\
+Le tableau de \texttt{vf\_vertex} contenant les coordonnées sera agrandi, le compteur de sommet \texttt{m->nbvertex} est incrémenté automatiquement.\\
+Le sommet est initialisé avec les paramètres et la liste des adjacences du sommet est initialisée à NULL.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{x} : coordonnées en X du nouveau sommet.\\
+\texttt{y} : coordonnées en Y du nouveau sommet.\\
+\texttt{z} : coordonnées en Z du nouveau sommet.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_search\_vertex(vf\_model m, double x, double y, double z)}\\
+Recherche d'un sommet dans le modèle. L'index dans le tableau des sommets est retourné. Si le sommet n'est pas trouvé, on retourne -1.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{x} : coordonnées en X du nouveau sommet.\\
+\texttt{y} : coordonnées en Y du nouveau sommet.\\
+\texttt{z} : coordonnées en Z du nouveau sommet.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_remove\_vertex(vf\_model *m, int numvertex)}\\
+Suppression d'un sommet du modèle.\\
+Si le sommet est utilisé dans des faces ou polyhèdres, ces faces et polyhèdres sont d'abord supprimés.
+Le tableau des sommets est ensuite mis à jour en décalant tous les sommets dont l'index est supérieurs à celui supprimé et l'espace est réalloué. Toutes les faces et polyhèdres sont ensuites mises à jour pour prendre en compte le décalage d'index.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{numvertex} : numéro du sommet à supprimer.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_remove\_list\_of\_vertex(vf\_model *m, int *listvertex, int sizelist)}\\
+Suppression d'une liste de sommet du modèle.\\
+Si les sommets sont utilisés dans des faces ou polyhèdres, ces faces et polyhèdres sont d'abord supprimés.
+Le tableau des sommets est ensuite mis à jour en décalant tous les sommets dont l'index est supérieurs à celui supprimé et l'espace est réalloué. Toutes les faces et polyhèdres sont ensuites mises à jour pour prendre en compte le décalage d'index.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{listvertex} : liste des numéros de sommets à supprimer.\\
+\texttt{sizelist} : taille de la liste.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_add\_face(vf\_model *m, int ve1, int ve2, int ve3)}\\
+Ajout d'une face au maillage.\\
+Le tableau des faces sera agrandi automatiquement et le compteur de faces \texttt{m->nbface} sera incrémenté automatiquement. La liste des adjacences des trois sommets sera mis à jour automatiquement.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{ve1} : numéro du premier sommet.\\
+\texttt{ve2} : numéro du second sommet.\\
+\texttt{ve3} : numéro du troisième sommet.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_search\_face(vf\_model m, int ve1, int ve2, int ve3)}\\
+Recherche d'une face dans un maillage. L'index de la face dans le tableau des faces sera renvoyé si la face est trouvée. on retournera -1 si la face n'existe pas.\\
+Les faces sont orientés donc la face (0,5,9) et (0,9,5) sont différentes. Si la première est trouvée, la seconde ne le sera pas. \textbf{L'ordre des sommets est donc important !}\\
+\textbf{Exemple : }\\
+liste de faces (index -> ve1 ve2 ve3):
+\begin{verbatim}
+0 -> 0 1 2
+1 -> 0 2 3 
+2 -> 0 3 1
+3 -> 1 3 2
+\end{verbatim}
+le code
+\begin{verbatim}
+vf_model_search_face(m,0,3,1);
+ou
+vf_model_search_face(m,3,1,0);
+ou
+vf_model_search_face(m,1,0,3);
+\end{verbatim}
+retournera 2 alors que
+\begin{verbatim}
+vef_model_search_face(m,3,0,1);
+\end{verbatim}
+retournera -1\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{ve1} : numéro du premier sommet.\\
+\texttt{ve2} : numéro du second sommet.\\
+\texttt{ve3} : numéro du troisième sommet.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_remove\_face(vf\_model *m, int numface)}\\
+Suppression d'une face dans le maillage.\\
+Si la face est utilisée dans des polyhèdres, les polyhèdres sont d'abrod supprimés.\\
+Le tableau des faces sera automatiquement mis à jour en décalant les faces dont l'index est supérieur à la face à supprimer. De plus, les sommets inutilisés après la suppression de la face seront supprimés eux aussi.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{numface} : numéro de la face à supprimer.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_remove\_list\_of\_face(vf\_model *m, int *listface, int sizelist)}\\
+Suppression d'une liste de faces dans le maillage.\\
+Si les faces sont utilisées dans des polyhèdres, les polyhèdres sont d'abrod supprimés.\\
+Le tableau des faces sera automatiquement mis à jour en décalant les faces dont l'index est supérieur à la face à supprimer. De plus, les sommets inutilisés après la suppression de la face seront supprimés eux aussi.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{listface} : liste de numéro de face à supprimer.\\
+\texttt{sizelist} : taille de la liste.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_add\_polyhedron(vf\_model *m, int fa1, int fa2, int fa3, int fa4)}\\
+Ajout d'un polyhèdre au maillage.\\
+Le tableau des polyhèdres sera agrandi automatiquement et le compteur de polyhèdres \texttt{m->nbpolyhedron} sera incrémenté automatiquement. La liste des adjacences des quatres faces sera mis à jour automatiquement.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{fa1} : numéro de la première face.\\
+\texttt{fa2} : numéro de la seconde sommet face.\\
+\texttt{fa3} : numéro de la troisième sommet face.\\
+\texttt{fa4} : numéro de la quatrième face.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_search\_polyhedron(vf\_model m, int fa1, int fa2, int fa3, int fa4)}\\
+Recherche d'un polyhèdre dans un modèle. L'index du polyhèdre dans le tableau des polyhèdres sera renvoyé si le polyhèdre est trouvé. On retournera -1 si le polyhèdre n'existe pas.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{fa1} : numéro de la première face.\\
+\texttt{fa2} : numéro de la seconde sommet face.\\
+\texttt{fa3} : numéro de la troisième sommet face.\\
+\texttt{fa4} : numéro de la quatrième face.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_remove\_polyhedron(vf\_model *m, int numpolyhedron)}\\
+Suppression d'un polyhèdre dans un modèle.\\
+Le tableau des polyhèdres sera automatiquement mis à jour en décalant les polyhèdres dont l'index est supérieur à la face à supprimer. De plus, les sommets et faces inutilisés après la suppression du polyhèdre seront supprimés eux aussi.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{numpolyhedron} : numéro du polyhèdre à supprimer.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vf\_model\_remove\_list\_of\_polyhedron(vf\_model *m, int *listpolyhedron, int sizelist)}\\
+Suppression d'une liste de polyhèdres dans le modèle.\\
+Le tableau des polyhdères sera automatiquement mis à jour en décalant les polyhèdres dont l'index est supérieur au polyhèdre à supprimer. De plus, les sommets et faces inutilisés après la suppression de la face seront supprimés eux aussi.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{listpolyhedron} : liste de numéro de polyhèdres à supprimer.\\
+\texttt{sizelist} : taille de la liste.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_translate(vf\_model *m, vector3d delta)}\\
+Translation du maillage. La translation est défini par le vecteur3d passé en paramètre.\\
+La translation de tout le maillage se fait en faisant la translation du même vecteur de tous les sommets.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{delta} : vecteur de translation.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_rotateX\_radian(vf\_model *m, double angle)}\\
+Rotation du maillage suivant l'axe X d'un angle en radian.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en radian.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_rotateX\_degre(vf\_model *m, double angle)}\\
+Rotation du maillage suivant l'axe X d'un angle en degre.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en degré.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_rotateX\_radian\_center(vf\_model *m, double angle, point3d centre)}\\
+Rotation du maillage suivant l'axe X autour du point passé en paramètre d'un angle en radian.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en radian.\\
+\texttt{centre} : centre de la rotation.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_rotateX\_degre\_center(vf\_model *m, double angle, point3d centre)}\\
+Rotation du maillage suivant l'axe X d'un angle en radian d'un angle en degre.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en degré.\\
+\texttt{centre} : centre de la rotation.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_rotateY\_radian(vf\_model *m, double angle)}\\
+Rotation du maillage suivant l'axe Y d'un angle en radian.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en radian.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_rotateY\_degre(vf\_model *m, double angle)}\\
+Rotation du maillage suivant l'axe Y d'un angle en degre.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en degré.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_rotateY\_radian\_center(vf\_model *m, double angle, point3d centre)}\\
+Rotation du maillage suivant l'axe Y autour du point passé en paramètre d'un angle en radian.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en radian.\\
+\texttt{centre} : centre de la rotation.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_rotateY\_degre\_center(vf\_model *m, double angle, point3d centre)}\\
+Rotation du maillage suivant l'axe Y d'un angle en radian d'un angle en degre.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en degré.\\
+\texttt{centre} : centre de la rotation.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_rotateZ\_radian(vf\_model *m, double angle)}\\
+Rotation du maillage suivant l'axe Z d'un angle en radian.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en radian.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_rotateZ\_degre(vf\_model *m, double angle)}\\
+Rotation du maillage suivant l'axe Z d'un angle en degre.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en degré.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_rotateZ\_radian\_center(vf\_model *m, double angle, point3d centre)}\\
+Rotation du maillage suivant l'axe Z autour du point passé en paramètre d'un angle en radian.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en radian.\\
+\texttt{centre} : centre de la rotation.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_rotateZ\_degre\_center(vf\_model *m, double angle, point3d centre)}\\
+Rotation du maillage suivant l'axe Z d'un angle en radian d'un angle en degre.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en degré.\\
+\texttt{centre} : centre de la rotation.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{double vf\_model\_area\_model(vf\_model *m)}\\
+Calcule l'aire du modèle en faisant la somme des aires des faces.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : surface totale du modèle.\\
+
+
+
+\subsection{fonctions utilisant \texttt{vef\_model}}
+
+\textbullet \texttt{void vef\_model\_init(vef\_model *m)}\\
+Initialisation d'un modèle avec un maillage vide.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_model\_free(vef\_model *m)}\\
+Libération de l'espace mémoire utilisé.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+\textbullet \texttt{void vef\_model\_display(vef\_model m)}\\
+Affichage du nombre de sommets, du nombre d'arêtes et du nombre de faces du modèle ainsi que la bounding box.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_model\_display\_detail(vef\_model m)}\\
+Affichage du nombre de sommets, leurs coordonnées et leur valence et la liste des arêtes partant de ce sommet.\\
+Affichage du nombre d'arêtes, des deux sommets les définissant et du nombre de faces partagées par cette arête. La lsite de ces faces est ensuite affichée.\\
+Affichage du nombre de faces ainsi que les trois arêtes les définissant et leur type.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_open\_file(char* file, vef\_model *m)}\\
+Ouverture d'un fichier contenant un modèle.\\
+Les types de fichiers reconnus sont :pgn, wrl, off, ply, vef, obj.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_load\_vef(char *file, vef\_model *m)}\\
+Ouverture d'un fichier vef.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_load\_gts(char *file, vef\_model *m)}\\
+Ouverture d'un fichier gts.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_load\_pgn(char *file, vef\_model *m)}\\
+Ouverture d'un fichier pgn.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_load\_off(char *file, vef\_model *m)}\\
+Ouverture d'un fichier off.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_load\_ply(char *file, vef\_model *m)}\\
+Ouverture d'un fichier ply.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_load\_wrl(char *file, vef\_model *m)}\\
+Ouverture d'un fichier wrl.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_load\_obj(char *file, vef\_model *m)}\\
+Ouverture d'un fichier obj.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+
+\textbullet \texttt{int vef\_model\_load\_tet(char *file, vef\_model *m)}\\
+Ouverture d'un fichier tet.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier contenant le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_model\_save\_file(char* file, vef\_model m)}\\
+Sauvegarde d'un maillage dans un fichier.\\
+Les types de fichiers supportés pour la sauvegarde sont : pgn, wrl, off, ply, vef, obj.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_save\_vef(char *file, vef\_model m)}\\
+Sauvegarde d'un maillage dans un fichier vef.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_save\_gts(char *file, vef\_model m)}\\
+Sauvegarde d'un maillage dans un fichier gts.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_save\_pgn(char *file, vef\_model m)}\\
+Sauvegarde d'un maillage dans un fichier pgn.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_save\_off(char *file, vef\_model m)}\\
+Sauvegarde d'un lmaillage dans un fichier off.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_save\_ply(char *file, vef\_model m)}\\
+Sauvegarde d'un maillage dans un fichier ply.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_save\_wrl(char *file, vef\_model m)}\\
+Sauvegarde d'un maillage dans un fichier wrl.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_save\_obj(char *file, vef\_model m)}\\
+Sauvegarde d'un maillage dans un fichier obj.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{file} : chemin du fichier où il faut sauvegarder le modèle.\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_add\_vertex(vef\_model *m, double x, double y, double z)}\\
+Ajout d'un sommet au maillage.\\
+Le tableau de \texttt{vef\_vertex} contenant les coordonnées sera agrandi, le compteur de sommet \texttt{m->nbvertex} est incrémenté automatiquement.\\
+Le sommet est initialisé avec les paramètres et la liste des arêtes partant de ce sommet est initialisée à NULL.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{x} : coordonnées en X du nouveau sommet.\\
+\texttt{y} : coordonnées en Y du nouveau sommet.\\
+\texttt{z} : coordonnées en Z du nouveau sommet.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_search\_vertex(vef\_model m, double x, double y, double z)}\\
+Recherche d'un sommet dans le modèle. L'index dans le tableau des sommets est retourné. Si le sommet n'est pas trouvé, on retourne -1.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{x} : coordonnées en X du nouveau sommet.\\
+\texttt{y} : coordonnées en Y du nouveau sommet.\\
+\texttt{z} : coordonnées en Z du nouveau sommet.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_remove\_vertex(vef\_model *m, int numvertex)}\\
+Suppression d'un sommet du modèle.\\
+Si le sommet est utilisé dans des aretes, des faces ou polyhèdres, ces aretes, faces et polyhèdres sont d'abord supprimés.
+Le tableau des sommets est ensuite mis à jour en décalant tous les sommets dont l'index est supérieur à celui supprimé et l'espace est réalloué. Toutes les arêtes sont ensuites mises à jour pour prendre en compte le décalage d'index.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{numvertex} : numéro du sommet à supprimer.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_remove\_list\_of\_vertex(vef\_model *m, int *listvertex, int sizelist)}\\
+Suppression d'une list de sommets du modèle.\\
+Si les sommets sont utilisés dans des aretes, des faces ou polyhèdres, ces aretes, faces et polyhèdres sont d'abord supprimés.
+Le tableau des sommets est ensuite mis à jour en décalant tous les sommets dont l'index est supérieur à celui supprimé et l'espace est réalloué. Toutes les arêtes sont ensuites mises à jour pour prendre en compte le décalage d'index.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{listvertex} : liste de numéro de sommet à supprimer.\\
+\texttt{sizelist} : taille de la liste.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_add\_edge(vef\_model *m, int ve1, int ve2, int verif)}\\
+Ajout d'une arête au modèle.\\
+Le tableau des arêtes sera agrandi automatiquement et le compteur d'arêtes \texttt{m->nbedge} sera incrméenté automatiquement.\\
+La liste des arêtes partagées par les deux sommets sera mis à jour.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{ve1} : numéro du premier sommet.\\
+\texttt{ve2} : numéro du second sommet.\\
+\texttt{verif} : passer 1 en paramètre s'il faut vérifier si l'arete existe existe, 0 s'il faut faire l'ajout sans vérification.\\
+\texttt{retour} : aucun.\\
+
+\textbullet \texttt{int vef\_model\_search\_edge(vef\_model m, int ve1, int ve2)}\\
+Recherche d'une arête dans le modèle. L'index dans le tableau des arêtes est retourné ou -1 si l'arête n'existe pas.\\
+L'ordre des sommets n'a pas d'importance ici donc le recherche de l'arête (0,5) ou (5,0) retournera le même résultat.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{ve1} : numéro du premier sommet.\\
+\texttt{ve2} : numéro du second sommet.\\
+\texttt{retour} : aucun.\\
+
+\textbullet \texttt{int vef\_model\_remove\_edge(vef\_model *m, int numedge)}\\
+Suppression d'une arête.\\
+Si l'arete est utilisée par des faces ou polyhèdres, ils sont d'abord supprimés. Ensuite les aretes sont décalés et enfin les face sont parcourus pour prendre en compte le décalage d'index des arêtes.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{numedge} : numéro de l'arete.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_remove\_list\_of\_edge(vef\_model *m, int *listedge, int sizelist)}\\
+Suppression d'une liste d'arête.\\
+Si les aretes sont utilisées par des faces ou polyhèdres, ils sont d'abord supprimés. Ensuite les aretes sont décalés et enfin les face sont parcourus pour prendre en compte le décalage d'index des arêtes.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{listedge} : liste de numéro d'arete.\\
+\texttt{sizelist} : taille de la liste.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_add\_face(vef\_model *m, int ed1, int ed2, int ed3)}\\
+Ajout d'une face au maillage.\\
+Le tableau des faces sera agrandi automatiquement et le compteur de faces \texttt{m->nbface} sera incrémenté automatiquement. La liste des adjacences des trois arêtes sera mis à jour automatiquement.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{ed1} : numéro de la première arete.\\
+\texttt{ed2} : numéro de la seconde arete.\\
+\texttt{ed3} : numéro de la troisieme arete.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_search\_face(vef\_model m, int ed1, int ed2, int ed3)}\\
+Recherche d'une face dans un maillage. L'index de la face dans le tableau des faces sera renvoyé si la face est trouvée. on retournera -1 si la face n'existe pas.\\
+Les faces sont orientés donc la face (0,5,9) et (0,9,5) sont différentes. Si la première est trouvée, la seconde ne le sera pas. \textbf{L'ordre des arêtes est donc important !}\\
+\textbf{Exemple : }\\
+liste de faces (index -> ve1 ve2 ve3):
+\begin{verbatim}
+0 -> 0 1 2
+1 -> 0 2 3 
+2 -> 0 3 1
+3 -> 1 3 2
+\end{verbatim}
+le code
+\begin{verbatim}
+vef_model_search_face(m,0,3,1);
+ou
+vef_model_search_face(m,3,1,0);
+ou
+vef_model_search_face(m,1,0,3);
+\end{verbatim}
+retournera 2 alors que
+\begin{verbatim}
+vef_model_search_face(m,3,0,1);
+\end{verbatim}
+retournera -1\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{ed1} : numéro de la première arete.\\
+\texttt{ed2} : numéro de la seconde arete.\\
+\texttt{ed3} : numéro de la troisieme arete.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_remove\_face(vef\_model *m, int numface)}\\
+Suppression d'une face dans le maillage.\\
+Si la face est utilisée dans des polyhèdres, les polyhèdres sont d'abrod supprimés.\\
+Le tableau des faces sera automatiquement mis à jour en décalant les faces dont l'index est supérieur à la face à supprimer. De plus, les sommets inutilisés après la suppression de la face seront supprimés eux aussi.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{numface} : numéro de la face à supprimer.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_remove\_list\_of\_face(vef\_model *m, int *listface, int sizelist)}\\
+Suppression d'une liste de faces dans le maillage.\\
+Si les faces sont utilisées dans des polyhèdres, les polyhèdres sont d'abrod supprimés.\\
+Le tableau des faces sera automatiquement mis à jour en décalant les faces dont l'index est supérieur à la face à supprimer. De plus, les sommets inutilisés après la suppression de la face seront supprimés eux aussi.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{listface} : liste de numéro de faces à supprimer.\\
+\texttt{sizelist} : taille de la liste.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_add\_polyhedron(vef\_model *m, int fa1, int fa2, int fa3, int fa4)}\\
+Ajout d'un polyhèdre au maillage.\\
+Le tableau des polyhèdres sera agrandi automatiquement et le compteur de polyhèdres \texttt{m->nbpolyhedron} sera incrémenté automatiquement. La liste des adjacences des quatres faces sera mis à jour automatiquement.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{fa1} : numéro de la première face.\\
+\texttt{fa2} : numéro de la seconde sommet face.\\
+\texttt{fa3} : numéro de la troisième sommet face.\\
+\texttt{fa4} : numéro de la quatrième face.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_search\_polyhedron(vef\_model m, int fa1, int fa2, int fa3, int fa4)}\\
+Recherche d'un polyhèdre dans un modèle. L'index du polyhèdre dans le tableau des polyhèdres sera renvoyé si le polyhèdre est trouvé. On retournera -1 si le polyhèdre n'existe pas.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{fa1} : numéro de la première face.\\
+\texttt{fa2} : numéro de la seconde sommet face.\\
+\texttt{fa3} : numéro de la troisième sommet face.\\
+\texttt{fa4} : numéro de la quatrième face.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_remove\_polyhedron(vef\_model *m, int numpolyhedron)}\\
+Suppression d'un polyhèdre dans un modèle.\\
+Le tableau des polyhèdres sera automatiquement mis à jour en décalant les polyhèdres dont l'index est supérieur à la face à supprimer. De plus, les sommets et faces inutilisés après la suppression du polyhèdre seront supprimés eux aussi.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{numpolyhedron} : numéro du polyhèdre à supprimer.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int vef\_model\_remove\_list\_of\_polyhedron(vef\_model *m, int *listpolyhedron, int sizelist)}\\
+Suppression d'une liste de polyhèdres dans le modèle.\\
+Le tableau des polyhdères sera automatiquement mis à jour en décalant les polyhèdres dont l'index est supérieur au polyhèdre à supprimer. De plus, les sommets et faces inutilisés après la suppression de la face seront supprimés eux aussi.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{listpolyhedron} : liste de numéro de polyhèdres à supprimer.\\
+\texttt{sizelist} : taille de la liste.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_model\_translate(vef\_model *m, vector3d delta)}\\
+Translation du maillage. La translation est défini par le vecteur3d passé en paramètre.\\
+La translation de tout le maillage se fait en faisant la translation du même vecteur de tous les sommets.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{delta} : vecteur de translation.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_model\_rotateX\_radian(vef\_model *m, double angle)}\\
+Rotation du maillage suivant l'axe X d'un angle en radian.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en radian.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_model\_rotateX\_degre(vef\_model *m, double angle)}\\
+Rotation du maillage suivant l'axe X d'un angle en degre.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en degré.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_model\_rotateX\_radian\_center(vef\_model *m, double angle, point3d centre)}\\
+Rotation du maillage suivant l'axe X autour du point passé en paramètre d'un angle en radian.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en radian.\\
+\texttt{centre} : centre de la rotation.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_model\_rotateX\_degre\_center(vef\_model *m, double angle, point3d centre)}\\
+Rotation du maillage suivant l'axe X d'un angle en radian d'un angle en degre.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en degré.\\
+\texttt{centre} : centre de la rotation.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_model\_rotateY\_radian(vef\_model *m, double angle)}\\
+Rotation du maillage suivant l'axe Y d'un angle en radian.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en radian.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_model\_rotateY\_degre(vef\_model *m, double angle)}\\
+Rotation du maillage suivant l'axe Y d'un angle en degre.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en degré.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_model\_rotateY\_radian\_center(vef\_model *m, double angle, point3d centre)}\\
+Rotation du maillage suivant l'axe Y autour du point passé en paramètre d'un angle en radian.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en radian.\\
+\texttt{centre} : centre de la rotation.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_model\_rotateY\_degre\_center(vef\_model *m, double angle, point3d centre)}\\
+Rotation du maillage suivant l'axe Y d'un angle en radian d'un angle en degre.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en degré.\\
+\texttt{centre} : centre de la rotation.\\
+\texttt{retour} : aucun.\\
+
+
+
+\textbullet \texttt{void vef\_model\_rotateZ\_radian(vef\_model *m, double angle)}\\
+Rotation du maillage suivant l'axe Z d'un angle en radian.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en radian.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_model\_rotateZ\_degre(vef\_model *m, double angle)}\\
+Rotation du maillage suivant l'axe Z d'un angle en degre.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en degré.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_model\_rotateZ\_radian\_center(vef\_model *m, double angle, point3d centre)}\\
+Rotation du maillage suivant l'axe Z autour du point passé en paramètre d'un angle en radian.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en radian.\\
+\texttt{centre} : centre de la rotation.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vef\_model\_rotateZ\_degre\_center(vef\_model *m, double angle, point3d centre)}\\
+Rotation du maillage suivant l'axe Z d'un angle en radian d'un angle en degre.\\
+La rotation se fait en faisant subir cette rotation à tous les sommets du maillages.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{angle} : angle de rotation en degré.\\
+\texttt{centre} : centre de la rotation.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{double vef\_model\_area\_model(vef\_model *m)}\\
+Calcule l'aire du modèle en faisant la somme des aires des faces.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modèle.\\
+\texttt{retour} : surface totale du modèle.\\
+
+\newpage
+\bibliographystyle{unsrt}
+\bibliography{manuel}
+
+\end{document}

+ 110 - 0
doc/src/overlap.tex

@@ -0,0 +1,110 @@
+\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}

+ 88 - 0
doc/src/point.tex

@@ -0,0 +1,88 @@
+\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 POINT}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+Cette bibliothèque implémente les structures de données point 2D et point 3D permettant la manipulation de points du plan ou de l'espace.\\
+Attention la structure \textit{point3d} n'est pas la même que la structure utilisée pour le stockage des sommets d'un maillage. Pour les sommets d'un maillage, se reporter à la bibliothèque \textit{vertex.so}.\\
+
+\section{Structures de données}
+
+Le point 2D est une structure comportant deux rééls : sa composante en X et en Y. Le point 3D en comporte trois : composante en X,Y et Z.\\
+
+\begin{verbatim}
+typedef struct
+{
+  double x,y;
+}point2d;
+\end{verbatim}
+
+\begin{verbatim}
+typedef struct
+{
+  double x,y,z;
+}point3d;
+\end{verbatim}
+
+\section{Fonctions}
+\subsection{Fonctions utilisant \texttt{point2d}}
+
+\textbullet \texttt{void point2d\_init(point2d *p, double x, double y)}\\
+Initialisation d'un \texttt{point2d} avec deux rééls.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{p} : le point.\\
+\texttt{x} : coordonnées x.\\
+\texttt{y} : coordonnées y.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void point2d\_display(point2d p)}\\
+Affichage d'un \texttt{point2d}.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{p} : le point.\\
+\texttt{retour} : aucun.\\
+
+
+\subsection{Fonctions utilisant \texttt{point3d}}
+
+\textbullet \texttt{void point3d\_init(point3d *p, double x, double y, double z)}\\
+Initialisation d'un \texttt{point3d} avec trois rééls.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{p} : le point.\\
+\texttt{x} : coordonnées x.\\
+\texttt{y} : coordonnées y.\\
+\texttt{z} : coordonnées z.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void point3d\_display(point3d p)}\\
+Affichage d'un \texttt{point3d}.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{p} : le point.\\
+\texttt{retour} : aucun.\\
+
+
+
+\textbullet \texttt{int point3d\_equal(point3d p1, point3d p2)}\\
+Test de l'égalite de deux \texttt{point3d}. Les deux points sont égaux si leurs composantes sont égales.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{p1} : le premier point.\\
+\texttt{p2} : le second point.\\
+\texttt{retour} : aucun.\\
+
+\end{document}

+ 45 - 0
doc/src/polyhedron.tex

@@ -0,0 +1,45 @@
+\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 POLYHEDRON}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+Cette bibliothèque implémente les structures de données nécessaires au stockage des polyhèdres d'un maillage ainsi que des fonctions pour manipuler celles-ci.\\
+
+
+\section{Structures de données}
+Les polyhèdres sont communs aux structure de données \texttt{vf\_model} et \texttt{vef\_model}.\\
+Les polyhèdres étant les éléments de plus haut niveau, il n'y a pas d'adjacence à gérer pour cette structure.\\ 
+Seules les quatre faces sont stockées.\\
+\begin{verbatim}
+typedef struct
+{
+  int fa1; \\premiere face
+  int fa2; \\seconde face
+  int fa3; \\troiseieme face
+  int fa4; \\quatrieme face
+}polyhedron;
+\end{verbatim}
+
+\section{Fonctions}
+\textbullet \texttt{void polyhedron\_display(polyhedron p)}\\
+Affichage des quatre faces d'un polyhèdre sous la forme :\\
+\begin{verbatim}
+POLYHEDRON : (fa1,fa2,fa3,fa4)
+\end{verbatim}
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{p} : le polyhèdre.\\
+\texttt{retour} : aucun.\\
+
+
+\end{document}

+ 180 - 0
doc/src/quality.tex

@@ -0,0 +1,180 @@
+\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 QUALITY}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+Dans cette bibliothèque sont implémentées des fonctions permettant d'apprécier la qualité d'un maillage.
+
+\section{Fonctions}
+
+
+\textbullet \texttt{double vf\_model\_mean\_ratio\_metric\_for\_a\_face(vf\_model *m, int numface)}\\
+Calcul du \texttt{Mean Ratio Metric}\cite{DKMS2006} d'une face.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modele.\\
+\texttt{numface} : le numéro de la face à évaluer.\\
+\texttt{retour} : évaluation de la face.\\
+
+
+\textbullet \texttt{double vf\_model\_mean\_ratio\_metric(vf\_model *m)}\\
+Calcul du \texttt{Mean Ratio Metric} d'un maillage.\\
+Le \texttt{Mean Ratio Metric} d'un maillage complet est égale à la moyenne des \textit{Mean Ratio Metric} de ses faces.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modele.\\
+\texttt{retour} : évaluation du modele.\\
+
+
+\textbullet \texttt{void vf\_model\_list\_angle(vf\_model *m,double **list, int *size)}\\
+Liste la valeur en degré des angles de toutes les faces d'un maillage.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modele.\\
+\texttt{list} : liste des angles de tous les triangles.\\
+\texttt{size} : taille de la liste.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_list\_area(vf\_model *m,double **list, int *size)}\\
+Liste la valeur des aires de toutes els faces d'un maillage.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modele.\\
+\texttt{list} : liste des aires de tous les triangles.\\
+\texttt{size} : taille de la liste.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_list\_valence(vf\_model *m,int **list, int *size)}\\
+Liste les valences des sommets d'un maillage.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modele.\\
+\texttt{list} : liste des valence de tous les sommets.\\
+\texttt{size} : taille de la liste.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_list\_edge\_length(vf\_model *m, double **list, int *size)}\\
+Liste la longueur des toutes les arêtes d'un maillage.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modele.\\
+\texttt{list} : liste des longueurs de toutes les aretes.\\
+\texttt{size} : taille de la liste.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{void vf\_model\_list\_height\_length(vf\_model *m, double **list, int *size)}\\
+Liste l'ensemble des hauteurs des faces d'un modèle.\\
+Chaque face étant un triangle, trois hauteurs sont données par face.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modele.\\
+\texttt{list} : liste des hauteurs de tous les triangles.\\
+\texttt{size} : taille de la liste.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{int* vf\_model\_angle\_measure(vf\_model *m)}\\
+Synthétise la valeur en degré des angles d'un modèle dans un tableau par intervalle de dix degrés.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le modele.\\
+\texttt{retour} : tableau de 18 valeurs contenant la synthèse des valeurs des angles des triangles.\\
+
+
+\textbullet \texttt{double DPP(point3d p, point3d *points, int size)}\\
+Calcul de la distance Point-Point entre un point et un ensemble de points. \cite{CRS1998,G1999}\\
+\textbf{Algorithme :}\\
+$DPP(p,points)=\min_{v\in{points}}\parallel p-v \parallel$\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{p} : le point pour lequel on cherche la distance avec l'ensemble de points.\\
+\texttt{points} : l'ensemble de points.\\
+\texttt{size} : taille de la liste de points.\\
+\texttt{retour} : longueur point à point entre le point et l'ensemble de point.\\
+
+
+\textbullet \texttt{double vf\_model\_hausdorff(vf\_model *m1, vf\_model *m2, int sampling)}\\
+Calcul la distance de Hausdorff \cite{CRS1998,G1999} entre deux maillages.\\
+La distance de Hausdorff est calculé entre deux ensembles de points. Le paramètre \texttt{sampling} peut prendre deux valeurs : \texttt{SAMPLING} et \texttt{NO\_SAMPLING}. Si \texttt{sampling==SAMPLING} alors les ensembles des points seront l'ensemble des sommets du maillage ainsi que l'ensemble des points fournis lors de l'échantillonnage de toutes les faces. Si \texttt{sampling==NO\_SAMPLING}, l'ensemble de points se réduit aux simple sommets du maillage.\\
+\textbf{Algorithme :}\\
+Soit $U$ et $V$ nos deux ensembles de points.\\
+$Hausdorff(U,V)=\max(\max{u\in{U}}DPP(u,V),\max{v\in{V}}DPP(v,U))$
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m1} : le premier maillage.\\
+\texttt{m2} : le second maillage.\\
+\texttt{sampling} : paramètre qui gère l'échantillonnage ou non des faces.\\
+\texttt{retour} : distance de Hausdorff entre \texttt{m1} et \texttt{m2}.\\
+
+
+\textbullet \texttt{double vf\_model\_Emn\_DPP(vf\_model *m1, vf\_model *m2, int sampling)}\\
+Calcul de l'erreur $E_mean\_DPP$ entre deux maillages.\cite{GH1997}\\
+L'erreur $E_mean\_DPP$ se calcule entre deux ensembles de points.\\
+Algorithme : \\
+Soit $U$ et $V$ nos deux ensembles de points.\\
+$$E_{MN\_DPP}(U,V)=\frac 1 {w_1+w_2} (\int_{u \in{U}} DPP^2(u,V) + \int_{v \in{V}} DPP^2(v,U))$$
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m1} : le premier maillage.\\
+\texttt{m2} : le second maillage.\\
+\texttt{sampling} : paramètre qui gère l'échantillonnage ou non des faces.\\
+\texttt{retour} : erreur Emn\_DPP entre \texttt{m1} et \texttt{m2}.\\
+
+
+\textbullet \texttt{double vf\_model\_triangle\_aspect\_ratio(vf\_model *m, int numface)}\\
+Calcul de l'aspect ratio d'un triangle.\\
+L'aspect ratio est le rapport entre le plus grand de ses côtés et la hauteur perpendiculaire à ce côté.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le maillage.\\
+\texttt{numface} : numéro de la face à évaluer.\\
+\texttt{retour} : évaluation de la face.\\
+
+
+\textbullet \texttt{void vf\_model\_list\_triangle\_aspect\_ratio(vf\_model *m, double **list, int *size)}\\
+Liste les valeurs des aspect ratio de toutes les faces.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le maillage.\\
+\texttt{list} : aspect ratio de toutes les faces.\\
+\texttt{size} : taille de la liste.\\
+\texttt{retour} : aucun.\\
+
+
+\textbullet \texttt{double vf\_model\_face\_size\_variation(vf\_model *m, int face1, int face2)}\\
+Retourne la variation d'aire entre deux faces $\frac{\mathbf{A}_{face1}}{\mathbf{A}_{face2}}$.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le maillage.\\
+\texttt{face1} : numero de la premiere face.\\
+\texttt{face2} : numero de la seconde face.\\
+\texttt{retour} : variation de la taille.\\
+
+
+\textbullet \texttt{void vf\_model\_list\_radius\_incircle(vf\_model *m, double **list, int *size)}\\
+Liste les longueurs des rayons des cercles inscrit pour chaque face.\\
+~\\
+\underline{Paramètres et type de retour :}\\
+\texttt{m} : le maillage.\\
+\texttt{list} : liste des longueurs des rayons des cercles inscrits à toutes les faces.\\
+\texttt{size} : taille de la liste.\\
+\texttt{retour} : aucun.\\
+
+\bibliographystyle{unsrt}
+\bibliography{manuel}
+
+\end{document}

+ 26 - 0
doc/src/space_partition.tex

@@ -0,0 +1,26 @@
+\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 SPACE\_PARTITION}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+Cette bibliothèque implémente une structure de données de partition de l'espace. Cette structure de données permet de faire des recherches de voisinage plus efficacement.
+
+
+\section{Structures de données}
+
+
+
+\section{Fonctions}
+
+
+\end{document}

+ 85 - 0
doc/src/subdivision.tex

@@ -0,0 +1,85 @@
+\documentclass[a4paper,12pt]{article}
+
+\usepackage[french]{babel}
+\usepackage[T1]{fontenc} 
+\usepackage[latin1]{inputenc}
+\usepackage{graphicx}
+%\usepackage{amsmath}
+
+\author{Rémi Synave, Stefka Gueorguieva, Pascal Desbarats}
+\title{Manuel de la bibliothèque SUBDIVISION}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+Dans cette bibliothèque est implémentée la subdivision loop.\\
+
+\section{Fonctions}
+
+
+\textbullet void vf\_model\_loop(vf\_model *m, int nbiter)\\
+Subdivision d'un \textit{vf\_model} avec la méthode de Loop \cite{L1987}.\\
+Algorithme :\\
+1) Création d'une nouvelle liste de sommets et d'une nouvelle liste de faces.\\
+2) Ajout d'un sommet au milieu de toutes les arêtes (voir figure \ref{decouparete_vf_model_loop}) -> Découpage des arêtes en deux. L'index du sommet au milieu de l'arete est mis dans la variable \textit{midvertex} de la \textit{vf\_edge}.\\
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=10cm]{./images/decouparete_vf_model_loop.eps}
+\caption{Ajout d'un sommet sur les aretes.}
+\label{decouparete_vf_model_loop}
+\end{figure}
+3) Découpage des faces (ve1,ve2,ve3) en quatre faces (voir figure \ref{decoupface_vf_model_loop}) :\\
+\begin{itemize}
+\item (ve1,ptmilieu1,ptmilieu2)
+\item (ptmilieu1,ve2,ptmilieu3)
+\item (ptmilieu2,ptmilie3,ve3)
+\item (ptmilieu3,ptmilieu2,ptmilieu1)
+\end{itemize}
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=10cm]{./images/decoupface_vf_model_loop.eps}
+\caption{Découpage des faces.}
+\label{decoupface_vf_model_loop}
+\end{figure}
+4) Repositionnement des sommets existant avant le découpage des arêtes puis des nouveaux sommets. (voir figure \ref{repositionnement_vf_model_loop})\\
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=10cm]{./images/repositionnement_vf_model_loop.eps}
+\caption{Repositionnement des sommets.}
+\label{repositionnement_vf_model_loop}
+\end{figure}
+
+
+
+\textbullet void vef\_model\_loop(vef\_model *m, int nbiter)\\
+Subdivision d'un \textit{vef\_model} avec la méthode de Loop \cite{L1987}.\\
+Algorithme :\\
+1) Création d'une nouvelle liste de sommets, d'un nouvelle liste d'aretes et d'une nouvelle liste de faces.\\
+2) Ajout d'un sommet au milieu de toutes les arêtes (voir figure \ref{decouparete_vef_model_loop}) -> Découpage des arêtes en deux. Les sommets créés ont comme index \textit{nombre\_de\_sommets\_du\_modèle+index\_de\_l\_arete}.\\
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=10cm]{./images/decouparete_vef_model_loop.eps}
+\caption{Ajout d'un sommet sur les aretes.}
+\label{decouparete_vef_model_loop}
+\end{figure}
+3) Découpage des faces en quatre faces (voir figure \ref{decoupface_vef_model_loop}).\\
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=10cm]{./images/decoupface_vef_model_loop.eps}
+\caption{Découpage des faces.}
+\label{decoupface_vef_model_loop}
+\end{figure}
+4) Repositionnement des sommets existant avant le découpage des arêtes puis des nouveaux sommets. (voir figure \ref{repositionnement_vef_model_loop})\\
+\begin{figure}[htbp]
+\centering
+\includegraphics[width=10cm]{./images/repositionnement_vef_model_loop.eps}
+\caption{Repositionnement des sommets.}
+\label{repositionnement_vef_model_loop}
+\end{figure}
+
+\bibliographystyle{unsrt}
+\bibliography{manuel}
+
+\end{document}

+ 33 - 0
doc/src/topology.tex

@@ -0,0 +1,33 @@
+\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 TOPOLOGY}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+Des fonctions permettant des opérations topologiques sur les maillages sont implémentées dans cette bibliothèque.\\
+
+\section{Fonctions}
+
+\textbullet void vf\_model\_star(int type, vf\_model m, int *faces, int nbfaces, int **list, int *size, int depth)\\
+Recherche du voisinage à partir d'une liste d'index de faces, le tableau \textit{faces} et en spécifiant la profondeur \textit{depth}.\\
+Il est possible de demander le voisinage par arêtes (\textit{type==BYEDGE}) ou par sommet (\textit{type==BYVERTEX}). La liste des faces appartenant au voisinage est stockée dans \textit{list}.\\
+
+
+\textbullet int vf\_model\_nb\_hole(vf\_model *m)\\
+Retourne le nombre de trou dans le maillage.\\
+Le nombre de trou est égale au nombre de bords fermés.\\
+
+
+\textbullet int vf\_model\_nb\_connected\_part(vf\_model *m, int **list)\\
+Retourne le nombre de parties connexes contenu dans le maillage. Le paramètre \textit{list} contient le numéro de la partie de la face du même index.\\
+
+\end{document}

+ 25 - 0
doc/src/triangulation.tex

@@ -0,0 +1,25 @@
+\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 TRIANGULATION}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+
+
+\section{Structures de données}
+
+
+
+\section{Fonctions}
+
+
+\end{document}

+ 125 - 0
doc/src/util.tex

@@ -0,0 +1,125 @@
+\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 UTIL}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+
+Cette bibliothèque permet de gérer des listes d'entiers et de rééls.\\
+Il est possible d'ajouter, enlever, afficher, rechercher des éléments, de faire des décalages et des calculs statistiques.\\
+
+\section{Fonctions}
+
+\textbullet int list\_int\_contains(int *list, int size, int tosearch)\\
+Renvoie l'index de l'élément recherché, -1 si l'élément n'est pas trouvé.\\
+
+
+\textbullet int list\_double\_contains(double *list, int size, double tosearch)\\
+Renvoie l'index de l'élément recherché, -1 si l'élément n'est pas trouvé.\\
+
+
+\textbullet int list\_int\_add(int **list, int *size, int toadd, int add\_type)\\
+Ajoute l'élément en fin de liste.\\
+Le paramètre \textit{add\_type} peut prendre deux valeurs : \textit{WITH\_REDUNDANCE} ou \textit{WITHOUT\_REDUNDANCE}.\\
+Si \textit{add\_type==WITH\_REDUNDANCE}, l'ajout est direct. Si \textit{add\_type==WITHOUT\_REDUNDANCE}, on parcourt la liste et on ajoute en fin de liste seulement si l'élément n'est pas déjà présent.\\
+
+
+\textbullet int list\_double\_add(double **list, int *size, double toadd, int add\_type)\\
+Ajoute l'élément en fin de liste.\\
+Le paramètre \textit{add\_type} peut prendre deux valeurs : \textit{WITH\_REDUNDANCE} ou \textit{WITHOUT\_REDUNDANCE}.\\
+Si \textit{add\_type==WITH\_REDUNDANCE}, l'ajout est direct. Si \textit{add\_type==WITHOUT\_REDUNDANCE}, on parcourt la liste et on ajoute en fin de liste seulement si l'élément n'est pas déjà présent.\\
+
+
+\textbullet int list\_int\_remove(int **list, int *size, int index)\\
+Supprime l'élément se trouvant à la position \textit{index}.\\
+
+
+\textbullet int liste\_double\_remove(double **list, int *size, int index)\\
+Supprime l'élément se trouvant à la position \textit{index}.\\
+
+
+\textbullet void list\_int\_display(int *list, int size)\\
+Affiche la liste.\\
+
+
+\textbullet void list\_double\_display(double *list, int size)\\
+Affiche la liste.\\
+
+
+\textbullet void list\_int\_reverse(int *list, int size)\\
+Inverse la liste.\\
+
+
+\textbullet void list\_double\_reverse(double *list, int size)\\
+Inverse la liste.\\
+
+
+\textbullet void list\_int\_shift\_right(int *list, int size, int shift)\\
+Décalage à droite de \textit{shift} positions.\\
+
+
+\textbullet void list\_int\_shift\_left(int *list, int size, int shift)\\
+Décalage à gauche de \textit{shift} positions.\\
+
+
+\textbullet void list\_double\_shift\_right(double *list, int size, int shift)\\
+Décalage à droite de \textit{shift} positions.\\
+
+
+\textbullet void list\_double\_shift\_left(double *list, int size, int shift)\\
+Décalage à gauche de \textit{shift} positions.\\
+
+
+\textbullet int list\_int\_min(int* list, int size)\\
+Retourne la valeur minimale de la liste.\\
+
+
+\textbullet int list\_int\_max(int *list, int size)\\
+Retourne la valeur maximale de la liste.\\
+
+
+\textbullet double list\_double\_min(double* list, int size)\\
+Retourne la valeur minimale de la liste.\\
+
+
+\textbullet double list\_double\_max(double *list, int size)\\
+Retourne la valeur maximale de la liste.\\
+
+
+\textbullet double list\_int\_average(int *list, int size)\\
+Retourne la valeur moyenne de la liste.\\
+
+
+\textbullet double list\_int\_variance(int *list, int size)\\
+Retourne la variance de la liste.\\
+
+
+\textbullet double list\_double\_average(double *list, int size)\\
+Retourne la valeur moyenne de la liste.\\
+
+
+\textbullet double list\_double\_variance(double *list, int size)\\
+Retourne la variance de la liste.\\
+
+ 
+\textbullet void list\_int\_sort(int *list, int size, int type)\\
+Tri la liste.\\
+Le paramètre \textit{type} peut prendre deux valeurs : \textit{ASC} ou \textit{DESC}.\\
+Si \textit{type==ASC} alors la liste sera triée de façon croissante. Si \textit{type==DESC}, la liste sera triée de façon décroissante.
+
+
+\textbullet void list\_double\_sort(double *list, int size, int type)\\
+Tri la liste.\\
+Le paramètre \textit{type} peut prendre deux valeurs : \textit{ASC} ou \textit{DESC}.\\
+Si \textit{type==ASC} alors la liste sera triée de façon croissante. Si \textit{type==DESC}, la liste sera triée de façon décroissante.
+
+\end{document}

+ 62 - 0
doc/src/vector.tex

@@ -0,0 +1,62 @@
+\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 VECTOR}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+Cette bibliothèque implémente une structure de vecteur 3D les fonctions associés pour les manipuler ainsi que des opérations comme la normalisation, le produit scalaire ou vectoriel.\\
+
+\section{Structures de données}
+
+Le vecteur 3D est une structure comportant trois rééls : la composante suivant X, la composante suivant Y et la composante suivant Z.\\
+\begin{verbatim}
+typedef struct
+{
+  double dx,dy,dz;
+}vector3d;
+\end{verbatim}
+
+\section{Fonctions}
+
+
+\textbullet void vector3d\_init(vector3d *v, double dx, double dy, double dz)\\
+Initialisation d'un vecteur 3D avec trois rééls.\\
+
+
+\textbullet void vector3d\_display(vector3d v)\\
+Affichage d'un vecteur 3D.\\
+
+
+\textbullet double vector3d\_size(vector3d v)\\
+Calcul de la taille d'un vecteur 3D.\\
+
+
+\textbullet int vector3d\_equal(vector3d v1, vector3d v2)\\
+Retourne 1 si les composantes des deux vecteurs sont égales une à une.\\
+
+
+\textbullet void vector3d\_normalize(vector3d *v)\\
+Normalisation du vecteur 3D. Chaque composante est divisée par la taille du vecteur 3D.\\
+
+
+\textbullet double vector3d\_scalarproduct(vector3d v1, vector3d v2)\\
+Calcul du produit scalaire de deux vecteurs 3D.\\
+
+
+\textbullet vector3d vector3d\_vectorialproduct(vector3d v1, vector3d v2)\\
+Calcul du produit vectoriel de deux vecteurs 3D.\\
+
+
+\textbullet void vector3d\_reverse(vector3d *v)\\
+Inversion du vecteur 3D. Chaque composante est multiplié par -1.\\
+
+\end{document}

+ 167 - 0
doc/src/vertex.tex

@@ -0,0 +1,167 @@
+\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 VERTEX}
+\date{}
+
+\begin{document}
+\maketitle
+
+\section{Utilisation}
+Cette bibliothèque implémente les structures de données nécessaires au stockage des sommets d'un maillage ainsi que des fonctions pour manipuler ceux-ci.\\
+Deux strucutres de données sont disponibles : \textit{vf\_vertex} pour le stockage des maillages \textit{vf\_model} et \textit{vef\_vertex} pour le stockage des maillages \textit{vef\_model}.
+
+\section{Structures de données}
+
+La structure \textit{vf\_vertex} est utilisé par la structure \textit{vf\_model} pour stocker les coordonnées des sommets d'un maillage. Cette structure est donc composée de trois rééls qui sont les trois composantes X,Y et Z du sommet ainsi qu'une liste d'index \textit{incidentvertices} de sommets en relation direct, reliés par une arête, avec ce sommet.\\
+\begin{verbatim}
+typedef struct
+{
+  double x;
+  double y;
+  double z;
+  int *incidentvertices;
+  int nbincidentvertices;
+}vf_vertex;
+\end{verbatim}
+
+
+La structure \textit{vef\_vertex} est utilisé par la structure \textit{vef\_model} pour stocker les coordonnées des sommets d'un maillage. Cette structure est donc composée de trois rééls qui sont les trois composantes X,Y et Z du sommet ainsi qu'une liste d'index \textit{sharededges} d'arêtes partant ce sommet.\\
+\begin{verbatim}
+typedef struct
+{
+  double x;
+  double y;
+  double z;
+  int *sharededges;
+  int nbsharededges;
+}vef_vertex;
+\end{verbatim}
+
+\section{Fonctions}
+
+\subsection{Fonctions utilisant \textit{vf\_vertex}}
+
+
+\textbullet void vf\_vertex\_display(vf\_vertex v)\\
+Affichage d'un \textit{vf\_vertex}.\\
+
+
+\textbullet void vf\_vertex\_translate(vf\_vertex *v, vector3d delta)\\
+Translation d'un vecteur passé en paramètre.\\
+Les composantes \textit{dx,dy,dz} sont ajoutés aux coordonnées du \textit{vf\_vertex}.\\
+
+
+\textbullet void vf\_vertex\_rotateX\_radian(vf\_vertex *v, double angle)\\
+Rotation suivant l'axe X d'un angle en radian.\\
+
+
+\textbullet void vf\_vertex\_rotateX\_degre(vf\_vertex *v, double angle)\\
+Rotation suivant l'axe X d'un angle en degre.\\
+
+
+\textbullet void vf\_vertex\_rotateX\_center\_radian(vf\_vertex *v, double angle, point3d centre)\\
+Rotation suivant l'axe X d'un angle en radian et autour du \textit{point3d centre}.\\
+
+
+\textbullet void vf\_vertex\_rotateX\_center\_degre(vf\_vertex *v, double angle, point3d centre)\\
+Rotation suivant l'axe X d'un angle en degre et autour du \textit{point3d centre}.\\
+
+
+\textbullet void vf\_vertex\_rotateY\_radian(vf\_vertex *v, double angle)\\
+Rotation suivant l'axe Y d'un angle en radian.\\
+
+
+\textbullet void vf\_vertex\_rotateY\_degre(vf\_vertex *v, double angle)\\
+Rotation suivant l'axe Y d'un angle en degre.\\
+
+
+\textbullet void vf\_vertex\_rotateY\_center\_radian(vf\_vertex *v, double angle, point3d centre)\\
+Rotation suivant l'axe Y d'un angle en radian et autour du \textit{point3d centre}.\\
+
+
+\textbullet void vf\_vertex\_rotateY\_center\_degre(vf\_vertex *v, double angle, point3d centre)\\
+Rotation suivant l'axe Y d'un angle en degre et autour du \textit{point3d centre}.\\
+
+
+\textbullet void vf\_vertex\_rotateZ\_radian(vf\_vertex *v, double angle)\\
+Rotation suivant l'axe Z d'un angle en radian.\\
+
+
+\textbullet void vf\_vertex\_rotateZ\_degre(vf\_vertex *v, double angle)\\
+Rotation suivant l'axe Z d'un angle en degre.\\
+
+
+\textbullet void vf\_vertex\_rotateZ\_center\_radian(vf\_vertex *v, double angle, point3d centre)\\
+Rotation suivant l'axe Z d'un angle en radian et autour du \textit{point3d centre}.\\
+
+
+\textbullet void vf\_vertex\_rotateZ\_center\_degre(vf\_vertex *v, double angle, point3d centre)\\
+Rotation suivant l'axe Z d'un angle en degre et autour du \textit{point3d centre}.\\
+
+
+
+\subsection{Fonctions utilisant \textit{vef\_vertex}}
+
+\textbullet void vef\_vertex\_display(vef\_vertex v)\\
+Affichage d'un \textit{vef\_vertex}.\\
+
+
+\textbullet void vef\_vertex\_translate(vef\_vertex *v, vector3d delta)\\
+Translation d'un vecteur passé en paramètre.\\
+Les composantes \textit{dx,dy,dz} sont ajoutés aux coordonnées du \textit{vef\_vertex}.\\
+
+
+\textbullet void vef\_vertex\_rotateX\_radian(vef\_vertex *v, double angle)\\
+Rotation suivant l'axe X d'un angle en radian.\\
+
+
+\textbullet void vef\_vertex\_rotateX\_degre(vef\_vertex *v, double angle)\\
+Rotation suivant l'axe X d'un angle en degre.\\
+
+
+\textbullet void vef\_vertex\_rotateX\_center\_radian(vef\_vertex *v, double angle, point3d centre)\\
+Rotation suivant l'axe X d'un angle en radian et autour du \textit{point3d centre}.\\
+
+
+\textbullet void vef\_vertex\_rotateX\_center\_degre(vef\_vertex *v, double angle, point3d centre)\\
+Rotation suivant l'axe X d'un angle en degre et autour du \textit{point3d centre}.\\
+
+
+\textbullet void vef\_vertex\_rotateY\_radian(vef\_vertex *v, double angle)\\
+Rotation suivant l'axe Y d'un angle en radian.\\
+
+
+\textbullet void vef\_vertex\_rotateY\_degre(vef\_vertex *v, double angle)\\
+Rotation suivant l'axe Y d'un angle en degre.\\
+
+
+\textbullet void vef\_vertex\_rotateY\_center\_radian(vef\_vertex *v, double angle, point3d centre)\\
+Rotation suivant l'axe Y d'un angle en radian et autour du \textit{point3d centre}.\\
+
+
+\textbullet void vef\_vertex\_rotateY\_center\_degre(vef\_vertex *v, double angle, point3d centre)\\
+Rotation suivant l'axe Y d'un angle en degre et autour du \textit{point3d centre}.\\
+
+
+\textbullet void vef\_vertex\_rotateZ\_radian(vef\_vertex *v, double angle)\\
+Rotation suivant l'axe Z d'un angle en radian.\\
+
+
+\textbullet void vef\_vertex\_rotateZ\_degre(vef\_vertex *v, double angle)\\
+Rotation suivant l'axe Z d'un angle en degre.\\
+
+
+\textbullet void vef\_vertex\_rotateZ\_center\_radian(vef\_vertex *v, double angle, point3d centre)\\
+Rotation suivant l'axe Z d'un angle en radian et autour du \textit{point3d centre}.\\
+
+
+\textbullet void vef\_vertex\_rotateZ\_center\_degre(vef\_vertex *v, double angle, point3d centre)\\
+Rotation suivant l'axe Z d'un angle en degre et autour du \textit{point3d centre}.\\
+
+\end{document}

+ 25 - 0
examples/conversion/Makefile

@@ -0,0 +1,25 @@
+GCC= gcc
+CFLAGS = -W -Wall -std=c99 -pipe -O2 -Wall -W -D_REENTRANT
+INCLUDE = 
+LIBS = -lgsl -lgslcblas -lm -lglut -lGL -lGLU -la2ri
+OBJECTS = main.o
+
+TARGET = conversion
+
+all : $(TARGET)
+
+$(TARGET) : $(OBJECTS)
+	$(GCC) $(CFLAGS) $(INCLUDE) $(OBJECTS) -o $(TARGET) $(LIBS)
+
+%.o : %.c
+	$(GCC) $(CFLAGS)  $(INCLUDE) -c $< -o $@
+
+clean : 
+	rm -f *~ *.o $(TARGET)
+
+cleanall : clean
+	rm -rf ../../bin/$(TARGET)
+
+install : $(TARGET)
+	mkdir ../../bin/$(TARGET)
+	cp $(TARGET) ../../bin/$(TARGET)

+ 35 - 0
examples/conversion/main.c

@@ -0,0 +1,35 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <a2ri/conversion.h>
+
+int
+main(int argc, char* argv[]) 
+{
+  
+  if(argc!=3 && argc!=4)
+    {
+      printf("usage: ./conversion <fichier modele> <fichier sortie>\nou\nusage : argv[0] -tovrml1 <fichier modele> <fichiersortie>\n");
+      return EXIT_FAILURE;
+    }
+
+  if(argc==3)
+    {
+      a2ri_vf_conversion(argv[1],argv[2]);
+      return EXIT_SUCCESS;
+    }
+
+  vf_model m;
+
+  //initialisation d'un nouveau modèle
+  a2ri_vf_init(&m);
+
+  //ouverture du modèle input
+  a2ri_vf_open_file(argv[2],&m);
+
+  //enregistrement du modèle output
+  a2ri_vf_save_ascii_stl(argv[3],&m);
+
+  a2ri_vf_free(&m);
+  
+  return EXIT_SUCCESS;
+}

+ 25 - 0
examples/epaississement/Makefile

@@ -0,0 +1,25 @@
+GCC= gcc
+CFLAGS = -W -Wall -std=c99 -pipe -O2 -Wall -W -D_REENTRANT
+INCLUDE = -I.
+LIBS = -lgsl -lgslcblas -lm -lglut -lGL -lGLU -la2ri
+OBJECTS = opengl.o main.o
+
+TARGET = epaississement
+
+all : $(TARGET)
+
+$(TARGET) : $(OBJECTS)
+	$(GCC) $(CFLAGS) $(INCLUDE) $(OBJECTS) -o $(TARGET) $(LIBS)
+
+%.o : %.c
+	$(GCC) $(CFLAGS)  $(INCLUDE) -c $< -o $@
+
+clean : 
+	rm -f *~ *.o $(TARGET)
+
+cleanall : clean
+	rm -rf ../../bin/$(TARGET)
+
+install : $(TARGET)
+	mkdir ../../bin/$(TARGET)
+	cp $(TARGET) ../../bin/$(TARGET)

+ 40 - 0
examples/epaississement/main.c

@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <a2ri/io.h>
+#include <a2ri/graph.h>
+#include "opengl.h"
+
+
+
+int main(int argc, char *argv[])
+{
+  vf_model m;
+
+  if(argc!=3)
+    {
+      printf("usage : %s <modele> <epaisseur>\n",argv[0]);
+      return 1;
+    }
+
+
+  a2ri_vf_init(&m);
+
+  if(!a2ri_vf_open_file(argv[1],&m))
+  return 0;
+
+
+  printf("touche e : epaissir le maillage\n");
+  printf("touche o : afficher le modele de depart\n");
+  printf("touche d : afficher le modele\n");
+  printf("touche f : afficher le modele en detail\n");
+  printf("touche s : sauver le maillage courant\n");
+  printf("touche q/Q/esc : quitter\n");
+  go(argc,argv,&m,atof(argv[2]));
+
+  
+    
+  return 0;
+}
+
+

+ 339 - 0
examples/epaississement/opengl.c

@@ -0,0 +1,339 @@
+#include "opengl.h"
+#include <a2ri/epaississement.h>
+#include <stdio.h>
+#include <time.h>
+
+vf_model *original;
+vf_model *todisplay;
+int zoom=0;
+float rinc;
+float tinc;
+int initx,inity,rotation,deplacement;
+double angle,angle2,longdiag;
+int affiche_normale;
+double epaisseur;
+
+
+void 
+init (int argc, char **argv)
+{
+  int i, j;
+
+  glutInit (&argc, argv);
+  glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
+  glutInitWindowSize (WIDTH, HEIGHT);
+  glutInitWindowPosition (100, 25);
+  glutCreateWindow ("Epaississement de surface");
+
+  glClearColor (0.0, 0.0, 0.0, 0.0);
+  glEnable(GL_DEPTH_TEST);
+  glViewport (0, 0, (GLsizei)WIDTH, (GLsizei)HEIGHT);
+
+  rx = ry = rz = tx = ty = tz = 0;
+  for (i=0; i < NB_VAL; i++)
+    for (j=0; j < 6; j++)
+      hist [i][j] = 0;
+}
+
+
+
+void
+display_triangles()
+{
+  for(int i=0;i<todisplay->nbface;i++)
+    {
+      int ve1=todisplay->fa[i].ve1;
+      int ve2=todisplay->fa[i].ve2;
+      int ve3=todisplay->fa[i].ve3;
+
+
+      glBegin(GL_TRIANGLES);
+      glColor4f(0.7f, 0.7f, 0.7f, 1.0f);
+      vector3d AB,AC,norm;
+      vector3d_init(&AB,
+		    todisplay->ve[ve2].x-todisplay->ve[ve1].x,
+		    todisplay->ve[ve2].y-todisplay->ve[ve1].y,
+		    todisplay->ve[ve2].z-todisplay->ve[ve1].z);
+      vector3d_init(&AC,
+		    todisplay->ve[ve3].x-todisplay->ve[ve1].x,
+		    todisplay->ve[ve3].y-todisplay->ve[ve1].y,
+		    todisplay->ve[ve3].z-todisplay->ve[ve1].z);
+      norm=vector3d_vectorialproduct(&AB,&AC);
+      vector3d_normalize(&norm);
+      glNormal3f (norm.dx, norm.dy, norm.dz);
+      glVertex3f(todisplay->ve[ve1].x,
+		 todisplay->ve[ve1].y,
+		 todisplay->ve[ve1].z);
+      glVertex3f(todisplay->ve[ve2].x,
+		 todisplay->ve[ve2].y,
+		 todisplay->ve[ve2].z);
+      glVertex3f(todisplay->ve[ve3].x,
+		 todisplay->ve[ve3].y,
+		 todisplay->ve[ve3].z);
+      glEnd();
+
+      if(affiche_normale)
+	{
+	  glColor4f(0.0f,0.0f,1.0f,1.0f);
+	  glLineWidth(2);
+	  glBegin(GL_LINES);
+	  glVertex3f((todisplay->ve[ve1].x+todisplay->ve[ve2].x+todisplay->ve[ve3].x)/3.0,
+		     (todisplay->ve[ve1].y+todisplay->ve[ve2].y+todisplay->ve[ve3].y)/3.0,
+		     (todisplay->ve[ve1].z+todisplay->ve[ve2].z+todisplay->ve[ve3].z)/3.0);
+	  glVertex3f((todisplay->ve[ve1].x+todisplay->ve[ve2].x+todisplay->ve[ve3].x)/3.0+(norm.dx*longdiag/20.0),
+		     (todisplay->ve[ve1].y+todisplay->ve[ve2].y+todisplay->ve[ve3].y)/3.0+(norm.dy*longdiag/20.0),
+		     (todisplay->ve[ve1].z+todisplay->ve[ve2].z+todisplay->ve[ve3].z)/3.0+(norm.dz*longdiag/20.0));
+	  glEnd();
+	}
+
+      glColor4f(0.0f,0.0f,0.0f,1.0f);
+      glLineWidth(2);
+      glBegin(GL_LINES);
+      glVertex3f(todisplay->ve[ve1].x,
+		 todisplay->ve[ve1].y,
+		 todisplay->ve[ve1].z);
+      glVertex3f(todisplay->ve[ve2].x,
+		 todisplay->ve[ve2].y,
+		 todisplay->ve[ve2].z);
+      glVertex3f(todisplay->ve[ve2].x,
+		 todisplay->ve[ve2].y,
+		 todisplay->ve[ve2].z);
+      glVertex3f(todisplay->ve[ve3].x,
+		 todisplay->ve[ve3].y,
+		 todisplay->ve[ve3].z);
+      glVertex3f(todisplay->ve[ve3].x,
+		 todisplay->ve[ve3].y,
+		 todisplay->ve[ve3].z);
+      glVertex3f(todisplay->ve[ve1].x,
+		 todisplay->ve[ve1].y,
+		 todisplay->ve[ve1].z);
+      glEnd();
+    }
+  
+  glFlush();
+}
+
+
+
+void 
+transform (int i)
+{
+  glTranslatef((todisplay->xmin+todisplay->xmax)/2.0,
+	       (todisplay->ymin+todisplay->ymax)/2.0,
+	       (todisplay->zmin+todisplay->zmax)/2.0);
+  glRotatef (hist[i][0], 1.0, 0.0, 0.0);
+  glRotatef (hist[i][1], 0.0, 1.0, 0.0);
+  glRotatef (hist[i][2], 0.0, 0.0, 1.0);
+  glTranslatef(-(todisplay->xmin+todisplay->xmax)/2.0,
+	       -(todisplay->ymin+todisplay->ymax)/2.0,
+	       -(todisplay->zmin+todisplay->zmax)/2.0);
+}
+
+void 
+display ()
+{
+  glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+  glMatrixMode (GL_PROJECTION);
+  glLoadIdentity ();
+  gluPerspective (45, WIDTH/((float)HEIGHT), 0.1, 900);
+
+  glMatrixMode (GL_MODELVIEW);
+  glLoadIdentity ();
+  if(todisplay->zmax==0)
+    gluLookAt (((todisplay->xmin+todisplay->xmax)/2.0)+tx,
+	       ((todisplay->ymin+todisplay->ymax)/2.0)+ty, 
+	       70+tz,
+	       ((todisplay->xmin+todisplay->xmax)/2.0)+tx,
+	       ((todisplay->ymin+todisplay->ymax)/2.0)+ty,
+	       ((todisplay->zmin+todisplay->zmax)/2.0)+tz,
+	       0, 1, 0);
+  else
+    gluLookAt (((todisplay->xmin+todisplay->xmax)/2.0)+tx,
+	       ((todisplay->ymin+todisplay->ymax)/2.0)+ty,
+	       todisplay->zmax*1.5+tz,
+	       ((todisplay->xmin+todisplay->xmax)/2.0)+tx,
+	       ((todisplay->ymin+todisplay->ymax)/2.0)+ty,
+	       ((todisplay->zmin+todisplay->zmax)/2.0)+tz,
+	       0, 1, 0);
+  
+  transform (0);
+
+  glTranslatef((todisplay->xmin+todisplay->xmax)/2.0,
+	       (todisplay->ymin+todisplay->ymax)/2.0,
+	       (todisplay->zmin+todisplay->zmax)/2.0);
+  glRotatef(angle,0.0,1.0,0.0);
+  glRotatef(angle2,1.0,0.0,0.0);
+  glTranslatef(-(todisplay->xmin+todisplay->xmax)/2.0,
+	       -(todisplay->ymin+todisplay->ymax)/2.0,
+	       -(todisplay->zmin+todisplay->zmax)/2.0);
+
+  display_triangles();
+
+  glutSwapBuffers ();
+}
+   
+
+void 
+exitFunc ()
+{
+  a2ri_vf_free(original);
+  exit (EXIT_SUCCESS);
+}
+
+
+void mouse(int button, int state, int x, int y)
+{
+  if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
+    {
+      rotation=1;
+      initx=x;
+      inity=y;
+    }
+
+  if(button==GLUT_LEFT_BUTTON && state==GLUT_UP)
+    rotation=0;
+
+  if(button==GLUT_RIGHT_BUTTON && state==GLUT_DOWN)
+    {
+      deplacement=1;
+      initx=x;
+      inity=y;
+    }
+
+  if(button==GLUT_LEFT_BUTTON && state==GLUT_UP)
+    deplacement=0;
+
+  if(button==GLUT_WHEEL_MOUSE_UP)
+    tz+=longdiag/50;
+
+  if(button==GLUT_WHEEL_MOUSE_DOWN)
+    tz-=longdiag/50;
+}
+
+void motion(int x, int y)
+{
+  if(rotation)
+    {
+      angle+=(x-initx)*0.5;
+      angle2+=(y-inity)*0.5;
+      initx=x;
+      inity=y;
+      glutPostRedisplay();
+    }
+
+  if(deplacement)
+    {
+      tx-=(x-initx)*0.001*longdiag;
+      ty+=(y-inity)*0.001*longdiag;
+      initx=x;
+      inity=y;
+      glutPostRedisplay();
+    }
+}
+
+
+void 
+keyboard (unsigned char key, int x, int y)
+{
+  int i, j;
+  char file[100];
+
+  //evite les warning
+  x=y;
+  y=x;
+
+  switch (key)
+    {	
+    case 'd':
+    case 'D':
+      a2ri_vf_display(todisplay);
+      break;
+    case 'f':
+    case 'F':
+      a2ri_vf_display_detail(todisplay);
+      break;
+    case 'o':
+    case 'O':
+      todisplay=original;
+      break;
+    case 'e':
+    case 'E':
+      a2ri_vf_epaissi_surface(original,epaisseur);
+      break;
+    case 'n':
+    case 'N':
+      affiche_normale=(affiche_normale+1)%2;
+      break;
+    case 's':
+    case 'S':
+      printf("entrer le nom du fichier :\n");
+      a2ri_erreur_critique_si(!scanf("%s",file),"erreur\n");
+      a2ri_vf_save_file(file,todisplay);
+      break;
+    case 'Q':
+    case 'q':
+    case 27:
+      exitFunc ();
+      break;
+    }
+
+
+  for (i=NB_VAL-1; i > 0; i--)
+    for (j=0; j < 6; j++)
+      hist [i][j] = hist [i-1][j];
+  hist [0][0] = rx;
+  hist [0][1] = ry;
+  hist [0][2] = rz; 
+  hist [0][3] = tx;
+  hist [0][4] = ty;
+  hist [0][5] = tz;
+}
+
+
+void 
+idleFunc ()
+{
+  int i, j;
+  for (i=NB_VAL-1; i > 0; i--)
+    for (j=0; j < 6; j++)
+      hist [i][j] = hist [i-1][j];
+  
+  glutPostRedisplay ();
+}
+
+
+int 
+go (int argc, char **argv, vf_model *m, double epais)
+{
+  point3d ptmin,ptmax;
+
+  epaisseur=epais;
+
+  original=m;
+  todisplay=original;
+  affiche_normale=0;
+  rinc=R_INC;
+  tinc=T_INC;
+  if(todisplay->zmax-todisplay->zmin!=0)
+    tinc=(todisplay->zmax-todisplay->zmin)/10;
+
+  ptmin.x=todisplay->xmin;
+  ptmin.y=todisplay->ymin;
+  ptmin.z=todisplay->zmin;
+  ptmax.x=todisplay->xmax;
+  ptmax.y=todisplay->ymax;
+  ptmax.z=todisplay->zmax;
+  longdiag=point3d_length(&ptmin,&ptmax);
+
+  init (argc, argv);
+  
+  glutDisplayFunc (display);
+  glutMouseFunc(mouse);
+  glutMotionFunc(motion);
+  glutKeyboardFunc (keyboard);
+  glutIdleFunc (idleFunc);
+  glutMainLoop ();
+  
+  return EXIT_SUCCESS;
+}
+    

+ 37 - 0
examples/epaississement/opengl.h

@@ -0,0 +1,37 @@
+#ifndef OPENGL__H
+#define OPENGL__H
+
+#include <GL/glut.h>
+#include <GL/gl.h>
+#include <GL/glu.h>
+#include <stdlib.h>
+#include <a2ri/io.h>
+#include <a2ri/graph.h>
+
+#define WIDTH 640
+#define HEIGHT 480
+
+#define  GLUT_WHEEL_MOUSE_UP                0x0003
+#define  GLUT_WHEEL_MOUSE_DOWN              0x0004
+
+#define NB_VAL 15
+double hist [NB_VAL][6];
+
+#define R_INC 5
+#define T_INC 1
+double rx, ry, rz;
+double tx, ty, tz;
+
+
+void init(int argc, char **argv);
+void transform(int i);
+void display_triangles();
+void display();
+void exitFunc();
+void mouse(int button, int state, int x, int y);
+void motion(int x, int y);
+void keyboard(unsigned char key, int x, int y);
+void idleFunc();
+int go(int argc, char **argv, vf_model *m, double epais);
+
+#endif

+ 19 - 0
examples/geodesique/Makefile

@@ -0,0 +1,19 @@
+GCC= gcc
+CFLAGS = -W -Wall -std=c99 -pipe -O2 -Wall -W -D_REENTRANT
+INCLUDE = -I.
+LIBS = -lgsl -lgslcblas -lm -lglut -lGL -lGLU -la2ri
+OBJECTS = opengl.o main.o
+
+TARGET = geodesique
+
+all : $(TARGET)
+
+$(TARGET) : $(OBJECTS)
+	$(GCC) $(CFLAGS) $(INCLUDE) $(OBJECTS) -o $(TARGET) $(LIBS)
+
+%.o : %.c
+	$(GCC) $(CFLAGS)  $(INCLUDE) -c $< -o $@
+
+clean : 
+	rm -f *~ *.o $(TARGET)
+

+ 44 - 0
examples/geodesique/main.c

@@ -0,0 +1,44 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "opengl.h"
+
+int
+main(int argc, char* argv[]) 
+{
+
+  if(argc!=2 && argc!=4)
+    {
+      printf("usage: %s <fichier modele>\nou\nusage :: %s <fichier modele> <sommet1> <sommet2>\n",argv[0],argv[0]);
+      return EXIT_FAILURE;
+    }
+    
+  vf_model m;
+
+  a2ri_vf_init(&m);
+  a2ri_vf_open_file(argv[1],&m);
+
+  printf("Sélection des points de départ et de fin à la souris\n");
+  printf("clic milieu + ENTREE : sélectionner les sommets\n");
+  printf("touche TAB : basculer d'un sommet à l'autre si plusieurs sont sélectionnés\n");
+  printf("clic gauche : faire tourner la scène\n");
+  printf("clic droit : faire translater la scène\n");
+  printf("touche t : densifier le maillage\n");
+  printf("touche y : recherche de chemin avec la methode approche avant\n");
+  printf("touche u : recherche de chemin avec la methode approche arriere\n");
+  printf("touche o : recherche de chemin avec la methode Dijkstra\n");
+  printf("touche i : recherche de chemin avec la methode approche et le plan moyen\n");
+  printf("touche k : recherche de chemin avec la methode approche et le plan minmax\n");
+  printf("touche p : recherche de chemin avec la methode Dijkstra et le plan moyen\n");
+  printf("touche m : recherche de chemin avec la methode Dijkstra et le plan minmax\n");
+  printf("touche c : afficher la longueur curvilinéaire entre les deux sommets situés sur un meme bord\n");
+  printf("touche r : reset\n");
+  printf("touche q/Q/esc : quitter\n");
+  
+  if(argc==2)
+    go(argc,argv,&m,-1,-1);
+  if(argc==4)
+    go(argc,argv,&m,atoi(argv[2]),atoi(argv[3]));
+  
+  return EXIT_SUCCESS;
+}
+

+ 1505 - 0
examples/geodesique/opengl.c

@@ -0,0 +1,1505 @@
+#include <time.h>
+#include "opengl.h"
+
+#define VERTICES 0
+#define WIREFRAME 1
+#define SOLID 2
+
+
+vf_model *model;
+double longdiag3d,longdiag2d,moy_arete;
+double largeur,hauteur,ratiomodel;
+int *tabselectionne,size_tabselectionne,selectionne;
+int index_tabselectionne;
+int *list,size;
+int mp,mp2;
+hashtable *table;
+char *nom_modele;
+
+
+double *listeanglegauche=NULL;
+double *listeangledroite=NULL;
+int size_listeanglegauche=0,size_listeangledroite=0;
+int *listedroite=NULL,size_listedroite=0;
+int *listegauche=NULL,size_listegauche=0;
+int affichage_plan;
+point3d points_plan[3];
+int affiche_normale;
+int type_affichage;
+
+
+void
+planarite(double *betamoy, double *betasd)
+{
+  vector3d v1,v2;
+  double *listangle=NULL;
+  int sizelistangle=0;
+
+  for(int i=1;i<size-1;i++)
+    {
+      vector3d_init(&v1,
+		    model->ve[list[i-1]].x-model->ve[list[i]].x,
+		    model->ve[list[i-1]].y-model->ve[list[i]].y,
+		    model->ve[list[i-1]].z-model->ve[list[i]].z);
+
+      vector3d_init(&v2,
+		    model->ve[list[i+1]].x-model->ve[list[i]].x,
+		    model->ve[list[i+1]].y-model->ve[list[i]].y,
+		    model->ve[list[i+1]].z-model->ve[list[i]].z);
+
+
+      list_double_add(&listangle,&sizelistangle,vector3d_angle_degre(&v1,&v2),WITH_REDUNDANCE);
+    }
+
+  *betamoy=list_double_average(listangle,sizelistangle);
+  *betasd=sqrt(list_double_variance(listangle,sizelistangle));
+}
+
+
+void
+planarite_straightest(double *thetamoy, double *thetasd, double *kappamoy, double *kappasd)
+{
+
+  vector3d v1,v2;
+  int *listfaces=NULL,size_listfaces=0;
+  double anglegauche=0,angledroite=0;
+  free(listeangledroite);
+  listeangledroite=NULL;
+  size_listeangledroite=0;
+  free(listeanglegauche);
+  listeanglegauche=NULL;
+  size_listeanglegauche=0;
+
+  hashtable *table=a2ri_vf_construction_edge_table(model,NULL,0);
+ 
+  
+  for(int i=1;i<size-1;i++)
+    {
+      int numvertex=list[i];
+      free(listfaces);
+      listfaces=NULL;
+      size_listfaces=0;
+      a2ri_vf_faces_next_vertex_with_hashtable(model,numvertex,&listfaces,&size_listfaces,table);
+      anglegauche=0;
+      angledroite=0;
+      for(int j=0;j<size_listfaces;j++)
+	{
+	  int numface=listfaces[j];
+	  if(list_int_contains(listedroite,size_listedroite,numface)!=-1)
+	    {
+	      if(model->fa[numface].ve1==numvertex)
+		{
+		  vector3d_init(&v1,
+				model->ve[model->fa[numface].ve2].x
+				-model->ve[model->fa[numface].ve1].x,
+				model->ve[model->fa[numface].ve2].y
+				-model->ve[model->fa[numface].ve1].y,
+				model->ve[model->fa[numface].ve2].z
+				-model->ve[model->fa[numface].ve1].z);
+		  vector3d_init(&v2,
+				model->ve[model->fa[numface].ve3].x
+				-model->ve[model->fa[numface].ve1].x,
+				model->ve[model->fa[numface].ve3].y
+				-model->ve[model->fa[numface].ve1].y,
+				model->ve[model->fa[numface].ve3].z
+				-model->ve[model->fa[numface].ve1].z);
+		  angledroite+=vector3d_angle_degre(&v1,&v2);
+		}
+	      if(model->fa[numface].ve2==numvertex)
+		{
+		  vector3d_init(&v1,
+				model->ve[model->fa[numface].ve1].x
+				-model->ve[model->fa[numface].ve2].x,
+				model->ve[model->fa[numface].ve1].y
+				-model->ve[model->fa[numface].ve2].y,
+				model->ve[model->fa[numface].ve1].z
+				-model->ve[model->fa[numface].ve2].z);
+		  vector3d_init(&v2,
+				model->ve[model->fa[numface].ve3].x
+				-model->ve[model->fa[numface].ve2].x,
+				model->ve[model->fa[numface].ve3].y
+				-model->ve[model->fa[numface].ve2].y,
+				model->ve[model->fa[numface].ve3].z
+				-model->ve[model->fa[numface].ve2].z);
+		  angledroite+=vector3d_angle_degre(&v1,&v2);
+		}
+	      if(model->fa[numface].ve3==numvertex)
+		{
+		  vector3d_init(&v1,
+				model->ve[model->fa[numface].ve1].x
+				-model->ve[model->fa[numface].ve3].x,
+				model->ve[model->fa[numface].ve1].y
+				-model->ve[model->fa[numface].ve3].y,
+				model->ve[model->fa[numface].ve1].z
+				-model->ve[model->fa[numface].ve3].z);
+		  vector3d_init(&v2,
+				model->ve[model->fa[numface].ve2].x
+				-model->ve[model->fa[numface].ve3].x,
+				model->ve[model->fa[numface].ve2].y
+				-model->ve[model->fa[numface].ve3].y,
+				model->ve[model->fa[numface].ve2].z
+				-model->ve[model->fa[numface].ve3].z);
+		  angledroite+=vector3d_angle_degre(&v1,&v2);
+		}
+	    }
+	  if(list_int_contains(listegauche,size_listegauche,numface)!=-1)
+	    {
+	      if(model->fa[numface].ve1==numvertex)
+		{
+		  vector3d_init(&v1,
+				model->ve[model->fa[numface].ve2].x
+				-model->ve[model->fa[numface].ve1].x,
+				model->ve[model->fa[numface].ve2].y
+				-model->ve[model->fa[numface].ve1].y,
+				model->ve[model->fa[numface].ve2].z
+				-model->ve[model->fa[numface].ve1].z);
+		  vector3d_init(&v2,
+				model->ve[model->fa[numface].ve3].x
+				-model->ve[model->fa[numface].ve1].x,
+				model->ve[model->fa[numface].ve3].y
+				-model->ve[model->fa[numface].ve1].y,
+				model->ve[model->fa[numface].ve3].z
+				-model->ve[model->fa[numface].ve1].z);
+		  anglegauche+=vector3d_angle_degre(&v1,&v2);
+		}
+	      if(model->fa[numface].ve2==numvertex)
+		{
+		  vector3d_init(&v1,
+				model->ve[model->fa[numface].ve1].x
+				-model->ve[model->fa[numface].ve2].x,
+				model->ve[model->fa[numface].ve1].y
+				-model->ve[model->fa[numface].ve2].y,
+				model->ve[model->fa[numface].ve1].z
+				-model->ve[model->fa[numface].ve2].z);
+		  vector3d_init(&v2,
+				model->ve[model->fa[numface].ve3].x
+				-model->ve[model->fa[numface].ve2].x,
+				model->ve[model->fa[numface].ve3].y
+				-model->ve[model->fa[numface].ve2].y,
+				model->ve[model->fa[numface].ve3].z
+				-model->ve[model->fa[numface].ve2].z);
+		  anglegauche+=vector3d_angle_degre(&v1,&v2);
+		}
+	      if(model->fa[numface].ve3==numvertex)
+		{
+		  vector3d_init(&v1,
+				model->ve[model->fa[numface].ve1].x
+				-model->ve[model->fa[numface].ve3].x,
+				model->ve[model->fa[numface].ve1].y
+				-model->ve[model->fa[numface].ve3].y,
+				model->ve[model->fa[numface].ve1].z
+				-model->ve[model->fa[numface].ve3].z);
+		  vector3d_init(&v2,
+				model->ve[model->fa[numface].ve2].x
+				-model->ve[model->fa[numface].ve3].x,
+				model->ve[model->fa[numface].ve2].y
+				-model->ve[model->fa[numface].ve3].y,
+				model->ve[model->fa[numface].ve2].z
+				-model->ve[model->fa[numface].ve3].z);
+		  anglegauche+=vector3d_angle_degre(&v1,&v2);
+		}
+	    }
+	}
+      list_double_add(&listeangledroite,&size_listeangledroite,angledroite,WITH_REDUNDANCE);
+      list_double_add(&listeanglegauche,&size_listeanglegauche,anglegauche,WITH_REDUNDANCE);
+    }
+  free(listfaces);
+
+  double *difference=NULL;
+  int size_difference=0;
+  double *kappa=NULL;
+  int size_kappa=0;
+
+  for(int i=0;i<size_listeangledroite;i++)
+    {
+      list_double_add(&difference,&size_difference,fabs(listeangledroite[i]-listeanglegauche[i]),WITH_REDUNDANCE);
+      list_double_add(&kappa,&size_kappa,((2.0*PI)/(listeangledroite[i]+listeanglegauche[i]))*(((listeangledroite[i]+listeanglegauche[i])/2.0)-listeanglegauche[i]),WITH_REDUNDANCE);
+    }
+
+
+  //printf("difference droite gauche : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",list_double_average(difference,size_difference),sqrt(list_double_variance(difference,size_difference)));
+  //printf("kappa : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",list_double_average(kappa,size_kappa),sqrt(list_double_variance(kappa,size_kappa)));
+  *thetamoy=list_double_average(difference,size_difference);
+  *thetasd=sqrt(list_double_variance(difference,size_difference));
+  *kappamoy=list_double_average(kappa,size_kappa);
+  *kappasd=sqrt(list_double_variance(kappa,size_kappa));
+  free(difference);
+  free(kappa);
+
+  hashtable_free(table);
+  free(table);
+}
+
+
+void
+affiche_plan()
+{
+  affichage_plan=1;  
+}
+
+
+
+void tri_gauche_droite()
+{
+
+  hashtable *table=a2ri_vf_construction_edge_table(model,NULL,0);
+
+  int *listegenerale=NULL,size_listegenerale=0;
+  int *listtemp=NULL,size_listtemp=0;
+  int trouve;
+  
+  listegauche=NULL;
+  size_listegauche=0;
+  listedroite=NULL;
+  size_listedroite=0;
+  
+  
+  for(int i=0;i<size;i++)
+    {
+      free(listtemp);
+      listtemp=NULL;
+      size_listtemp=0;
+      a2ri_vf_faces_next_vertex_with_hashtable(model,list[i],&listtemp,&size_listtemp,table);
+      for(int j=0;j<size_listtemp;j++)
+        list_int_add(&listegenerale,&size_listegenerale,listtemp[j],WITHOUT_REDUNDANCE);
+    
+    }
+  free(listtemp);
+
+   
+  for(int i=size-1;i>=0;i--)
+    {
+      int ve1=list[i];
+      int ve2=list[i+1];
+      for(int j=size_listegenerale-1;j>=0;j--)
+	{
+	  trouve=0;
+	  if(model->fa[listegenerale[j]].ve1==ve1)
+	    {
+	      if(model->fa[listegenerale[j]].ve2==ve2)
+		{
+		  list_int_add(&listegauche,&size_listegauche,listegenerale[j],WITHOUT_REDUNDANCE);
+		  trouve++;
+		}
+	      else
+		{
+		  if(model->fa[listegenerale[j]].ve3==ve2)
+		    {
+		      list_int_add(&listedroite,&size_listedroite,listegenerale[j],WITHOUT_REDUNDANCE);
+		      trouve++;
+		    }
+		}
+	    }
+                
+	  if(model->fa[listegenerale[j]].ve2==ve1)
+	    {
+	      if(model->fa[listegenerale[j]].ve3==ve2)
+		{
+		  list_int_add(&listegauche,&size_listegauche,listegenerale[j],WITHOUT_REDUNDANCE);
+		  trouve++;
+		}
+	      else
+		{
+		  if(model->fa[listegenerale[j]].ve1==ve2)
+		    {
+		      list_int_add(&listedroite,&size_listedroite,listegenerale[j],WITHOUT_REDUNDANCE);
+		      trouve++;
+		    }
+		}
+	    }
+                
+	  if(model->fa[listegenerale[j]].ve3==ve1)
+	    {
+	      if(model->fa[listegenerale[j]].ve1==ve2)
+		{
+		  list_int_add(&listegauche,&size_listegauche,listegenerale[j],WITHOUT_REDUNDANCE);
+		  trouve++;
+		}
+	      else
+		{
+		  if(model->fa[listegenerale[j]].ve2==ve2)
+		    {
+		      list_int_add(&listedroite,&size_listedroite,listegenerale[j],WITHOUT_REDUNDANCE);
+		      trouve++;
+		    }
+		}
+	    }
+	  if(trouve)
+	    list_int_remove(&listegenerale,&size_listegenerale,j);
+	}
+    }
+    
+
+  
+  for(int i=size_listegenerale-1;i>=0;i--)
+    {
+      if(model->fa[listegenerale[i]].ve1==vedeb || model->fa[listegenerale[i]].ve1==vefin || model->fa[listegenerale[i]].ve2==vedeb || model->fa[listegenerale[i]].ve2==vefin || model->fa[listegenerale[i]].ve3==vedeb || model->fa[listegenerale[i]].ve3==vefin)
+	list_int_remove(&listegenerale,&size_listegenerale,i);
+    }
+    
+
+  //prendre la star des rouges et comparer avec la listegenerale. les faces en communs sont rouges
+  //prendre la star des bleus et comparer avec la listegenerale. les faces en communs sont bleus
+  //recommencer jusqu'a ce que la listegenerale soit vide
+  while(size_listegenerale!=0)
+    {
+      int *listevoisindroite=NULL,size_listevoisindroite=0;
+      int *listevoisingauche=NULL,size_listevoisingauche=0;
+      a2ri_vf_star(BYEDGE,model,listedroite,size_listedroite,&listevoisindroite,&size_listevoisindroite,1);
+      a2ri_vf_star(BYEDGE,model,listegauche,size_listegauche,&listevoisingauche,&size_listevoisingauche,1);
+      for(int i=size_listegenerale-1;i>=0;i--)
+	{
+	  if(list_int_contains(listevoisindroite,size_listevoisindroite,listegenerale[i])!=-1)
+	    {
+	      list_int_add(&listedroite,&size_listedroite,listegenerale[i],WITH_REDUNDANCE);
+	      list_int_remove(&listegenerale,&size_listegenerale,i);
+	    }
+	  else
+	    {
+	      if(list_int_contains(listevoisingauche,size_listevoisingauche,listegenerale[i])!=-1)
+		{
+		  list_int_add(&listegauche,&size_listegauche,listegenerale[i],WITH_REDUNDANCE);
+		  list_int_remove(&listegenerale,&size_listegenerale,i);
+		}
+	    }
+	}
+      free(listevoisindroite);
+      free(listevoisingauche);
+    }
+  free(listegenerale); 
+
+  hashtable_free(table);
+  free(table);
+  
+}
+
+
+int
+arete_appartient_a_list(int ve1,int ve2)
+{
+  for(int i=0;i<size-1;i++)
+    if((list[i]==ve1 && list[i+1]==ve2) || (list[i]==ve2 && list[i+1]==ve1))
+      return 1;
+
+  return 0;
+}
+
+void
+camera_positionner_tourner()
+{
+
+  //pour la ptite blague
+  if(mp2)
+    {
+      angle+=rand_int(-2,2);
+      angle2+=rand_int(-1,1);
+    }
+  glScalef(tz,tz,1.0);
+  glTranslatef(tx,ty,0);
+  glTranslatef((model->xmin+model->xmax)/2.0,
+	       (model->ymin+model->ymax)/2.0,
+	       (model->zmin+model->zmax)/2.0);
+  glRotatef(angle,0.0,1.0,0.0);
+  glRotatef(angle2,1.0,0.0,0.0);
+  glTranslatef(-(model->xmin+model->xmax)/2.0,
+	       -(model->ymin+model->ymax)/2.0,
+	       -(model->zmin+model->zmax)/2.0);
+}
+
+
+void
+affiche_arete(int key, vf_edge *value, void* user_data)
+{
+  key=0;
+  user_data=NULL;
+  if(arete_appartient_a_list(value->ve1,value->ve2))
+    {
+      glLineWidth(4);
+      glColor4f(COUL_CHEMIN, 1.0f);   
+    }
+  else
+    {
+      glLineWidth(2);
+      glColor4f(COUL_ARETE, 1.0f);
+    }
+  glBegin(GL_LINES);
+  {
+    glVertex3f(model->ve[value->ve1].x,
+	       model->ve[value->ve1].y,
+	       model->ve[value->ve1].z);
+    glVertex3f(model->ve[value->ve2].x,
+	       model->ve[value->ve2].y,
+	       model->ve[value->ve2].z);
+  }
+  glEnd();
+}
+
+
+
+void
+display_triangle()
+{ 
+  vector3d X,Y,Z,temp;
+  
+  if(type_affichage==SOLID)
+    {
+      glColor4f(COUL_TRIANGLE,1.0f); 
+      glBegin(GL_TRIANGLES);
+      {
+        for(int i=0;i<model->nbface;i++)
+          {
+	    int ve1=model->fa[i].ve1;
+	    int ve2=model->fa[i].ve2;
+	    int ve3=model->fa[i].ve3;
+	
+	    glVertex3f(model->ve[ve1].x,
+		       model->ve[ve1].y,
+		       model->ve[ve1].z);
+	    glVertex3f(model->ve[ve2].x,
+		       model->ve[ve2].y,
+		       model->ve[ve2].z);
+	    glVertex3f(model->ve[ve3].x,
+		       model->ve[ve3].y,
+	               model->ve[ve3].z);
+          }
+      }
+      glEnd();
+    }
+
+  if(type_affichage==WIREFRAME || type_affichage==SOLID)	
+    hashtable_foreach(table,affiche_arete,NULL);
+  
+  for(int i=0;i<size_tabselectionne;i++)
+    {
+      glColor4f(COUL_TRIANGLE_DANS_SELEC,1.0f);
+      if(i!=index_tabselectionne)
+	{
+	  glTranslatef(model->ve[tabselectionne[i]].x,
+		       model->ve[tabselectionne[i]].y,
+		       model->ve[tabselectionne[i]].z);
+	  glutWireCube(longdiag3d/200.0);
+	  glTranslatef(-model->ve[tabselectionne[i]].x,
+		       -model->ve[tabselectionne[i]].y,
+		       -model->ve[tabselectionne[i]].z);
+	}
+    }
+
+  if(size_tabselectionne!=0)
+    {
+      glColor4f(COUL_TRIANGLE_SELEC,1.0f);
+      
+      glTranslatef(model->ve[selectionne].x,
+		   model->ve[selectionne].y,
+		   model->ve[selectionne].z);
+      glutWireCube(longdiag3d/100.0);
+      glTranslatef(-model->ve[selectionne].x,
+		   -model->ve[selectionne].y,
+		   -model->ve[selectionne].z);
+    }
+
+  if(vedeb!=-1)
+    {
+      glColor4f(COUL_SPHERE1,1.0f);
+      glTranslatef(model->ve[vedeb].x,
+		   model->ve[vedeb].y,
+		   model->ve[vedeb].z);
+      glutWireSphere(longdiag3d/200.0,10,10);
+      glTranslatef(-model->ve[vedeb].x,
+		   -model->ve[vedeb].y,
+		   -model->ve[vedeb].z);
+    }
+  if(vefin!=-1)
+    {
+      glColor4f(COUL_SPHERE2,1.0f);
+      glTranslatef(model->ve[vefin].x,
+		   model->ve[vefin].y,
+		   model->ve[vefin].z);
+      glutWireSphere(longdiag3d/200.0,10,10);
+      glTranslatef(-model->ve[vefin].x,
+		   -model->ve[vefin].y,
+		   -model->ve[vefin].z);
+    }
+
+  if(affiche_normale)
+    for(int i=0;i<model->nbvertex;i++)
+      {
+	int *listface=NULL,size_listface=0;
+	double data3_temp[3];
+	gsl_matrix *mat_identity,*mat_normale,*mat_normale_trans,*mat_normale_carre,*mat_i,*mat_sous,*mat_mul;
+	
+	mat_identity=gsl_matrix_calloc(3,3);
+	gsl_matrix_set_identity(mat_identity);
+	
+	
+	a2ri_vf_faces_next_vertex_with_hashtable(model,i,&listface,&size_listface,table);
+	vector3d_init(&Z,0,0,0);
+	for(int i=0;i<size_listface;i++)
+	  {
+	    temp=a2ri_vf_normal_face(model,listface[i]);
+	    Z.dx+=temp.dx;
+	    Z.dy+=temp.dy;
+	    Z.dz+=temp.dz;
+	  }
+	
+	vector3d_normalize(&Z);
+	
+	data3_temp[0]=Z.dx;
+	data3_temp[1]=Z.dy;
+	data3_temp[2]=Z.dz;
+	
+      
+	mat_normale=matrix_init(data3_temp,3,1);
+	mat_normale_trans=matrix_transpose(mat_normale);
+	mat_normale_carre=matrix_mul(mat_normale,mat_normale_trans);
+	
+	
+	if((Z.dx==1 || Z.dx==-1) && Z.dy==0 && Z.dz==0)
+	  {
+	    //cas particulier
+	    data3_temp[0]=0;
+	    data3_temp[1]=1;
+	    data3_temp[2]=0;
+	  }
+	else
+	  {
+	    data3_temp[0]=1;
+	    data3_temp[1]=0;
+	    data3_temp[2]=0;
+	  }
+	
+	mat_i=matrix_init(data3_temp,3,1);
+	
+	mat_sous=matrix_sub(mat_identity,mat_normale_carre);
+	
+	mat_mul=matrix_mul(mat_sous,mat_i);
+	
+	X.dx=gsl_matrix_get(mat_mul,0,0);
+	X.dy=gsl_matrix_get(mat_mul,1,0);
+	X.dz=gsl_matrix_get(mat_mul,2,0);
+	
+	Y=vector3d_vectorialproduct(&X,&Z);
+	
+	vector3d_normalize(&X);
+	vector3d_normalize(&Y);
+	
+	gsl_matrix_free(mat_mul);
+	gsl_matrix_free(mat_sous);
+	gsl_matrix_free(mat_normale_carre);
+	gsl_matrix_free(mat_normale);
+	gsl_matrix_free(mat_normale_trans);
+	gsl_matrix_free(mat_identity);
+	gsl_matrix_free(mat_i);
+	
+	glColor4f(0.0,0.0,1.0,1.0f);
+	glBegin(GL_LINES);
+	{
+	  glVertex3f(model->ve[i].x,
+		     model->ve[i].y,
+		     model->ve[i].z);
+	  glVertex3f(model->ve[i].x+(X.dx*longdiag3d/75.0),
+		     model->ve[i].y+(X.dy*longdiag3d/75.0),
+		     model->ve[i].z+(X.dz*longdiag3d/75.0));
+	  glVertex3f(model->ve[i].x,
+		     model->ve[i].y,
+		     model->ve[i].z);
+	  glVertex3f(model->ve[i].x+(Y.dx*longdiag3d/75.0),
+		     model->ve[i].y+(Y.dy*longdiag3d/75.0),
+		     model->ve[i].z+(Y.dz*longdiag3d/75.0));
+	  glVertex3f(model->ve[i].x,
+		     model->ve[i].y,
+		     model->ve[i].z);
+	  glVertex3f(model->ve[i].x+(Z.dx*longdiag3d/75.0),
+		     model->ve[i].y+(Z.dy*longdiag3d/75.0),
+		     model->ve[i].z+(Z.dz*longdiag3d/75.0));
+	}
+	glEnd();
+	
+	free(listface);
+	
+      }
+  
+  glFlush();
+}
+
+void
+display_masque()
+{  
+  glColor4f(COUL_TRIANGLE,1.0f);
+  for(int i=0;i<model->nbvertex;i++)
+    {
+      glLoadName (i);
+      glBegin(GL_TRIANGLES);
+      {
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y+moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z+moy_arete/20.0);
+	glVertex3f(model->ve[i].x+moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+	glVertex3f(model->ve[i].x-moy_arete/20.0,
+		   model->ve[i].y-moy_arete/20.0,
+		   model->ve[i].z-moy_arete/20.0);
+      }
+      glEnd();
+    }
+}
+
+
+void
+traite_tabselectionne()
+{
+  if(size_tabselectionne==0)
+    return;
+
+  if(size_tabselectionne==1)
+    {
+      selectionne=tabselectionne[0];
+      index_tabselectionne=0;
+      return;
+    }
+
+  index_tabselectionne=(index_tabselectionne+1)%size_tabselectionne;
+  selectionne=tabselectionne[index_tabselectionne];
+  printf("element %d / %d selectionne\n",index_tabselectionne+1,size_tabselectionne);
+}
+
+void processHits (GLuint hits, GLuint buffer[])
+{
+  GLuint names, *ptr;
+
+  free(tabselectionne);
+  tabselectionne=NULL;
+  size_tabselectionne=0;
+  selectionne=-1;
+
+  printf("\n\nnombre d'elements sélectionnés = %d\n", hits);
+  ptr=(GLuint*)buffer;
+  for(unsigned int i=0;i<hits;i++)
+    {
+      names=*ptr;
+      ptr+=3;
+      for (unsigned int j=0;j<names;j++)
+	list_int_add(&tabselectionne,&size_tabselectionne,*(ptr++),WITH_REDUNDANCE);
+    }
+  
+  index_tabselectionne=-1;
+  traite_tabselectionne();
+}
+
+void mouse(int button, int state, int x, int y)
+{
+  GLuint selectBuf[BUFSIZE];
+  GLint hits;
+  GLint viewport[4];
+
+
+  if(button==GLUT_WHEEL_MOUSE_UP)
+    {
+      tz*=1.1;
+      glutPostRedisplay();
+      return;
+    }
+
+  if(button==GLUT_WHEEL_MOUSE_DOWN)
+    {
+      tz/=1.1;
+      glutPostRedisplay();
+      return ;
+    } 
+
+  if(button==GLUT_CENTER_BUTTON && state==GLUT_DOWN)
+    {
+      
+      glGetIntegerv (GL_VIEWPORT, viewport);
+      
+      glSelectBuffer (BUFSIZE, selectBuf);
+      (void) glRenderMode (GL_SELECT);
+            
+      glInitNames();
+      glPushName(0);
+      
+      glMatrixMode (GL_PROJECTION);
+      glLoadIdentity ();
+      gluPickMatrix ((GLdouble) x, (GLdouble) (viewport[3] - y), 5.0, 5.0, viewport);
+
+
+      if(ratioecran>ratiomodel)
+	glOrtho(model->xmin-(((ratioecran*hauteur)-largeur)/2.0)-(longdiag2d/20.0),model->xmax+(((ratioecran*hauteur)-largeur)/2.0)+(longdiag2d/20.0),
+		model->ymin-(longdiag2d/20.0),model->ymax+(longdiag2d/20.0),
+		model->zmin-longdiag3d,model->zmax+longdiag3d);
+      else
+	glOrtho(model->xmin-(longdiag2d/20.0),model->xmax+(longdiag2d/20.0),
+		model->ymin-(((largeur/ratioecran)-hauteur)/2.0)-(longdiag2d/20.0),model->ymax+(((largeur/ratioecran)-hauteur)/2.0)+(longdiag2d/20.0),
+		model->zmin-longdiag3d,model->zmax+longdiag3d);
+      
+      
+      display_masque();
+      
+      glMatrixMode (GL_PROJECTION);
+      glLoadIdentity ();
+           
+
+      if(ratioecran>ratiomodel)
+    glOrtho(model->xmin-(((ratioecran*hauteur)-largeur)/2.0)-(longdiag2d/20.0),model->xmax+(((ratioecran*hauteur)-largeur)/2.0)+(longdiag2d/20.0),
+	    model->ymin-(longdiag2d/20.0),model->ymax+(longdiag2d/20.0),
+	    model->zmin-longdiag3d,model->zmax+longdiag3d);
+  else
+    glOrtho(model->xmin-(longdiag2d/20.0),model->xmax+(longdiag2d/20.0),
+	    model->ymin-(((largeur/ratioecran)-hauteur)/2.0)-(longdiag2d/20.0),model->ymax+(((largeur/ratioecran)-hauteur)/2.0)+(longdiag2d/20.0),
+	    model->zmin-longdiag3d,model->zmax+longdiag3d);
+      
+
+      glFlush ();
+      
+      hits = glRenderMode (GL_RENDER);
+      processHits (hits, selectBuf);
+      glutPostRedisplay();
+    }
+
+  if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
+    {
+      rotation=1;
+      if(mp)
+	mp2=1;
+      initx=x;
+      inity=y;
+    }
+
+  if(button==GLUT_LEFT_BUTTON && state==GLUT_UP)
+    {
+      mp2=0;
+      rotation=0;
+    }
+
+  if(button==GLUT_RIGHT_BUTTON && state==GLUT_DOWN)
+    {
+      deplacement=1;
+      initx=x;
+      inity=y;
+    }
+
+  if(button==GLUT_RIGHT_BUTTON && state==GLUT_UP)
+    deplacement=0;
+      
+} 
+
+void motion(int x, int y)
+{
+  if(rotation)
+    {
+      angle+=(x-initx)*0.5;
+      angle2+=(y-inity)*0.5;
+      initx=x;
+      inity=y;
+      
+      //pour la ptite blague
+      if(mp2)
+	{
+	  angle+=rand_int(-2,2);
+	  angle2+=rand_int(-1,1);
+	}
+      
+      glutPostRedisplay();
+    }
+
+  if(deplacement)
+    {
+      tx+=(x-initx)*0.001*longdiag2d/tz;
+      ty-=(y-inity)*0.001*longdiag2d/tz;
+      initx=x;
+      inity=y;
+      glutPostRedisplay();
+    }
+}
+
+void display()
+{
+  glClearColor(255.0,255.0,255.0,0.0);
+  glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+  camera_positionner_tourner();
+  if(masque_triangle==0)
+    display_triangle();
+  else
+    display_masque();
+  glutSwapBuffers();
+}
+
+void reshape(int w, int h)
+{
+  ratiomodel=largeur/hauteur;
+  ratioecran=(w*1.0)/(h*1.0);
+  
+  glViewport(0, 0, w, h);
+
+  glMatrixMode(GL_PROJECTION);
+  glLoadIdentity();
+  
+  if(ratioecran>ratiomodel)
+    glOrtho(model->xmin-(((ratioecran*hauteur)-largeur)/2.0)-(longdiag2d/20.0),model->xmax+(((ratioecran*hauteur)-largeur)/2.0)+(longdiag2d/20.0),
+	    model->ymin-(longdiag2d/20.0),model->ymax+(longdiag2d/20.0),
+	    model->zmin-longdiag3d,model->zmax+longdiag3d);
+  else
+    glOrtho(model->xmin-(longdiag2d/20.0),model->xmax+(longdiag2d/20.0),
+	    model->ymin-(((largeur/ratioecran)-hauteur)/2.0)-(longdiag2d/20.0),model->ymax+(((largeur/ratioecran)-hauteur)/2.0)+(longdiag2d/20.0),
+	    model->zmin-longdiag3d,model->zmax+longdiag3d);
+  
+  glMatrixMode(GL_MODELVIEW);
+  glLoadIdentity();
+  camera_positionner_tourner();
+  glutPostRedisplay();
+}
+
+void 
+exitFunc ()
+{
+  hashtable_free(table);
+  free(table);
+  a2ri_vf_free(model);
+  exit(EXIT_SUCCESS);
+}
+
+
+void keyboard(unsigned char key, int x, int y)
+{
+  point3d p1,p2;
+  int index1,index2,*temp=NULL,sizetemp=0,echang;
+  double longgeo,longgeo2,betamoy,betasd,thetamoy,thetasd,kappamoy,kappasd;
+  double *gauss=NULL,*levi=NULL,*list_mean=NULL;
+  //int size_gauss=0,size_levi=0,size_list_mean=0;
+  vector3d *mean=NULL;
+  //int size_mean=0;
+  double H,K,*listk=NULL,*listh=NULL;
+  int size_listk=0,size_listh=0;
+
+  int nbsomm;
+  time_t dep,fin;
+
+  ptf_func_hashtable func[1];
+  func[0]=a2ri_vf_update_length_edge;
+  
+  x=0;
+  y=0;
+  switch (key)
+    {
+    case 'w':
+      type_affichage=(type_affichage+1)%(SOLID+1);
+      break;
+    case 'b':
+    case 'B':
+      if(vedeb!=-1)
+	{
+	  a2ri_vf_garimella(model,vedeb,&H,&K);
+	  printf("H : %g - K : %g\n",H,K);
+	  vefin=-1;
+	}
+      break;
+    case 'v':
+    case 'V':
+      for(int i=0;i<model->nbvertex;i++)
+	{
+	  a2ri_vf_garimella(model,i,&H,&K);
+	  list_double_add(&listk,&size_listk,K,WITH_REDUNDANCE);
+	  list_double_add(&listh,&size_listh,H,WITH_REDUNDANCE);
+	}
+      printf("H : moyenne : %g - SD : %g\n",list_double_average(listh,size_listh),sqrt(list_double_variance(listh,size_listh)));
+      printf("K : moyenne : %g - SD : %g\n",list_double_average(listk,size_listk),sqrt(list_double_variance(listk,size_listk)));
+      vefin=-1;
+      break;
+    case 'n':
+    case 'N':
+      affiche_normale=(affiche_normale+1)%2;
+      break;
+    case 'a':
+    case 'A':
+      mp=(mp+1)%2;
+      if(mp==0)
+	mp2=0;
+      break;
+    case 'r':
+    case 'R':
+      vedeb=-1;
+      vefin=-1;
+      selectionne=-1;
+      free(tabselectionne);
+      tabselectionne=0;
+      size_tabselectionne=0;
+      free(list);
+      list=NULL;
+      size=0;
+      break;
+    case 13:
+      if(selectionne!=-1)
+	{
+	  if(vedeb==-1)
+	    vedeb=selectionne;
+	  else
+	    {
+	      if(vefin==-1)
+		vefin=selectionne;
+	    }
+	}
+      selectionne=-1;
+      free(tabselectionne);
+      tabselectionne=0;
+      size_tabselectionne=0;
+      break;
+      //case 'm':
+      //case 'M':
+      //masque_triangle=(masque_triangle+1)%2;
+      //break;
+    case 9:
+      //touche TAB
+      traite_tabselectionne();
+      break;
+    case 'l':
+    case 'L':
+      //LONGUEUR LINEAIRE
+      point3d_init(&p1,model->ve[vedeb].x,model->ve[vedeb].y,model->ve[vedeb].z);
+      point3d_init(&p2,model->ve[vefin].x,model->ve[vefin].y,model->ve[vefin].z);
+      printf("longueur euclidienne %d -> %d : %6.3lf unités\n",vedeb,vefin,point3d_length(&p1,&p2));
+      break;
+
+    case 'c':
+    case 'C':
+      //LONGUEUR CURVILINEAIRE
+      free(list);
+      list=NULL;
+      size=0;
+      a2ri_vf_search_hole_contains(model,vedeb,vefin,&temp,&sizetemp);
+      if(temp==NULL)
+	{
+	  printf("pas de chemin curvilinéaire disponible : verifier que les deux sommets soient bien sur un meme bord\n");
+	  break;
+	}
+      index1=list_int_contains(temp,sizetemp,vedeb);
+      index2=list_int_contains(temp,sizetemp,vefin);
+      if(index1>index2)
+	{
+	  echang=index1;
+	  index1=index2;
+	  index2=echang;
+	}
+      longgeo=0;
+      longgeo2=0;
+      for(int i=index1;i<index2;i++)
+	{
+	  point3d_init(&p1,model->ve[temp[i]].x,model->ve[temp[i]].y,model->ve[temp[i]].z);
+	  point3d_init(&p2,model->ve[temp[i+1]].x,model->ve[temp[i+1]].y,model->ve[temp[i+1]].z);
+	  longgeo+=point3d_length(&p1,&p2);
+	}
+      for(int i=index2;i<index1+sizetemp;i++)
+	{
+	  point3d_init(&p1,model->ve[temp[i%sizetemp]].x,model->ve[temp[i%sizetemp]].y,model->ve[temp[i%sizetemp]].z);
+	  point3d_init(&p2,model->ve[temp[(i+1)%sizetemp]].x,model->ve[temp[(i+1)%sizetemp]].y,model->ve[temp[(i+1)%sizetemp]].z);
+	  longgeo2+=point3d_length(&p1,&p2);
+	}
+      if(longgeo<longgeo2)
+	for(int i=index1;i<=index2;i++)
+	  list_int_add(&list,&size,temp[i],WITH_REDUNDANCE);
+      else
+	{
+	  for(int i=index2;i<=index1+sizetemp;i++)
+	    list_int_add(&list,&size,temp[i%sizetemp],WITH_REDUNDANCE);
+	  longgeo=longgeo2;
+	}
+      printf("distance curvilinéaire %d -> %d : %6.3lf unités\n",vedeb,vefin,longgeo);
+      break;
+
+
+
+
+
+
+    case 't':
+    case 'T':
+      printf("*********************************\n");
+      printf("Subdivision homogene/reguliere 1:6\n");
+      printf("nombre de sommets depart: %d\n",model->nbvertex);
+      dep=clock();
+      a2ri_vf_6_subdivision(model,1);
+      fin=clock();
+      printf("nombre de sommets fin: %d\n",model->nbvertex);
+      printf("temps d'execution pour la subdivision reguliere 1:6 : %lf\n",((fin-dep)*1.0)/(CLOCKS_PER_SEC*1.0));
+      printf("*********************************\n\n\n");
+      vedeb=-1;
+      vefin=-1;
+      selectionne=-1;
+      free(tabselectionne);
+      tabselectionne=0;
+      size_tabselectionne=0;
+     
+      hashtable_free(table);
+      free(table);
+      
+      table=a2ri_vf_construction_edge_table(model,func,1);
+
+      break;
+      break;
+    case 'o':
+    case 'O':
+      printf("*********************************\n");
+      printf("méthode de Dijkstra\n");
+      printf("nombre de sommets depart: %d\n",nbsomm=model->nbvertex);
+      dep=clock();
+      free(list);
+      list=NULL;
+      size=0;
+      p1.x=model->ve[vedeb].x;
+      p1.y=model->ve[vedeb].y;
+      p1.z=model->ve[vedeb].z;
+      p2.x=model->ve[vefin].x;
+      p2.y=model->ve[vefin].y;
+      p2.z=model->ve[vefin].z;
+      printf("\nsommet de depart : %d -> sommet de fin : %d\n",vedeb,vefin);
+      printf("longueur lineaire : %6.3lf\n",point3d_length(&p1,&p2));
+      longgeo=a2ri_vf_dijkstra(model,vedeb,vefin,&list,&size);   
+      printf("longueur geodesique : %6.3lf\n",longgeo);
+      planarite(&betamoy,&betasd);
+      printf("beta : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",betamoy,betasd);
+      tri_gauche_droite();
+      planarite_straightest(&thetamoy,&thetasd,&kappamoy,&kappasd);
+      printf("difference droite gauche : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",thetamoy,thetasd);
+      printf("kappa : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",kappamoy,kappasd);
+      fin=clock();
+      printf("temps d'execution: %lf\n",((fin-dep)*1.0)/(CLOCKS_PER_SEC*1.0));
+      
+
+      printf("*********************************\n\n\n");
+      break;
+
+    case 'y':
+    case 'Y':
+      printf("*********************************\n");
+      printf("méthode approche_avant\n");
+      printf("nombre de sommets depart: %d\n",nbsomm=model->nbvertex);
+      dep=clock();
+      free(list);
+      list=NULL;
+      size=0;
+      p1.x=model->ve[vedeb].x;
+      p1.y=model->ve[vedeb].y;
+      p1.z=model->ve[vedeb].z;
+      p2.x=model->ve[vefin].x;
+      p2.y=model->ve[vefin].y;
+      p2.z=model->ve[vefin].z;
+      printf("\nsommet de depart : %d -> sommet de fin : %d\n",vedeb,vefin);
+      printf("longueur lineaire : %6.3lf\n",point3d_length(&p1,&p2));
+      longgeo=a2ri_vf_approche(model,vedeb,vefin,&list,&size);   
+      printf("longueur geodesique : %6.3lf\n",longgeo);
+      planarite(&betamoy,&betasd);
+      printf("beta : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",betamoy,betasd);
+      tri_gauche_droite();
+      planarite_straightest(&thetamoy,&thetasd,&kappamoy,&kappasd);
+      printf("difference droite gauche : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",thetamoy,thetasd);
+      printf("kappa : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",kappamoy,kappasd);
+      fin=clock();
+      printf("temps d'execution: %lf\n",((fin-dep)*1.0)/(CLOCKS_PER_SEC*1.0));
+      hashtable_free(table);
+      free(table);
+      
+      table=a2ri_vf_construction_edge_table(model,func,1);
+            
+      printf("*********************************\n\n\n");
+      break;
+
+    case 'u':
+    case 'U':
+      printf("méthode approche_arriere\n");
+      printf("nombre de sommets depart: %d\n",nbsomm=model->nbvertex);
+      dep=clock();
+      free(list);
+      list=NULL;
+      size=0;
+      p1.x=model->ve[vedeb].x;
+      p1.y=model->ve[vedeb].y;
+      p1.z=model->ve[vedeb].z;
+      p2.x=model->ve[vefin].x;
+      p2.y=model->ve[vefin].y;
+      p2.z=model->ve[vefin].z;
+      printf("\nsommet de depart : %d -> sommet de fin : %d\n",vedeb,vefin);
+      printf("longueur lineaire : %6.3lf\n",point3d_length(&p1,&p2));
+      longgeo=a2ri_vf_approche(model,vefin,vedeb,&list,&size);   
+      printf("longueur geodesique : %6.3lf\n",longgeo);
+      planarite(&betamoy,&betasd);
+      printf("beta : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",betamoy,betasd);
+      tri_gauche_droite();
+      planarite_straightest(&thetamoy,&thetasd,&kappamoy,&kappasd);
+      printf("difference droite gauche : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",thetamoy,thetasd);
+      printf("kappa : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",kappamoy,kappasd);
+      fin=clock();
+      printf("temps d'execution: %lf\n",((fin-dep)*1.0)/(CLOCKS_PER_SEC*1.0));
+      hashtable_free(table);
+      free(table);
+      
+      table=a2ri_vf_construction_edge_table(model,func,1);
+            
+      printf("*********************************\n\n\n");
+      break;
+
+
+    case 'i':
+    case 'I':
+      printf("*********************************\n");
+      printf("méthode de approche + plan moyen\n");
+      printf("nombre de sommets depart: %d\n",nbsomm=model->nbvertex);
+      dep=clock();
+      free(list);
+      list=NULL;
+      size=0;
+      p1.x=model->ve[vedeb].x;
+      p1.y=model->ve[vedeb].y;
+      p1.z=model->ve[vedeb].z;
+      p2.x=model->ve[vefin].x;
+      p2.y=model->ve[vefin].y;
+      p2.z=model->ve[vefin].z;
+      printf("\nsommet de depart : %d -> sommet de fin : %d\n",vedeb,vefin);
+      printf("longueur lineaire : %6.3lf\n",point3d_length(&p1,&p2));
+      a2ri_vf_geodesic_path_approche_plan_moyen(model,vedeb,vefin,&list,&size,&longgeo,GEODESIC_DENSIFICATION_NB_SUBDIV);
+      printf("longueur geodesique : %6.3lf\n",longgeo);
+      planarite(&betamoy,&betasd);
+      printf("beta : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",betamoy,betasd);   
+      tri_gauche_droite(); 
+      planarite_straightest(&thetamoy,&thetasd,&kappamoy,&kappasd);
+      printf("difference droite gauche : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",thetamoy,thetasd);
+      printf("kappa : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",kappamoy,kappasd);
+      fin=clock();
+      printf("nombre de sommets fin: %d\n",model->nbvertex);  
+      printf("temps d'execution: %lf\n",((fin-dep)*1.0)/(CLOCKS_PER_SEC*1.0));
+      hashtable_free(table);
+      free(table);
+      
+      table=a2ri_vf_construction_edge_table(model,func,1);
+      
+      
+      printf("*********************************\n\n\n");
+      break;
+    case 'p':
+    case 'P':
+      printf("*********************************\n");
+      printf("méthode de Dijkstra + plan moyen\n");
+      printf("nombre de sommets depart: %d\n",nbsomm=model->nbvertex);
+      dep=clock();
+      free(list);
+      list=NULL;
+      size=0;
+      p1.x=model->ve[vedeb].x;
+      p1.y=model->ve[vedeb].y;
+      p1.z=model->ve[vedeb].z;
+      p2.x=model->ve[vefin].x;
+      p2.y=model->ve[vefin].y;
+      p2.z=model->ve[vefin].z;
+      printf("\nsommet de depart : %d -> sommet de fin : %d\n",vedeb,vefin);
+      printf("longueur lineaire : %6.3lf\n",point3d_length(&p1,&p2));
+      a2ri_vf_geodesic_path_dijkstra_plan_moyen(model,vedeb,vefin,&list,&size,&longgeo,GEODESIC_DENSIFICATION_NB_SUBDIV);
+      printf("longueur geodesique : %6.3lf\n",longgeo);
+      planarite(&betamoy,&betasd);
+      printf("beta : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",betamoy,betasd);   
+      tri_gauche_droite(); 
+      planarite_straightest(&thetamoy,&thetasd,&kappamoy,&kappasd);
+      printf("difference droite gauche : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",thetamoy,thetasd);
+      printf("kappa : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",kappamoy,kappasd);
+      fin=clock();
+      printf("nombre de sommets fin: %d\n",model->nbvertex);  
+      printf("temps d'execution: %lf\n",((fin-dep)*1.0)/(CLOCKS_PER_SEC*1.0));
+      hashtable_free(table);
+      free(table);
+      
+      table=a2ri_vf_construction_edge_table(model,func,1);
+
+      printf("*********************************\n\n\n");
+      break;
+    case 'k':
+    case 'K':
+      printf("*********************************\n");
+      printf("méthode de approche + plan minmax\n");
+      printf("nombre de sommets depart: %d\n",nbsomm=model->nbvertex);
+      dep=clock();
+      free(list);
+      list=NULL;
+      size=0;
+      p1.x=model->ve[vedeb].x;
+      p1.y=model->ve[vedeb].y;
+      p1.z=model->ve[vedeb].z;
+      p2.x=model->ve[vefin].x;
+      p2.y=model->ve[vefin].y;
+      p2.z=model->ve[vefin].z;
+      printf("\nsommet de depart : %d -> sommet de fin : %d\n",vedeb,vefin);
+      printf("longueur lineaire : %6.3lf\n",point3d_length(&p1,&p2));
+      a2ri_vf_geodesic_path_approche_plan_minmax(model,vedeb,vefin,&list,&size,&longgeo,GEODESIC_DENSIFICATION_NB_SUBDIV);
+      printf("longueur geodesique : %6.3lf\n",longgeo);
+      planarite(&betamoy,&betasd);
+      printf("beta : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",betamoy,betasd);   
+      tri_gauche_droite(); 
+      planarite_straightest(&thetamoy,&thetasd,&kappamoy,&kappasd);
+      printf("difference droite gauche : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",thetamoy,thetasd);
+      printf("kappa : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",kappamoy,kappasd);
+      fin=clock();
+      printf("nombre de sommets fin: %d\n",model->nbvertex);  
+      printf("temps d'execution: %lf\n",((fin-dep)*1.0)/(CLOCKS_PER_SEC*1.0));
+      hashtable_free(table);
+      free(table);
+      
+      table=a2ri_vf_construction_edge_table(model,func,1);
+
+
+
+
+
+      printf("*********************************\n\n\n");
+      break;
+    case 'm':
+    case 'M':
+      printf("*********************************\n");
+      printf("méthode de Dijkstra + plan minamx\n");
+      printf("nombre de sommets depart: %d\n",nbsomm=model->nbvertex);
+      dep=clock();
+      free(list);
+      list=NULL;
+      size=0;
+      p1.x=model->ve[vedeb].x;
+      p1.y=model->ve[vedeb].y;
+      p1.z=model->ve[vedeb].z;
+      p2.x=model->ve[vefin].x;
+      p2.y=model->ve[vefin].y;
+      p2.z=model->ve[vefin].z;
+      printf("\nsommet de depart : %d -> sommet de fin : %d\n",vedeb,vefin);
+      printf("longueur lineaire : %6.3lf\n",point3d_length(&p1,&p2));
+      a2ri_vf_geodesic_path_dijkstra_plan_minmax(model,vedeb,vefin,&list,&size,&longgeo,GEODESIC_DENSIFICATION_NB_SUBDIV);
+      printf("longueur geodesique : %6.3lf\n",longgeo);
+      planarite(&betamoy,&betasd);
+      printf("beta : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",betamoy,betasd);   
+      tri_gauche_droite(); 
+      planarite_straightest(&thetamoy,&thetasd,&kappamoy,&kappasd);
+      printf("difference droite gauche : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",thetamoy,thetasd);
+      printf("kappa : moyenne --> %6.3lf  --  ecart type : %6.3lf\n",kappamoy,kappasd);
+      fin=clock();
+      printf("nombre de sommets fin: %d\n",model->nbvertex);  
+      printf("temps d'execution: %lf\n",((fin-dep)*1.0)/(CLOCKS_PER_SEC*1.0));
+      hashtable_free(table);
+      free(table);
+      
+      table=a2ri_vf_construction_edge_table(model,func,1);
+
+
+
+
+      printf("*********************************\n\n\n");
+      break;
+
+
+    case 27:
+    case 'q':
+    case 'Q':
+      exitFunc();
+      break;
+    }
+  
+  glutPostRedisplay();
+  free(levi);
+  free(mean);
+  free(list_mean);
+  free(gauss);
+}
+
+
+void 
+idleFunc ()
+{ 
+  glutPostRedisplay ();
+}
+
+void
+somme_longueur(int key, vf_edge *value, void* user_data)
+{
+  double *somme=user_data;
+  key=0;
+  *somme=(*somme)+value->att_double;
+}
+
+
+int go(int argc, char** argv,vf_model *b, int ve1, int ve2)
+{
+  point3d ptmin,ptmax;
+
+  point3d infgauche,supgauche,infdroit;
+
+  model=b;
+
+  a2ri_vf_center(model);
+
+  ptf_func_hashtable func[1];
+  func[0]=a2ri_vf_update_length_edge;
+  table=a2ri_vf_construction_edge_table(model,func,1);
+
+
+  moy_arete=0;
+
+  hashtable_foreach(table,somme_longueur,&moy_arete);
+
+  moy_arete=moy_arete/(hashtable_size(table)*1.0);
+
+  vedeb=ve1;
+  vefin=ve2;
+
+  tx=0;ty=0;tz=1;
+  tabselectionne=NULL;
+  size_tabselectionne=0;
+  selectionne=-1;
+  masque_triangle=0;
+  list=NULL;
+  size=0;
+
+  mp=0;
+  mp2=0;
+  srand(time(NULL));
+
+  ptmin.x=model->xmin;
+  ptmin.y=model->ymin;
+  ptmin.z=model->zmin;
+  ptmax.x=model->xmax;
+  ptmax.y=model->ymax;
+  ptmax.z=model->zmax;
+  longdiag3d=point3d_length(&ptmin,&ptmax);
+
+  point3d_init(&infgauche,model->xmin,model->ymin,0);
+  point3d_init(&supgauche,model->xmin,model->ymax,0);
+  point3d_init(&infdroit,model->xmax,model->ymin,0);
+
+  largeur=point3d_length(&infgauche,&infdroit);
+  hauteur=point3d_length(&infgauche,&supgauche);
+  longdiag2d=point3d_length(&supgauche,&infdroit);
+  affiche_normale=0;
+  type_affichage=SOLID;
+
+  glutInit(&argc, argv);
+  glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB| GLUT_DEPTH);
+  glutInitWindowSize (WIDTH, HEIGHT);
+  glutInitWindowPosition (0, 0);
+  glutCreateWindow (argv[1]);
+  nom_modele=argv[1];
+  glEnable(GL_DEPTH_TEST);
+  glEnable(GL_CULL_FACE);
+  glCullFace(GL_BACK);
+
+  glutReshapeFunc (reshape);
+  glutDisplayFunc(display); 
+  glutMouseFunc (mouse);
+  glutMotionFunc(motion);
+  glutKeyboardFunc (keyboard);
+  glutIdleFunc (idleFunc);
+  glutMainLoop();
+  return 0; 
+}
+

+ 44 - 0
examples/geodesique/opengl.h

@@ -0,0 +1,44 @@
+#ifndef OPENGL__H
+#define OPENGL__H
+
+#include <GL/glut.h>
+#include <GL/gl.h>
+#include <GL/glu.h>
+#include <stdlib.h>
+#include <a2ri/io.h>
+#include <a2ri/point.h>
+#include <a2ri/hashtable.h>
+#include <a2ri/vector.h>
+#include <a2ri/topology.h>
+#include <a2ri/quality.h>
+#include <a2ri/graph.h>
+#include <a2ri/subdivision.h>
+#include <a2ri/geodesique.h>
+
+#define WIDTH 800
+#define HEIGHT 600
+
+#define BUFSIZE 512
+
+#define  GLUT_WHEEL_MOUSE_UP                0x0003
+#define  GLUT_WHEEL_MOUSE_DOWN              0x0004
+#define  GLUT_CENTER_BUTTON                 0x0001
+
+#define COUL_TRIANGLE 0.9,0.9,0.9
+#define COUL_TRIANGLE_SELEC 0.9,0.1,0.9
+#define COUL_TRIANGLE_DANS_SELEC 0.8,0.8,0.0
+#define COUL_SPHERE1 1.0,0.0,0.0
+#define COUL_SPHERE2 0.0,0.0,1.0
+#define COUL_ARETE 0.0,0.0,0.0
+#define COUL_CHEMIN 0.0,1.0,0.0
+
+double angle,angle2;
+double tx, ty, tz;
+int initx,inity,rotation,deplacement;
+int masque_triangle;
+int vedeb,vefin;
+double ratioecran;
+
+int go(int argc, char **argv, vf_model *b, int ve1, int ve2);
+
+#endif

+ 25 - 0
examples/graph/Makefile

@@ -0,0 +1,25 @@
+GCC= gcc
+CFLAGS = -W -Wall -std=c99 -pipe -O2 -Wall -W -D_REENTRANT
+INCLUDE = -I.
+LIBS = -lgsl -lgslcblas -lm -lglut -lGL -lGLU -la2ri
+OBJECTS = opengl.o main.o
+
+TARGET = graph
+
+all : $(TARGET)
+
+$(TARGET) : $(OBJECTS)
+	$(GCC) $(CFLAGS) $(INCLUDE) $(OBJECTS) -o $(TARGET) $(LIBS)
+
+%.o : %.c
+	$(GCC) $(CFLAGS)  $(INCLUDE) -c $< -o $@
+
+clean : 
+	rm -f *~ *.o $(TARGET)
+
+cleanall : clean
+	rm -rf ../../bin/$(TARGET)
+
+install : $(TARGET)
+	mkdir ../../bin/$(TARGET)
+	cp $(TARGET) ../../bin/$(TARGET)

+ 40 - 0
examples/graph/main.c

@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <a2ri/io.h>
+#include <a2ri/graph.h>
+#include "opengl.h"
+
+
+
+int main(int argc, char *argv[])
+{
+  vef_model m;
+
+  if(argc!=2)
+    {
+      printf("usage : %s <modele>\n",argv[0]);
+      return 1;
+    }
+
+
+  a2ri_vef_init(&m);
+
+  if(!a2ri_vef_open_file(argv[1],&m))
+  return 0;
+
+
+  printf("touche a : calculer et afficher le Nearest Neighbour Graph\n");
+  printf("touche z : calculer et afficher le graph couvrant minimal\n");
+  printf("touche e : calculer et afficher le Gabriel graph\n");
+  printf("touche r : calculer et afficher le Gabriel graph etendu\n");
+  printf("touche s : afficher le modele de depart\n");
+  printf("touche q/Q/esc : quitter\n");
+  go(argc,argv,&m);
+
+  
+    
+  return 0;
+}
+
+

+ 369 - 0
examples/graph/opengl.c

@@ -0,0 +1,369 @@
+#include "opengl.h"
+#include <a2ri/triangulation.h>
+#include <stdio.h>
+#include <time.h>
+
+vef_model *tomove;
+vef_model *todisplay;
+vef_model *GG,*NNG,*EMST,*EGG;
+vef_model *tetraedrisation;
+int zoom=0;
+float rinc;
+float tinc;
+int initx,inity,rotation,deplacement;
+double angle,angle2,longdiag;
+
+
+void 
+init (int argc, char **argv)
+{
+  int i, j;
+
+  glutInit (&argc, argv);
+  glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
+  glutInitWindowSize (WIDTH, HEIGHT);
+  glutInitWindowPosition (100, 25);
+  glutCreateWindow ("Construction de graphes");
+
+  glClearColor (0.0, 0.0, 0.0, 0.0);
+  glEnable(GL_DEPTH_TEST); 
+  glViewport (0, 0, (GLsizei)WIDTH, (GLsizei)HEIGHT);
+
+  rx = ry = rz = tx = ty = tz = 0;
+  for (i=0; i < NB_VAL; i++)
+    for (j=0; j < 6; j++)
+      hist [i][j] = 0;
+}
+
+
+
+void
+display_triangles()
+{
+  point3d p1,p2;
+  point3d_init(&p1,todisplay->xmin,todisplay->ymin,todisplay->zmin);
+  point3d_init(&p2,todisplay->xmax,todisplay->ymax,todisplay->zmax);
+  double longdiag=point3d_length(&p1,&p2);
+  
+  if(todisplay->nbface>0)
+    for(int i=0;i<todisplay->nbface;i++)
+      {
+	int ve1,ve2,ve3;
+	vef_face_get_vertices(&(todisplay->fa[i]),todisplay->ed,&ve1,&ve2,&ve3);
+	
+	glBegin(GL_POLYGON);
+	
+	glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
+	
+	glVertex3f(todisplay->ve[ve1].x,
+		   todisplay->ve[ve1].y,
+		   todisplay->ve[ve1].z);
+	glVertex3f(todisplay->ve[ve2].x,
+		   todisplay->ve[ve2].y,
+		   todisplay->ve[ve2].z);
+	glVertex3f(todisplay->ve[ve3].x,
+		   todisplay->ve[ve3].y,
+		   todisplay->ve[ve3].z);
+	glEnd();
+	glLineWidth(2);
+	glBegin(GL_LINES);
+	glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
+	glVertex3f(todisplay->ve[ve1].x,
+		   todisplay->ve[ve1].y,
+		   todisplay->ve[ve1].z);
+	glVertex3f(todisplay->ve[ve2].x,
+		   todisplay->ve[ve2].y,
+		   todisplay->ve[ve2].z);
+	glVertex3f(todisplay->ve[ve2].x,
+		   todisplay->ve[ve2].y,
+		   todisplay->ve[ve2].z);
+	glVertex3f(todisplay->ve[ve3].x,
+		   todisplay->ve[ve3].y,
+		   todisplay->ve[ve3].z);
+	glVertex3f(todisplay->ve[ve3].x,
+		   todisplay->ve[ve3].y,
+		   todisplay->ve[ve3].z);
+	glVertex3f(todisplay->ve[ve1].x,
+		   todisplay->ve[ve1].y,
+		   todisplay->ve[ve1].z);
+	glEnd();
+      }
+  else
+    {
+      glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+      for(int i=0;i<todisplay->nbvertex;i++)
+	{
+	  glTranslatef(todisplay->ve[i].x,todisplay->ve[i].y,todisplay->ve[i].z);
+	  glutWireCube(longdiag/400.0);
+	  glTranslatef(-todisplay->ve[i].x,-todisplay->ve[i].y,-todisplay->ve[i].z);
+	}
+      for(int i=0;i<todisplay->nbedge;i++)
+	{
+	  glBegin(GL_LINES);
+	  glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+	  glVertex3f(todisplay->ve[todisplay->ed[i].ve1].x,
+		     todisplay->ve[todisplay->ed[i].ve1].y,
+		     todisplay->ve[todisplay->ed[i].ve1].z);
+	  glVertex3f(todisplay->ve[todisplay->ed[i].ve2].x,
+		     todisplay->ve[todisplay->ed[i].ve2].y,
+		     todisplay->ve[todisplay->ed[i].ve2].z);
+	  glEnd();
+	}
+    }
+
+
+  
+  glFlush();
+}
+
+
+void 
+transform (int i)
+{
+  glTranslatef((todisplay->xmin+todisplay->xmax)/2.0,
+	       (todisplay->ymin+todisplay->ymax)/2.0,
+	       (todisplay->zmin+todisplay->zmax)/2.0);
+  glRotatef (hist[i][0], 1.0, 0.0, 0.0);
+  glRotatef (hist[i][1], 0.0, 1.0, 0.0);
+  glRotatef (hist[i][2], 0.0, 0.0, 1.0);
+  glTranslatef(-(todisplay->xmin+todisplay->xmax)/2.0,
+	       -(todisplay->ymin+todisplay->ymax)/2.0,
+	       -(todisplay->zmin+todisplay->zmax)/2.0);
+}
+
+void 
+display ()
+{
+  glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+  glMatrixMode (GL_PROJECTION);
+  glLoadIdentity ();
+  gluPerspective (45, WIDTH/((float)HEIGHT), 0.1, 900);
+
+  glMatrixMode (GL_MODELVIEW);
+  glLoadIdentity ();
+  if(todisplay->zmax==0)
+    gluLookAt (((todisplay->xmin+todisplay->xmax)/2.0)+tx,
+	       ((todisplay->ymin+todisplay->ymax)/2.0)+ty, 
+	       70+tz,
+	       ((todisplay->xmin+todisplay->xmax)/2.0)+tx,
+	       ((todisplay->ymin+todisplay->ymax)/2.0)+ty,
+	       ((todisplay->zmin+todisplay->zmax)/2.0)+tz,
+	       0, 1, 0);
+  else
+    gluLookAt (((todisplay->xmin+todisplay->xmax)/2.0)+tx,
+	       ((todisplay->ymin+todisplay->ymax)/2.0)+ty,
+	       todisplay->zmax*1.5+tz,
+	       ((todisplay->xmin+todisplay->xmax)/2.0)+tx,
+	       ((todisplay->ymin+todisplay->ymax)/2.0)+ty,
+	       ((todisplay->zmin+todisplay->zmax)/2.0)+tz,
+	       0, 1, 0);
+  
+  transform (0);
+
+  glTranslatef((todisplay->xmin+todisplay->xmax)/2.0,
+	       (todisplay->ymin+todisplay->ymax)/2.0,
+	       (todisplay->zmin+todisplay->zmax)/2.0);
+  glRotatef(angle,0.0,1.0,0.0);
+  glRotatef(angle2,1.0,0.0,0.0);
+  glTranslatef(-(todisplay->xmin+todisplay->xmax)/2.0,
+	       -(todisplay->ymin+todisplay->ymax)/2.0,
+	       -(todisplay->zmin+todisplay->zmax)/2.0);
+
+  display_triangles();
+
+  glutSwapBuffers ();
+}
+   
+
+void 
+exitFunc ()
+{
+  a2ri_vef_free(tomove);
+  if(GG!=NULL)
+    a2ri_vef_free(GG);
+  if(NNG!=NULL)
+    a2ri_vef_free(NNG);
+  if(EMST!=NULL)
+    a2ri_vef_free(EMST);
+  if(EGG!=NULL)
+    a2ri_vef_free(EGG);
+  exit (EXIT_SUCCESS);
+}
+
+
+void mouse(int button, int state, int x, int y)
+{
+  if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
+    {
+      rotation=1;
+      initx=x;
+      inity=y;
+    }
+
+  if(button==GLUT_LEFT_BUTTON && state==GLUT_UP)
+    rotation=0;
+
+  if(button==GLUT_RIGHT_BUTTON && state==GLUT_DOWN)
+    {
+      deplacement=1;
+      initx=x;
+      inity=y;
+    }
+
+  if(button==GLUT_LEFT_BUTTON && state==GLUT_UP)
+    deplacement=0;
+
+  if(button==GLUT_WHEEL_MOUSE_UP)
+    tz+=longdiag/50;
+
+  if(button==GLUT_WHEEL_MOUSE_DOWN)
+    tz-=longdiag/50;
+}
+
+void motion(int x, int y)
+{
+  if(rotation)
+    {
+      angle+=(x-initx)*0.5;
+      angle2+=(y-inity)*0.5;
+      initx=x;
+      inity=y;
+      glutPostRedisplay();
+    }
+
+  if(deplacement)
+    {
+      tx-=(x-initx)*0.001*longdiag;
+      ty+=(y-inity)*0.001*longdiag;
+      initx=x;
+      inity=y;
+      glutPostRedisplay();
+    }
+}
+
+
+void 
+keyboard (unsigned char key, int x, int y)
+{
+  int i, j;
+  time_t dep,fin;
+      
+  switch (key)
+    {	
+    case 'a':
+    case 'A':
+      if(NNG==NULL)
+	{
+	  dep=clock();
+	  NNG=a2ri_vef_nearest_neighbour_graph(tomove);
+	  fin=clock();
+	  printf("temps d'execution : %lf\n",((fin-dep)*1.0)/(CLOCKS_PER_SEC*1.0));
+	}
+      todisplay=NNG;
+      break;
+    case 'z':
+    case 'Z':
+      if(EMST==NULL)
+	{
+	  dep=clock();
+	  EMST=a2ri_vef_euclidean_minimal_spanning_tree(tomove);
+	  fin=clock();
+	  printf("temps d'execution : %lf\n",((fin-dep)*1.0)/(CLOCKS_PER_SEC*1.0));
+	}
+      todisplay=EMST;
+      break;
+    case 'e':
+    case 'E':
+      if(GG==NULL)
+	{
+	  dep=clock();
+	  GG=a2ri_vef_gabriel_graph(tomove);
+	  fin=clock();
+	  printf("temps d'execution : %lf\n",((fin-dep)*1.0)/(CLOCKS_PER_SEC*1.0));
+	}
+      todisplay=GG;
+      break;
+    case 'r':
+    case 'R':
+      if(EGG==NULL)
+	{
+	  dep=clock();
+	  EGG=a2ri_vef_extended_gabriel_hypergraph(tomove);
+	  fin=clock();    
+	  printf("temps d'execution : %lf\n",((fin-dep)*1.0)/(CLOCKS_PER_SEC*1.0));
+	}
+      todisplay=EGG;
+      break;
+    case 's':
+    case 'S':
+      todisplay=tomove;
+      break;
+    case 'Q':
+    case 'q':
+    case 27:
+      exitFunc ();
+      break;
+    }
+
+
+  for (i=NB_VAL-1; i > 0; i--)
+    for (j=0; j < 6; j++)
+      hist [i][j] = hist [i-1][j];
+  hist [0][0] = rx;
+  hist [0][1] = ry;
+  hist [0][2] = rz; 
+  hist [0][3] = tx;
+  hist [0][4] = ty;
+  hist [0][5] = tz;
+}
+
+
+void 
+idleFunc ()
+{
+  int i, j;
+  for (i=NB_VAL-1; i > 0; i--)
+    for (j=0; j < 6; j++)
+      hist [i][j] = hist [i-1][j];
+  
+  glutPostRedisplay ();
+}
+
+
+int 
+go (int argc, char **argv, vef_model *m)
+{
+  point3d ptmin,ptmax;
+
+  tomove=m;
+  todisplay=m;
+  GG=NULL;
+  NNG=NULL;
+  EMST=NULL;
+  EGG=NULL;
+  tetraedrisation=NULL;
+  rinc=R_INC;
+  tinc=T_INC;
+  if(tomove->zmax-tomove->zmin!=0)
+    tinc=(tomove->zmax-tomove->zmin)/10;
+
+  ptmin.x=tomove->xmin;
+  ptmin.y=tomove->ymin;
+  ptmin.z=tomove->zmin;
+  ptmax.x=tomove->xmax;
+  ptmax.y=tomove->ymax;
+  ptmax.z=tomove->zmax;
+  longdiag=point3d_length(&ptmin,&ptmax);
+
+  init (argc, argv);
+  
+  glutDisplayFunc (display);
+  glutMouseFunc(mouse);
+  glutMotionFunc(motion);
+  glutKeyboardFunc (keyboard);
+  glutIdleFunc (idleFunc);
+  glutMainLoop ();
+  
+  return EXIT_SUCCESS;
+}
+    

+ 37 - 0
examples/graph/opengl.h

@@ -0,0 +1,37 @@
+#ifndef OPENGL__H
+#define OPENGL__H
+
+#include <GL/glut.h>
+#include <GL/gl.h>
+#include <GL/glu.h>
+#include <stdlib.h>
+#include <a2ri/io.h>
+#include <a2ri/graph.h>
+
+#define WIDTH 640
+#define HEIGHT 480
+
+#define  GLUT_WHEEL_MOUSE_UP                0x0003
+#define  GLUT_WHEEL_MOUSE_DOWN              0x0004
+
+#define NB_VAL 15
+double hist [NB_VAL][6];
+
+#define R_INC 5
+#define T_INC 1
+double rx, ry, rz;
+double tx, ty, tz;
+
+
+void init(int argc, char **argv);
+void transform(int i);
+void display_triangles();
+void display();
+void exitFunc();
+void mouse(int button, int state, int x, int y);
+void motion(int x, int y);
+void keyboard(unsigned char key, int x, int y);
+void idleFunc();
+int go(int argc, char **argv, vef_model *m);
+
+#endif

+ 19 - 0
examples/icp/Makefile

@@ -0,0 +1,19 @@
+GCC= gcc
+CFLAGS = -W -Wall -std=c99 `pkg-config gsl --cflags` -pipe -O2 -Wall -W -D_REENTRANT
+INCLUDE = -I.
+LIBS = -lm -lglut -lGL -lGLU `pkg-config gsl --libs` -la2ri
+OBJECTS = opengl.o main.o
+
+TARGET = icp
+
+all : $(TARGET)
+
+$(TARGET) : $(OBJECTS)
+	$(GCC) $(CFLAGS) $(INCLUDE) $(OBJECTS) -o $(TARGET) $(LIBS)
+
+%.o : %.c
+	$(GCC) $(CFLAGS)  $(INCLUDE) -c $< -o $@
+
+clean : 
+	rm -f *~ *.o $(TARGET)
+

+ 53 - 0
examples/icp/main.c

@@ -0,0 +1,53 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <gsl/gsl_linalg.h>
+#include <gsl/gsl_math.h>
+#include <time.h>
+
+#include <a2ri/io.h>
+#include "opengl.h"
+#include <a2ri/overlap.h>
+#include <a2ri/icp.h>
+
+int main(int argc, char *argv[])
+{
+  vf_model m,base;
+
+  if(argc!=5 && argc!=11)
+    {
+      printf("usage : ./icp -v <modele de base> <modele a recaler> <critere d'arret Dkn>\n");
+      printf("ou\t./icp <modele de base> <modele a recaler> <critere d'arret Dkn> <rotation suivant X> <rotation suivant Y> >rotation suivant Z> <translation suivant X> <translation suivant Y> <translation suivant Z> <AABB|ritter>\n");
+      return 1;
+    }    
+
+  a2ri_vf_init(&base);
+  a2ri_vf_init(&m);
+  if(!a2ri_vf_open_file(argv[2],&base))
+    {
+      printf("modele introuvable\n");
+      return 0;
+    }
+  if(!a2ri_vf_open_file(argv[3],&m))
+    {
+      printf("modele introuvable\n");
+      return 0;
+    }
+  printf("clic gauche : faire tourner la scene\n");
+  printf("clic droit : faire translater la scene\n");
+  printf("molette : se rapprocher/s eloigner de la scene\n");
+  printf("touche w/x/c : faire tourner l'objet a recaler\n");
+  printf("touche v/b/n : faire translater l'objet a recaler\n");
+  printf("touche i : lancer l'algorithme ICP\n");
+  printf("touche r : entrer manuellement un taux de recouvrement (100 %d par defaut)\n",37);
+  printf("touche t : lance trimmed ICP - ne pas oublier d'entrer le taux de recouvrement avant\n");
+  printf("touche e : regler la sensibilite de l'algorithme Automated Trimmed ICP (0.3 par defaut)\n");
+  printf("touche a : lance Automated Trimmed ICP\n");
+  printf("touche s : sauver le maillage recale\n");
+  printf("touche q/Q/esc : quitter\n");
+  go(argc,argv,&base,&m,atof(argv[4]));  
+  
+  return 0;
+}
+
+

Fichier diff supprimé car celui-ci est trop grand
+ 10452 - 0
examples/icp/models/armadillo1.off


+ 8349 - 0
examples/icp/models/armadillo2.off

@@ -0,0 +1,8349 @@
+OFF
+2833 5513 0
+10.100700 4.260490 35.877201
+12.656800 3.860660 34.941101
+11.450900 5.052470 36.584099
+14.837400 6.528020 36.155701
+8.299950 7.661960 37.069099
+7.802140 6.423700 33.797901
+8.577810 7.654340 40.539902
+9.556140 10.186300 40.402699
+-4.336500 60.803501 -35.431099
+-4.237030 63.429600 -39.220001
+-3.021490 63.347698 -40.271599
+-0.425494 60.552799 -35.257599
+-2.487610 59.734699 -33.141899
+0.826405 56.745998 -30.234400
+-3.865360 56.597000 -31.311899
+-5.475820 61.382000 -33.657001
+-2.628530 56.779900 -27.607500
+11.957100 2.814600 25.256399
+11.533100 4.995020 23.027000
+14.454500 6.448690 25.348499
+12.341500 3.124980 27.857700
+10.222400 2.656670 31.745399
+10.556100 2.846570 27.736700
+8.621870 2.828450 27.095301
+4.730800 9.553640 26.177900
+6.113590 12.650700 26.164801
+2.801810 10.425800 24.646299
+6.686220 5.125210 30.262800
+14.283700 3.848740 29.403400
+13.673400 3.761030 30.454500
+13.373500 4.192960 31.781200
+10.704300 4.040590 33.185902
+14.424500 5.013420 33.883701
+15.138600 6.156460 31.260300
+36.742802 56.125599 10.381700
+39.155998 52.481701 9.976700
+39.728401 55.968498 9.255710
+37.600101 59.124298 7.959290
+34.961399 59.801498 8.050340
+40.752998 59.265099 7.980760
+36.572300 52.674198 11.016300
+36.800800 48.734901 10.020500
+40.340500 49.529800 8.656300
+31.374800 41.722301 4.197960
+34.551800 42.580799 4.045010
+33.686298 43.870098 8.304200
+32.662601 43.865700 9.768960
+32.986900 61.754101 -0.580806
+33.413399 61.610901 4.413130
+34.728401 61.418900 -0.114045
+31.575500 62.181400 -0.252285
+29.962700 62.195801 0.040794
+31.593599 61.065399 8.936830
+7.808940 65.435799 -17.518101
+8.396610 65.861801 -19.464300
+9.135230 66.724503 -16.474400
+3.987350 89.346298 -4.799440
+7.985550 86.761597 -6.335520
+5.357180 88.515297 -7.813240
+7.250810 86.934601 -3.497020
+2.090580 61.786800 -37.723400
+-0.243575 62.478401 -38.765800
+3.585980 65.668701 -39.354801
+4.153870 65.590103 -37.175098
+1.017570 65.821602 -41.652802
+-0.893760 71.698601 -38.266602
+4.713930 64.693001 -33.503101
+4.904060 64.238800 -30.984400
+2.475370 62.128201 -31.524401
+3.384310 63.034698 -34.877602
+2.307420 62.826801 -33.320801
+-0.183267 61.583698 -34.015800
+0.283854 59.750198 -32.395000
+2.264420 59.894501 -32.470901
+2.235380 58.656601 -30.707399
+6.483060 65.725998 -29.783300
+5.946840 66.859497 -33.733601
+6.044990 69.682899 -32.229301
+5.570280 66.602303 -27.007601
+4.296910 64.535698 -28.648199
+2.120580 71.330101 -33.472099
+0.465557 71.110199 -36.089298
+-0.191612 73.009903 -35.373299
+0.807791 74.303299 -33.373901
+3.604380 72.957497 -31.451799
+5.963090 70.191101 -29.513700
+6.038690 71.802299 -29.697201
+6.244120 67.354401 -27.239799
+6.583800 66.906998 -25.756201
+4.044290 61.646099 -28.911600
+5.496210 63.342800 -25.994301
+-1.577000 63.638401 -39.246498
+-2.907930 66.070099 -41.332199
+4.368150 61.509602 -22.323500
+0.063344 58.150002 -26.040899
+3.086490 60.486698 -26.041201
+20.866699 37.412899 -0.686850
+18.728399 34.029701 1.985140
+19.501699 36.032299 -1.479290
+19.752600 34.145302 4.135070
+22.070000 39.923199 0.220416
+20.549601 39.065899 -2.490570
+18.012800 37.726002 -6.070400
+18.608900 36.724400 -2.887600
+16.687000 36.642799 -5.948500
+17.029200 34.569099 -3.320160
+2.863350 31.618200 -10.921400
+0.036075 33.696800 -12.142200
+3.534510 33.600399 -10.742100
+-7.709250 59.840801 -26.379999
+-7.922460 60.618500 -22.818199
+-4.840600 57.755798 -22.569799
+-3.994250 57.966900 -21.124901
+-7.381940 60.740799 -21.055201
+-7.036590 59.258900 -19.796499
+-2.861150 56.731998 -19.292400
+33.843601 60.411701 -4.730460
+23.845800 50.784901 -8.818490
+21.557699 46.099602 -7.420600
+21.350901 50.701500 -9.163690
+21.310101 55.901798 -9.433670
+25.907900 46.999001 -6.583590
+10.352100 55.631699 -13.994300
+14.111400 55.148102 -13.547600
+9.651590 53.323002 -14.983800
+-17.232901 25.825100 7.462800
+-16.984200 25.005100 5.582960
+-18.429600 22.413000 8.126780
+-16.537800 27.347300 4.593810
+-18.026501 28.507200 6.880030
+3.062470 88.542900 -7.956320
+4.531860 75.977798 -32.957500
+6.369370 76.380203 -29.362301
+7.043380 74.437798 -29.758900
+7.385120 72.348503 -27.521099
+8.709380 68.011703 -25.456100
+9.675880 69.734299 -25.093800
+6.124160 65.217903 -23.751101
+7.820250 66.540398 -23.080000
+56.147800 93.071800 3.189110
+56.228600 93.109497 -1.018180
+55.471199 96.805901 0.493475
+56.833698 90.616997 0.831775
+52.736198 97.094101 2.383100
+53.641300 92.975601 5.636180
+51.795601 98.721603 2.991700
+51.074902 97.491302 -0.164922
+49.907600 98.359100 -0.611287
+46.223400 105.525002 -2.767170
+47.780899 104.254997 -5.009610
+45.091702 104.959000 -5.505660
+50.333698 97.758301 6.122970
+53.084999 92.371803 7.476300
+52.302898 96.155800 5.926040
+48.217800 101.860001 3.188930
+50.106998 102.367996 2.362820
+39.238300 96.995300 4.173540
+41.697201 97.197701 2.815690
+39.158001 94.237701 2.968480
+46.196602 76.355003 -6.659060
+44.380100 78.300201 -4.667010
+47.473099 80.757698 -5.158570
+39.449902 73.359398 -3.266320
+38.118401 76.994904 -2.436960
+40.801498 78.376900 -1.870310
+43.657101 50.169399 8.001370
+43.521000 47.037498 5.627780
+37.757000 105.135002 3.097180
+37.381599 100.959999 5.581670
+37.960499 104.810997 5.482240
+40.461601 102.551003 6.806850
+40.445999 101.258003 4.430910
+39.659698 97.786201 8.901920
+41.497002 96.433197 10.483600
+41.998501 98.874901 8.025690
+44.197498 96.530403 8.936140
+45.946602 96.176102 9.930750
+44.570900 92.202599 10.864200
+43.274502 56.776299 6.919600
+40.612999 60.367599 6.622980
+45.018600 57.168400 6.305850
+46.600101 59.092999 8.240120
+43.312401 59.283901 7.078830
+41.172100 62.866901 8.051500
+39.198399 64.989700 6.887120
+39.476898 62.352699 5.536010
+42.286999 63.464901 8.496860
+40.544498 68.051498 8.636500
+39.297699 69.938103 7.089710
+37.674999 69.033096 5.397080
+53.116299 58.998001 -4.230740
+50.901100 58.844898 -8.242530
+52.484100 60.460201 -7.970530
+48.090302 57.633099 5.681710
+47.391899 55.104599 3.645710
+49.596699 58.559700 7.836340
+47.818401 62.966202 11.598300
+-31.289600 0.551621 35.884399
+-25.793501 -0.877567 35.531300
+-28.409800 1.242550 33.900002
+-22.040100 0.385170 31.967199
+-17.834801 -1.626560 29.589800
+-20.930599 0.531485 31.109900
+-20.586901 -2.901600 30.604000
+-19.697701 1.568130 30.884800
+-23.400400 3.486000 31.533199
+-25.164101 2.668540 32.144199
+-1.596430 5.766120 20.224400
+-2.038080 8.826660 23.375000
+-4.580710 5.440680 22.045401
+-14.598000 9.456690 29.294399
+-11.789500 7.882010 28.037300
+-14.172000 10.278000 28.368900
+-14.960200 6.402550 29.360300
+-17.048300 11.371400 28.825800
+1.430140 12.579200 -5.574140
+-2.197820 12.944400 -5.832090
+1.614800 15.188600 -5.591860
+-7.108240 17.976200 27.765900
+-3.702590 15.954400 27.426001
+-1.064760 18.216200 28.716700
+9.790070 16.953199 25.451700
+9.261670 15.807200 24.320000
+11.916500 16.799101 22.804199
+4.433900 16.506001 27.327499
+9.744260 11.652100 27.565300
+10.666700 10.911200 30.250299
+11.647500 11.056400 28.142900
+8.350800 13.872000 25.203800
+10.922400 13.108400 23.892799
+9.102320 14.679800 24.508400
+10.708600 10.905400 35.664200
+8.314140 8.875950 34.096401
+7.160580 7.381330 42.933399
+7.776390 6.684660 41.609501
+7.978800 5.770090 43.830502
+8.129210 8.208060 43.889000
+9.014350 9.131710 41.853298
+10.541200 5.137450 38.545898
+10.655700 5.698250 39.454899
+10.096100 5.076430 40.581902
+11.664900 5.049340 41.139702
+10.209200 7.373220 43.887199
+10.694800 9.091310 42.948399
+14.540200 9.241500 36.678001
+14.270700 9.154930 39.368500
+12.577500 5.220590 38.217602
+13.765800 6.162000 39.313801
+13.727600 7.450990 41.145599
+12.419700 8.434310 42.346001
+12.142200 10.861500 35.890099
+12.170900 10.496800 40.432499
+3.671910 17.688801 27.442200
+8.779110 18.144501 25.667801
+0.269123 15.091800 27.005600
+-4.368890 15.015600 26.266800
+-1.301000 12.791900 25.961901
+27.833799 46.828201 13.155100
+27.895100 51.835300 14.854400
+25.313299 47.933601 15.748700
+33.483200 57.168499 11.732300
+32.037399 57.878201 12.405700
+39.076900 46.162998 6.960080
+41.560699 47.041698 6.387830
+23.212200 40.674900 21.450800
+23.126301 38.988201 17.787500
+23.455299 41.131100 19.870899
+24.775801 40.711399 17.920401
+24.563101 46.907799 20.614401
+23.245001 47.680000 23.606001
+29.733500 43.067101 -1.331410
+33.089001 42.733200 -0.650125
+29.994900 42.070702 0.445783
+28.849899 41.624901 5.151280
+30.080799 62.778198 3.950000
+25.906000 54.129902 16.133499
+25.907600 52.915798 17.761400
+25.051399 51.525200 15.913100
+24.904200 46.146999 17.045300
+25.638901 64.033997 15.270700
+25.027599 63.766201 15.899000
+26.552200 60.370998 14.025700
+27.376200 58.459900 14.122300
+30.104500 57.940701 12.644500
+28.667601 57.569599 13.438700
+29.942900 53.296398 14.560500
+29.594500 61.414001 8.851160
+28.229300 62.353298 9.680430
+11.974900 68.715698 -14.641900
+14.208500 69.233902 -14.617100
+15.911500 66.831596 -13.096300
+11.794500 71.363998 -17.211800
+13.030300 64.191399 -12.337700
+13.106800 65.450401 -12.307300
+15.928500 62.090302 -11.417600
+9.755110 68.638496 -14.716900
+11.763700 82.580299 -3.419130
+12.845000 81.097702 -5.469040
+8.886160 84.785698 -3.421540
+10.161000 84.527702 -1.958580
+11.084000 82.736298 2.622030
+12.633200 82.422699 1.653860
+13.610000 81.406502 -1.622420
+9.721150 85.405800 1.006810
+8.774380 86.450203 -2.293260
+21.275499 40.253899 23.528700
+22.162600 43.193802 22.929100
+20.792601 45.223099 25.878500
+21.182400 48.496101 26.977301
+21.415100 50.204102 25.997700
+19.605801 53.681198 29.558800
+19.997200 53.465698 28.129400
+19.541300 61.151699 27.745300
+2.883460 57.606499 36.800598
+4.822290 56.519299 37.022598
+3.913180 60.098301 36.880901
+2.971890 61.885399 36.369099
+19.995899 28.873301 14.524700
+20.044100 30.152901 13.144800
+18.009899 27.217800 20.893999
+18.682400 25.517799 18.263201
+-21.709801 10.630000 29.251900
+-26.178400 11.822600 27.642200
+-22.018299 9.311940 30.079100
+-28.436199 8.767900 28.774401
+-30.804199 10.265300 25.880199
+-32.345600 8.070190 26.851700
+-40.436798 -7.134040 42.762798
+-41.629398 -7.152460 40.698299
+-41.856300 -10.294600 40.824799
+-36.307899 -3.773310 14.879000
+-33.129398 -5.999420 14.067700
+-36.989201 -4.843490 16.997900
+-35.006001 -9.021880 19.903700
+-34.769299 -7.665770 17.049101
+-37.288502 4.028430 18.658701
+-37.045101 5.161110 16.977501
+-36.777302 3.085940 14.826800
+-38.285500 1.001530 17.686501
+-42.154701 -34.594101 66.060402
+-40.253899 -34.035702 65.614403
+-41.606998 -36.740101 68.104698
+-18.407499 24.690399 15.327600
+-18.648500 24.977200 11.170800
+-19.007299 23.562700 16.027500
+-19.224400 22.209200 11.363700
+-18.962999 22.492500 14.717600
+-26.360701 17.368099 16.809799
+-25.792299 17.492701 20.186199
+-22.367399 18.169500 20.346201
+-22.496401 17.935600 22.105301
+-19.862400 18.434299 22.322100
+-16.980200 16.529900 25.205999
+-17.514400 19.563700 22.653299
+-23.439600 17.853800 15.713800
+-22.739300 17.864901 12.944800
+-21.262899 20.235901 10.514900
+-23.214500 16.208401 10.817400
+-19.785700 20.293699 7.364530
+-46.064499 -19.807199 69.112000
+-44.329300 -17.393801 66.327301
+-42.685699 -20.105200 64.679802
+-1.170870 30.969400 31.787399
+-6.223790 29.111099 29.751699
+-0.908328 29.308500 30.837000
+4.654260 69.389900 -35.382900
+4.344700 69.069298 -38.104401
+0.652403 70.160599 -41.817799
+-1.371480 71.646202 -43.903301
+-0.673350 69.759499 -44.160702
+-0.100913 68.082603 -42.630501
+2.844180 68.780602 -40.943699
+4.228640 60.029900 -19.998600
+2.246370 58.809399 -18.515301
+-0.171385 57.212898 -19.095301
+4.898130 61.196499 -19.073299
+4.264850 58.515499 -17.910601
+4.010250 61.390400 -21.206800
+2.095670 58.937500 -22.282801
+-0.525176 57.643101 -21.267900
+-0.815360 57.487099 -24.613899
+-11.475100 21.524599 26.618799
+-8.798020 20.483200 27.760000
+-3.768120 21.242500 29.614500
+0.384837 23.879299 29.811100
+-5.935020 22.499599 29.201200
+-5.002430 24.056601 29.904499
+11.375000 19.483101 25.612400
+16.288401 21.338600 21.654100
+11.454500 20.957800 25.715500
+7.497950 54.030300 -14.739900
+4.108150 48.530300 -16.093800
+4.506700 52.451698 -14.762700
+10.587900 57.248001 -15.109400
+1.117830 49.157001 -14.916600
+1.610810 50.547001 -14.436900
+0.300102 50.679699 -15.357900
+-3.408040 44.748199 -14.604600
+-1.927470 47.381199 -14.366300
+-1.602800 45.065899 -15.038200
+-3.553610 49.356800 -14.349200
+-10.417500 53.770100 -13.984200
+-8.774550 54.826900 -15.619200
+-7.783590 52.199200 -14.086000
+-8.980980 53.140400 -13.697900
+-7.813510 50.830002 -14.942300
+-14.922700 43.543499 -15.317100
+-11.997000 47.681900 -15.986500
+-10.894500 44.391102 -16.011801
+-5.885570 58.238098 -18.477200
+-5.814100 56.593102 -17.273001
+-7.882460 60.412601 -18.850901
+-7.619980 57.722000 -17.965900
+-0.183575 46.151600 -15.851800
+-0.128803 43.274799 -16.075899
+-1.237040 39.828701 -14.173600
+9.761080 26.551600 -4.331440
+9.632820 28.308800 -4.539950
+14.404500 29.559999 -1.256560
+2.867890 28.316799 -10.028900
+6.513570 28.813299 -8.595360
+6.807870 28.059799 -6.921740
+-0.323849 27.956699 -10.474500
+-5.121090 30.160200 -11.075800
+-4.620640 27.718500 -9.898260
+-10.673800 28.283300 -8.224480
+-6.819370 26.665701 -7.964840
+22.924801 57.506802 -8.075220
+24.763201 55.175701 -8.087730
+27.662800 55.083500 -7.045690
+26.660101 52.138401 -7.731330
+28.003300 59.262501 -5.296170
+28.987301 57.862598 -5.218180
+32.319500 56.503899 -6.817440
+30.984600 52.864101 -8.279790
+20.885099 35.451599 16.981899
+20.284901 33.854000 17.514099
+21.502001 34.729198 12.852500
+19.415600 32.076900 17.237000
+20.014400 31.905199 11.997500
+17.976601 31.738400 21.677299
+19.886000 28.729099 8.266020
+21.453100 26.699301 6.435240
+19.702499 29.388201 4.274980
+15.492300 25.756500 24.547701
+11.570200 22.733101 26.588600
+15.785100 23.568300 23.276600
+10.559500 23.886700 27.337601
+19.902201 27.519800 13.215200
+27.098900 43.751900 -2.664240
+24.802601 43.457699 -2.348730
+27.271799 42.046799 1.172380
+25.605200 41.685398 4.168280
+24.748600 42.052502 1.202980
+28.914700 43.715000 10.896000
+30.105700 43.705200 10.084200
+24.078699 40.714298 9.210560
+26.503599 42.585899 8.129240
+27.093901 44.114700 10.969600
+24.709600 41.366001 7.148100
+23.533400 40.215599 4.105030
+18.722401 34.499901 21.072701
+12.636300 39.700600 30.132799
+10.566200 42.129799 32.539902
+9.130500 41.847500 33.564701
+16.009399 43.458099 29.136200
+13.855400 41.065899 30.379601
+18.928301 41.128101 26.472300
+20.101900 39.029301 23.088499
+17.167500 39.520599 26.731100
+21.661100 37.481098 21.209900
+23.710699 37.072899 16.123199
+17.416901 37.838200 26.577999
+19.849701 36.088402 22.615200
+22.118999 36.709900 11.322700
+21.923599 36.088600 10.340100
+24.735100 43.121899 17.785101
+24.980700 42.178902 16.278000
+25.439699 44.355400 13.666500
+24.776400 42.467201 14.648800
+24.105200 39.445702 12.174900
+23.756500 39.913601 14.320200
+23.940001 38.828701 7.815540
+23.977100 37.811199 10.562300
+19.143299 32.725201 6.546390
+19.969000 29.056000 9.569900
+19.525900 29.920700 8.537770
+20.561300 27.546301 11.488400
+19.332600 29.133600 6.265560
+19.668100 30.112900 5.587520
+18.169800 29.812401 4.337240
+20.190500 30.741400 6.970690
+20.160999 33.399399 11.362000
+20.173599 34.060799 8.155080
+22.417200 37.718399 7.283800
+21.309900 37.093800 5.048080
+-22.779400 -5.121880 8.794330
+-24.758400 -7.648130 12.690000
+-27.750200 -6.228770 11.005800
+-19.937300 -6.777320 10.747100
+-6.872370 13.859700 -3.917050
+-2.983420 14.927500 -5.605170
+-6.664760 11.356800 -4.118000
+-7.832490 15.357500 -4.485720
+-2.706980 16.480801 -6.693880
+-7.893960 11.845800 -2.007570
+-11.622300 18.037500 -1.149830
+-14.813100 18.501499 0.042435
+-13.011100 22.365801 -1.365480
+-9.751520 18.907499 -2.572330
+-9.244660 15.508600 -2.157820
+-7.932470 17.374500 -4.362780
+-7.910550 57.892300 -29.237400
+-7.616680 59.509201 -30.481899
+-6.344860 56.988899 -30.131800
+7.399510 61.783798 -17.359501
+6.280400 62.881599 -18.535500
+8.140390 62.903500 -16.437700
+8.244580 60.978298 -15.403600
+10.172100 62.432201 -14.264600
+5.354700 45.788898 -16.555201
+0.847303 35.326199 -11.717700
+10.528300 38.184299 -13.637600
+11.435500 33.473301 -9.981610
+8.610580 34.206799 -12.039200
+18.231701 39.601398 -7.393980
+-13.777400 22.461100 0.195186
+-15.045800 22.962299 1.717280
+-14.894400 27.175200 0.820426
+-34.155701 -15.709700 31.397900
+-33.545200 -16.889200 34.257401
+-34.971802 -16.333500 32.849300
+-31.937700 -15.744400 32.051998
+-34.862202 -17.624399 45.131901
+-38.758499 -15.571100 44.753101
+-37.709900 -16.807600 41.948898
+-38.166801 -16.983700 46.443401
+-39.570202 -13.871600 46.684299
+-40.656399 -13.926700 44.644402
+-40.355301 -13.385400 42.020100
+-40.320000 -13.455600 38.288700
+-39.354301 -14.500700 40.377102
+-39.782299 -15.407600 38.224998
+-37.110802 -16.279200 35.578800
+-38.726398 -15.071600 36.558399
+-41.866299 -12.220300 37.128201
+8.118870 99.778801 -20.393801
+10.845000 102.478996 -16.061600
+12.184500 102.500999 -19.660200
+13.943700 103.027000 -17.246000
+11.992300 100.316002 -18.086700
+12.956500 102.100998 -14.990300
+7.611530 93.246300 -23.247299
+9.981500 98.052399 -22.554600
+10.320400 99.221397 -20.562799
+5.937290 88.937302 -14.141400
+5.264050 86.320396 -12.644900
+8.040400 85.585297 -13.787300
+0.846146 87.552696 -16.308300
+2.534260 87.293800 -19.561300
+-1.186200 87.747902 -19.434299
+3.546830 87.800797 -15.961000
+4.114360 89.602699 -16.190500
+3.414590 88.088898 -19.970400
+13.937600 99.166397 -15.472900
+6.772090 84.448601 -8.679260
+10.986600 68.475502 -21.841801
+10.025900 67.409500 -24.024599
+10.865400 73.761398 -22.240999
+54.707500 92.923897 -2.991770
+54.422401 89.569199 -3.387130
+51.313999 92.050400 -3.759620
+53.039700 96.245300 -4.107770
+55.066502 87.150299 -1.321500
+52.546799 86.570702 -2.951500
+51.524502 100.531998 -2.346310
+52.126801 102.271004 -3.617260
+53.861801 99.051003 0.207285
+52.339500 98.859200 -0.094271
+54.405300 100.018997 -3.931900
+54.286301 100.668999 -2.199150
+49.768200 91.123001 8.981540
+48.671398 95.752502 7.641020
+47.789799 99.981697 -1.964020
+46.949200 98.763199 -0.480467
+41.273899 99.804497 4.122460
+41.414299 99.831001 5.496350
+43.105000 100.567001 6.648550
+40.997799 102.324997 3.514920
+45.900299 101.682999 0.308722
+43.396400 99.961197 1.609200
+40.155899 104.647003 1.186840
+42.518700 102.674004 0.504850
+45.493000 99.996803 2.240280
+40.025600 107.440002 0.279234
+41.401501 106.737000 -1.542160
+39.648201 106.794998 -1.835770
+42.467098 106.426003 1.875370
+49.825500 102.894997 -2.114160
+48.945599 104.453003 -1.523970
+43.681599 90.549103 0.718233
+42.393600 92.298500 2.285680
+43.000500 95.752800 0.762643
+45.187801 62.673500 -12.058300
+43.137299 63.560200 -12.195200
+43.973499 65.273003 -11.556700
+44.228600 60.818600 -11.718400
+46.800800 67.120300 -11.198900
+49.222301 61.473400 -11.021200
+52.255798 63.299301 -8.040090
+55.127800 90.935097 5.812090
+54.537899 86.695099 6.252130
+56.468399 89.195000 3.860870
+55.360901 74.364197 -3.710600
+54.220100 74.383102 -6.176640
+53.856400 77.375000 -4.820100
+35.451401 67.741302 -4.040880
+36.894798 65.830498 -6.513470
+35.561501 65.331299 -4.045160
+35.748100 66.904198 0.769760
+35.501400 71.968201 -2.739620
+37.985699 68.575302 -4.466930
+38.845100 44.573200 3.220630
+37.654400 43.700199 3.390360
+35.843201 43.598400 3.693070
+41.554699 45.261002 2.343050
+40.445400 44.660801 3.224540
+43.050201 45.816399 2.249170
+41.838600 45.556099 -0.957820
+38.767502 81.596703 1.557920
+37.549099 78.771797 3.382630
+39.420101 81.445900 4.426020
+37.599701 78.721001 -0.757243
+37.374298 79.085403 0.687440
+36.656601 74.168999 2.212350
+39.056999 90.294197 7.603260
+37.634300 93.854103 6.509520
+39.504601 88.732803 4.091030
+40.478100 90.160698 2.431830
+38.910801 76.566101 6.951650
+40.426998 80.671204 7.089860
+38.161301 76.933701 5.010850
+38.830101 73.909500 6.922720
+42.619499 82.133698 7.617830
+41.411800 82.539803 6.124160
+43.204498 79.775299 9.580040
+40.645401 83.175400 3.805670
+40.686001 83.815804 2.414600
+41.004200 82.632401 0.646961
+41.918598 85.457199 1.041670
+50.184200 65.601097 -10.286400
+49.994099 68.072502 -9.763000
+35.728401 64.207199 -0.203282
+36.189201 65.817299 -1.199930
+43.167400 53.005901 8.759180
+42.527199 55.819901 9.023410
+44.230598 52.848999 6.337900
+44.137001 50.058899 3.733380
+43.328602 48.081200 0.406196
+42.210999 47.777199 -2.122570
+40.264000 46.541698 -4.247860
+40.810398 49.887699 -6.851270
+43.481499 50.785702 -6.102220
+45.489201 49.994801 1.144960
+56.963001 72.869797 1.239870
+56.752499 75.378304 2.701990
+57.836899 73.555099 4.038860
+55.408901 76.052101 6.258000
+36.956100 72.557701 -3.194350
+36.219101 73.487198 -2.002130
+36.074600 70.982498 1.147110
+36.833302 72.370697 2.341700
+49.012299 55.698299 -7.837580
+51.563599 57.199902 -6.477300
+50.594898 55.815498 -4.204180
+49.073101 57.531502 -9.610470
+49.666199 54.434799 -4.263530
+46.246101 54.272499 -7.146540
+48.207298 54.374599 -7.329380
+50.866199 55.279999 -1.334790
+52.374100 56.862701 -4.468750
+52.765202 57.213799 -2.086110
+52.710201 57.575298 0.599426
+51.083900 63.099800 10.801800
+-20.080601 -11.060800 35.923901
+-19.051100 -8.989870 40.619598
+-19.202900 -11.617900 38.382401
+-24.562799 0.018373 39.900700
+-27.698900 1.261220 38.969799
+-32.145599 2.011500 40.484901
+-32.568401 2.643460 46.297199
+-30.019899 2.188720 44.904301
+6.852660 6.488820 21.165800
+9.325870 4.149220 21.983200
+6.855040 4.295840 23.371700
+11.372100 5.150850 21.524500
+4.883580 5.907430 25.057100
+9.082560 6.951290 20.091000
+7.859980 6.708210 19.305799
+10.706200 8.177710 18.659901
+12.085100 9.499650 20.830700
+-11.882400 0.879902 26.789600
+-11.112600 4.694540 27.754801
+-13.800500 3.962440 28.852400
+-16.888000 2.494140 29.866501
+-7.672880 2.479560 22.770201
+-7.717730 3.440490 24.088900
+-7.134820 2.942170 22.921600
+-7.932450 4.054810 24.801600
+-12.172200 10.938700 27.469200
+-8.826550 7.683150 26.687799
+-8.178880 10.696900 26.697201
+-6.194000 7.313290 24.823700
+-5.324060 12.679300 26.132401
+-0.876600 9.530420 24.466000
+-4.917880 13.573300 26.913401
+-16.410000 0.433859 5.222990
+-18.695900 -2.641310 7.156930
+-20.835400 -0.639488 5.080880
+-17.058201 -3.698870 7.999150
+-14.178100 -0.355114 5.507530
+-27.798201 -2.100270 7.908150
+-25.570200 -3.477830 7.566640
+-22.382999 1.308560 5.016070
+-22.916201 -1.406470 6.208930
+-18.748501 2.200540 3.992110
+-20.802700 4.760590 3.608390
+-9.842840 2.285120 6.368280
+-11.873500 2.031240 5.918660
+-12.504100 3.622770 4.028900
+-16.296499 4.910760 3.197110
+-9.265820 6.193180 2.744600
+-4.366260 7.334280 -1.178370
+-3.126100 8.918470 -3.677230
+-0.520104 6.334340 -0.912460
+0.468444 5.887770 4.289420
+3.845670 7.081890 5.127900
+0.348330 6.272130 7.581960
+-2.665760 11.108100 -4.453690
+1.099740 11.119500 -4.334960
+5.786870 11.036300 -3.278090
+3.351730 8.337030 -0.241381
+2.916390 11.036000 -2.762190
+1.029240 9.610300 -4.062420
+1.765600 8.001170 -1.999950
+-5.360720 7.352580 1.101670
+-4.241820 6.078940 3.386630
+-2.230600 5.804770 5.236110
+-1.635830 5.599210 1.234170
+0.918838 6.085640 1.228760
+14.106700 18.889500 22.543301
+17.314301 20.775101 18.992800
+14.533100 17.836399 21.849701
+14.398700 16.667200 19.976400
+15.787900 17.887100 19.937799
+11.796900 12.237400 22.907400
+11.126600 14.230500 22.842100
+12.797100 14.407700 20.248699
+14.546600 14.219600 19.644400
+17.290701 17.012199 19.028500
+18.316099 19.499901 18.794600
+21.053101 4.691990 -20.230499
+21.144400 5.840770 -6.276840
+6.355330 9.154230 28.418900
+7.719250 9.790710 29.366501
+13.466300 8.618990 23.498600
+12.668500 7.145200 21.835899
+13.956500 8.877960 27.806200
+13.754100 9.486000 32.588799
+5.538640 14.288600 25.936399
+3.186560 13.140300 25.813999
+4.188650 15.477700 26.313101
+1.069330 14.316400 25.854900
+21.918501 29.167500 -12.659500
+20.753599 28.419600 -14.001300
+18.749399 26.265800 -15.920200
+17.915100 27.256800 -13.480200
+11.480300 10.925300 -6.995850
+10.671500 13.882500 -8.144610
+15.174300 9.642370 -10.145900
+20.713900 11.588300 -19.476200
+21.831600 12.943100 -22.439699
+21.803200 11.670500 -20.104700
+-32.544899 -15.939000 30.218500
+-30.493900 -14.682100 30.349701
+-37.090900 -13.253600 30.410000
+-33.432098 -13.501000 27.101500
+-33.199501 -14.144800 28.966101
+-33.210701 -2.108130 11.486100
+-31.195900 -4.415710 11.303500
+-35.247799 -0.252155 12.979600
+-32.101700 1.399580 9.458190
+-24.208000 -9.428860 15.198600
+-26.752399 -8.835900 14.749600
+-22.972000 -8.617260 16.468500
+-30.094601 -8.600980 15.695100
+-29.743799 -7.561160 13.693700
+-31.152399 -9.972430 18.096600
+-31.328199 -10.614800 20.507401
+-20.804001 -8.805300 33.867699
+-23.945900 -12.881600 31.175501
+-22.678200 -10.489200 31.644400
+-22.652599 -4.232940 32.743999
+-22.413500 -5.562780 33.507900
+-22.431299 -7.606360 32.147400
+-16.875799 -4.243790 26.746201
+-17.920700 -4.908000 27.724701
+-27.529600 -14.421200 31.013300
+-28.296301 -15.501000 31.597099
+-25.967899 -15.605300 31.106701
+-28.438700 -16.318399 33.128799
+-29.860500 -16.604601 32.181999
+-25.869400 -11.906600 29.512199
+-23.924400 -10.183400 30.304501
+-22.073000 -8.027460 27.679600
+-24.551001 -10.186600 27.089300
+-20.714399 -6.248180 27.526699
+21.209400 25.788601 -20.151899
+-14.116100 15.624700 -0.017103
+-15.342100 16.036400 1.273650
+-18.538401 6.984810 3.215530
+-16.051600 11.702500 1.708930
+-16.872000 15.059400 1.844180
+30.357300 47.092499 12.844700
+29.870600 49.322201 13.939300
+36.638401 45.495098 7.552040
+35.560299 45.333599 9.091610
+34.073601 48.055801 11.518300
+32.794601 48.875999 12.792500
+33.501900 52.138100 12.832800
+31.693501 51.693199 13.800100
+17.034401 68.718803 -10.438400
+15.416800 70.178398 -11.945800
+19.083300 63.526100 -11.677400
+14.099600 71.521599 -12.229200
+19.131399 66.796898 -9.849070
+28.677500 62.596199 4.783760
+27.470699 62.926399 2.063140
+15.855200 76.893097 1.945050
+15.419700 79.188004 3.431410
+17.486401 76.110199 3.327350
+18.755199 73.917603 4.616110
+17.795099 74.280098 1.204710
+15.925500 78.046997 -0.272632
+17.373600 69.993896 26.319099
+19.357500 68.377197 26.026199
+17.485001 71.750397 24.551300
+18.349100 73.530098 21.090401
+16.128599 77.014503 19.782499
+17.062799 75.027702 22.167400
+18.040199 76.333397 16.973200
+17.212900 76.731796 5.890290
+16.866199 78.138496 7.157350
+18.650999 76.928299 10.136800
+15.872200 78.943199 7.020640
+19.789700 73.940598 6.874250
+20.000200 73.233704 8.178110
+20.745800 71.538200 7.204720
+17.591000 76.950203 12.030900
+17.594500 78.075897 13.797800
+18.872000 75.480904 12.024600
+20.926001 73.171402 9.948860
+21.032900 73.380997 15.033700
+21.843100 71.834396 10.284400
+23.184700 69.463501 6.278130
+24.939899 67.306702 7.860470
+13.835500 58.764000 -13.996800
+12.191800 58.546200 -14.274900
+9.305640 63.415001 -16.095301
+10.802900 64.603302 -14.609700
+3.214990 87.661003 10.855300
+0.440687 88.213203 5.582610
+1.358450 87.317902 9.749210
+1.912420 86.119904 14.886300
+3.291590 88.798698 3.822210
+-1.069590 89.437897 4.293960
+1.715880 90.725502 -4.393910
+1.368950 90.849602 -6.506240
+1.112520 89.802902 -8.351370
+3.038680 88.723900 -3.419720
+5.292950 88.501602 -1.725220
+17.471500 46.920399 29.356899
+12.391200 64.700500 32.609200
+15.522800 63.701099 32.092098
+15.104800 65.533401 30.768400
+6.221240 60.033401 36.056301
+4.570600 62.805801 36.301998
+18.138500 30.300900 18.951099
+15.861900 30.560699 23.882601
+13.118000 28.125000 27.381100
+12.094800 30.499001 27.392900
+17.014500 29.252300 22.688999
+-24.437099 -17.612600 41.079899
+-22.797100 -16.462000 42.847099
+-25.926701 -18.467400 46.783901
+-38.961800 -14.165000 50.221199
+-37.376801 -16.200100 48.580601
+-37.239300 -16.028700 51.199902
+-34.985298 -17.941099 49.586899
+-34.941799 -16.688900 60.019600
+-36.565701 -16.213301 56.434299
+-35.709000 -17.522200 57.442200
+-37.363701 -15.091100 60.067299
+-33.403500 -17.370300 55.993301
+-30.499901 -17.740000 57.118500
+-40.384300 -14.087100 48.831699
+-40.233601 -11.451600 49.325802
+-33.542999 0.271540 35.158001
+-30.515100 2.124730 32.130798
+-41.211700 -4.518350 39.847599
+-40.805801 -5.109430 38.385502
+-41.019699 -6.129240 40.023300
+-41.933201 -9.112210 38.860500
+-41.796299 -10.271300 36.858200
+-21.064501 12.987400 28.135099
+-20.863899 14.056200 26.961399
+-25.807699 14.116100 26.205299
+-25.595301 16.161501 22.995100
+-23.947201 15.752700 24.744101
+-27.283701 15.600700 23.600800
+-37.521702 -15.092700 31.736500
+-39.076698 -13.527700 33.123600
+-40.990898 -10.958300 34.096100
+-42.247002 -8.663760 34.646099
+-40.034302 -11.436600 32.096199
+-40.805698 -6.003570 33.149101
+-40.897701 -8.088660 32.489201
+-39.623100 -6.044980 20.311399
+-39.648602 -9.397080 22.414301
+-41.360600 -6.526970 22.805000
+-40.780300 -10.480900 25.552200
+-38.718498 -12.489100 26.446199
+-41.974701 -9.410890 30.177700
+-42.299599 -8.365940 28.147100
+-41.419102 -10.514900 27.776699
+-41.949299 -5.852310 24.326401
+-41.380402 -3.864630 24.310400
+-42.285400 -6.984370 29.245800
+-41.243301 -5.471640 30.303400
+-41.574299 -5.873760 37.126499
+-41.101700 -4.930080 34.813702
+-38.827999 -2.032730 38.651402
+-40.007301 -3.549980 39.821301
+-38.632198 -1.046970 41.347198
+-36.807800 -1.310210 34.576302
+-39.816502 -2.873120 35.673199
+-38.042900 -1.443430 35.828300
+-38.887199 -2.866280 33.933601
+-38.688202 -1.515700 30.145201
+-40.293999 -4.269340 33.374901
+-36.455601 -0.469063 32.033401
+-35.953602 7.156700 20.543800
+-36.187901 5.717420 21.591299
+-33.451698 9.558580 23.167500
+-31.956200 12.047400 20.711201
+-34.617500 8.495110 19.726500
+-32.113499 11.688600 18.810301
+-48.124298 -29.903999 71.774696
+-51.394901 -32.612301 70.747101
+-50.679100 -33.889900 69.522499
+-53.639400 -22.585899 70.417000
+-51.930099 -22.348200 69.537003
+-53.920300 -25.016300 71.212898
+-55.383301 -26.014400 73.388702
+-52.159199 -19.850201 72.497200
+-47.912601 -16.361799 68.495399
+-47.768398 -19.449301 69.303200
+-49.076000 -18.238701 69.927902
+-50.368698 -22.887800 73.073303
+-48.640900 -22.780800 71.243301
+-48.068401 -22.439501 70.869301
+-49.040100 -18.661301 75.793198
+-52.583000 -21.245001 73.981796
+-52.204201 -22.369400 74.049500
+-47.179501 -21.137100 74.496399
+-40.654900 -32.243000 69.538597
+-42.647301 -35.802299 68.321198
+-39.033100 -33.516800 67.531799
+-38.550598 -32.077099 68.784203
+-41.417500 -16.694300 64.685699
+-43.344501 -14.446200 66.397903
+-40.523300 -11.691000 64.387398
+-38.222801 -13.803800 62.137199
+-34.094101 -3.644550 69.758499
+-30.948500 -3.545690 67.072800
+-34.618599 -4.879780 67.725899
+-29.353001 -2.469050 68.639000
+-37.841202 -6.443090 68.984299
+-36.742699 -6.067030 67.538300
+-39.509399 -8.726390 66.780998
+-45.602299 -13.202200 69.928596
+-43.514801 -12.262900 68.465202
+-38.538898 -8.211870 74.409599
+-41.336201 -9.618280 70.364998
+-42.215099 -10.646400 72.546204
+-9.541450 18.334000 26.330900
+-13.083900 21.147400 24.602100
+-9.581390 16.942900 26.809401
+-13.605400 20.045000 25.146700
+-10.824200 16.611601 25.893700
+-21.506300 20.218100 15.945500
+-20.101900 21.157000 17.265800
+-25.063400 14.255500 10.282800
+-24.099400 13.815600 8.065150
+-26.605700 13.830000 10.319500
+-21.986099 13.901700 7.150420
+-21.866600 -9.196190 60.345699
+-24.409401 -12.358400 61.695801
+-24.063200 -14.209500 59.520401
+-23.093399 -8.484640 61.958000
+-22.931601 43.142101 23.167999
+-17.267799 44.959000 29.786501
+-17.466101 48.929901 30.192101
+-19.122801 46.236000 27.965700
+-20.795500 42.461300 25.967100
+-16.897400 41.191399 29.139400
+-16.021099 46.313099 31.490999
+-19.133101 -10.376000 44.253601
+-19.131701 -11.603900 41.155499
+-20.474501 -14.414000 41.925301
+-20.770100 -14.755500 38.793499
+-21.557501 -14.761100 35.819901
+-27.514200 -17.820801 54.159801
+-27.756001 -17.138700 58.810001
+-45.069000 -22.209499 66.629799
+-23.084700 37.178699 5.633280
+-21.805300 35.954700 11.519500
+-23.811600 38.169998 7.717480
+-23.391701 38.594501 12.788800
+-15.640700 29.882799 23.660900
+-11.291500 28.790501 27.019100
+-12.140400 30.645100 27.999500
+-14.408800 28.040300 23.529600
+-13.682400 36.487301 27.592699
+-16.052700 37.642899 28.691700
+-18.239300 37.116699 23.263500
+-14.504300 34.692200 26.609900
+-16.839300 33.566002 22.919701
+-14.119000 32.062500 25.076200
+-17.462999 31.569799 19.919100
+-21.299000 36.394100 16.778700
+-19.540199 34.276699 17.610800
+-3.481830 26.075100 30.341801
+-5.420030 27.170601 30.243299
+-11.057200 26.706699 27.423700
+-9.851230 24.500401 28.137899
+-17.369200 28.159401 18.304001
+-17.073900 26.383200 20.089899
+-18.230400 26.477301 15.705000
+-17.032301 25.216801 19.340200
+-13.833500 25.153500 25.032700
+-13.364900 23.857300 25.122000
+7.533980 27.027201 29.775700
+5.323300 28.909000 28.761299
+4.995710 27.221901 29.579700
+4.490310 25.419100 30.139400
+5.030640 23.172600 28.198200
+2.086400 25.557501 29.580601
+3.845470 21.023600 28.722500
+3.141650 19.845600 28.440399
+-17.691401 33.201099 -2.850790
+-16.499701 32.094002 -3.512180
+-16.682400 31.205900 -2.260920
+-14.928600 30.195400 -2.786430
+-12.626800 27.893700 -4.255280
+-12.671900 31.041000 -5.981120
+-11.656300 31.298800 -6.942910
+-16.156200 32.305698 -5.645010
+-14.649900 32.429298 -7.552080
+-13.717100 33.265301 -9.660590
+5.168330 58.137501 -16.256399
+3.489100 57.120800 -16.347601
+1.223790 55.177399 -16.764400
+-19.117701 29.030100 8.965760
+-18.907400 30.232500 10.678600
+-19.826500 32.438999 6.306440
+-19.636499 31.750601 4.497500
+-20.180799 33.538799 10.670500
+-19.893499 33.782200 13.614200
+-21.744699 35.440601 2.594990
+-21.127899 33.886501 6.783600
+-23.880301 39.147499 -1.630090
+-10.500000 34.251900 -11.539900
+-5.268800 41.995701 -15.380100
+-3.836830 41.062901 -14.163200
+-5.199580 38.659599 -13.940200
+-13.608000 35.318298 -11.853600
+-18.518600 47.532299 -14.568700
+-15.172600 47.955601 -15.681400
+-16.536400 49.933899 -15.266100
+-11.547700 53.070599 -14.967800
+0.258518 39.056198 -15.122700
+-1.970700 22.464500 -7.726310
+2.350450 22.242500 -7.181550
+2.007470 20.172899 -7.578690
+-3.108000 21.080299 -7.822530
+7.064640 31.398100 -8.567370
+8.031660 30.103901 -7.150520
+-1.815210 35.701302 -12.413000
+-2.951470 33.487301 -11.980100
+-3.775450 35.563400 -12.289300
+-5.746590 33.092098 -11.857200
+-8.356270 32.297100 -10.725500
+-8.226430 30.059299 -10.291700
+18.336100 21.449100 -19.629900
+20.896999 19.777700 -23.264200
+21.631701 22.046600 -23.674700
+21.750200 30.163900 -8.649900
+21.547001 30.574800 -4.936340
+18.970200 29.486700 -5.447970
+19.760900 29.287901 -0.195832
+18.582600 29.986900 -2.420950
+17.868200 29.072500 -1.003590
+13.702300 26.472799 -4.233480
+12.664600 27.300699 -3.876150
+22.122499 30.164600 0.554174
+23.617599 30.402800 -2.072170
+24.824600 60.860199 -5.224820
+39.886700 65.831802 -7.073550
+41.227600 67.426102 -7.546030
+43.783199 65.827400 -9.481400
+41.612900 62.934601 -11.277600
+41.618099 60.552299 -11.777900
+39.542599 62.585499 -10.841800
+41.510101 58.209499 -10.915300
+45.350700 58.323002 -11.525800
+46.744900 59.809898 -11.227900
+45.042500 56.717201 -10.639100
+44.218102 55.592098 -10.559200
+36.698799 64.725098 -7.917280
+37.603100 63.621498 -9.022820
+36.941601 61.479401 -6.897590
+37.136799 59.369598 -6.701060
+39.293800 57.198200 -8.408040
+38.843899 58.382702 -9.752650
+41.005402 56.966301 -10.775300
+44.074600 54.620998 -8.417020
+41.520100 55.793301 -9.181510
+38.821499 48.631901 -7.682240
+38.230499 49.993000 -8.582370
+37.122601 46.358799 -5.530060
+33.555500 48.763401 -8.739730
+37.552799 61.317699 5.209390
+36.234798 60.719299 4.751680
+36.023201 62.333099 -0.836451
+36.566898 62.482201 1.840090
+36.105999 62.981899 -3.532480
+36.109299 60.936798 -4.930200
+31.310600 59.910500 -5.358300
+30.140100 60.474701 -4.516030
+34.873100 59.010201 -5.185110
+32.297298 58.003700 -5.561980
+36.679798 55.208302 -7.822530
+34.693699 52.795799 -8.344050
+38.155201 54.570499 -8.226620
+39.766800 51.766701 -8.219550
+35.680199 50.892700 -8.230540
+29.826799 44.303600 -3.944950
+32.348701 44.141701 -4.127040
+29.016300 45.696400 -5.792470
+38.319199 44.444599 -1.070680
+36.155899 43.625099 -0.870536
+34.065102 43.708401 -1.695460
+35.377300 43.642601 1.042160
+35.481800 44.811798 -4.844430
+34.668301 46.413700 -6.608900
+31.446400 45.717400 -6.098740
+32.639500 46.431900 -6.482610
+31.536501 48.418499 -8.383500
+28.886400 47.783600 -7.673630
+28.481100 49.125599 -7.453240
+31.464100 49.678699 -7.927240
+22.132999 24.919901 10.479700
+16.340099 38.815300 -9.646350
+15.268000 40.843399 -11.607500
+15.507000 37.329300 -8.364170
+13.823700 37.942600 -11.053000
+-15.625900 -2.971800 9.040240
+-18.652100 -5.747940 11.902900
+-14.210000 -3.849880 11.162000
+-27.747700 -10.535000 18.824301
+-28.438700 -9.998470 17.689501
+-24.563101 -10.005500 21.112801
+-27.570000 -10.818600 21.912701
+-22.681999 -9.416540 19.541401
+-21.309601 -8.474370 17.744200
+-18.076200 -6.811520 14.874800
+-18.180401 -7.239100 17.499701
+-14.550400 -5.076320 14.244700
+0.095638 84.600899 -24.984501
+-1.190870 83.007896 -25.804899
+0.161921 82.672203 -25.497000
+1.533290 83.661102 -24.843300
+2.351870 83.040802 -26.275101
+10.386400 87.914101 -14.784000
+11.023200 94.661797 -14.249300
+8.984030 82.184097 -13.942700
+12.584300 86.210403 -16.843599
+18.641300 55.618500 -11.215800
+19.503599 54.195202 -11.365200
+16.983601 53.496300 -13.129500
+15.767100 54.424000 -12.812000
+17.752701 57.137001 -10.386800
+22.108200 42.649300 -3.687470
+19.860201 44.155998 -9.579620
+21.951599 44.343399 -5.705290
+20.720600 42.053001 -6.833310
+19.193100 40.873402 -8.111490
+16.814199 42.210201 -11.661800
+17.730301 46.054401 -12.682800
+18.657600 49.599201 -12.344100
+17.794201 51.312000 -13.029300
+3.571030 41.444901 -16.174900
+8.114410 43.284302 -16.244801
+4.096130 39.251598 -15.470700
+9.407640 40.919601 -15.347600
+13.595400 51.065800 -14.599300
+12.048500 52.056499 -14.849300
+8.398160 47.535198 -16.364500
+7.551000 48.788399 -16.286900
+12.091700 46.136700 -15.478500
+-17.531000 21.654600 4.904770
+-17.238600 19.933701 4.445580
+-12.414800 26.645300 -2.463530
+-10.914400 26.784201 -3.963990
+-33.262600 -17.523500 45.607498
+-31.189699 -19.108299 45.552601
+-32.588902 -17.678900 48.883598
+-32.907200 -17.451900 41.863899
+9.506470 88.394302 -18.972099
+6.572120 84.059402 -20.445499
+8.368550 91.070198 -19.639700
+11.061200 85.324303 -19.028400
+6.206160 88.522697 -22.506001
+7.444010 89.837196 -25.163401
+7.027120 89.444901 -25.889700
+7.515160 92.911903 -25.371201
+10.209300 100.135002 -21.984501
+8.956030 96.814598 -23.867201
+6.912050 92.352699 -22.421301
+6.592260 93.990097 -24.218000
+6.178650 95.021698 -15.728300
+8.199360 77.053398 -24.361401
+7.300870 76.012398 -25.722700
+7.827620 78.019203 -26.082001
+9.198740 73.949997 -24.881201
+7.544350 74.422501 -26.733500
+12.904600 72.973701 -14.208000
+13.832400 73.261902 -11.350200
+6.641900 84.300400 -10.858200
+10.250100 80.164597 -9.262480
+8.136130 82.759697 -11.804900
+10.396100 80.517197 -10.753600
+10.820700 78.504204 -10.821500
+10.666800 79.833397 -11.992600
+12.153200 76.288498 -8.679680
+12.860900 75.735199 -8.770490
+12.519200 75.099297 -11.677800
+11.416700 77.709503 -14.555000
+12.060600 77.105904 -11.625400
+10.671100 78.257896 -12.922600
+14.818900 71.934998 -8.050880
+11.562700 75.512398 -15.553900
+9.982790 78.712196 -17.518801
+50.410301 78.696800 -6.748390
+49.685699 81.836800 -3.717380
+51.683899 81.654999 -3.250880
+49.333900 94.426804 -1.787570
+49.750599 86.947998 -3.005340
+51.167198 84.177696 -3.927600
+46.144600 99.387802 7.343020
+45.035099 98.589302 8.551670
+42.123798 103.970001 4.508070
+44.377602 102.777000 5.505170
+47.280102 99.857597 3.744230
+46.264099 100.620003 4.762520
+47.921200 98.537903 5.653230
+51.141102 94.392799 -3.295340
+50.858501 96.537399 -2.032360
+46.709999 94.495598 -1.303040
+47.483299 96.998497 -1.188610
+43.347198 97.912697 1.104470
+42.183201 100.254997 2.301550
+45.527199 98.359001 1.171180
+46.249599 99.695702 1.511950
+46.691299 99.410797 2.979040
+46.134701 100.031998 3.373380
+45.148899 103.228996 3.098130
+44.128601 104.809998 2.725610
+55.331799 85.074997 1.299220
+55.014702 84.470200 -1.438580
+53.365002 80.469803 -2.838690
+53.399101 82.367401 -1.675890
+54.846901 84.496902 4.783950
+55.453701 78.932899 -0.620145
+54.810501 80.174004 2.614200
+55.858700 78.498299 0.678388
+56.604401 74.151802 -2.060460
+54.661800 81.618301 2.732970
+54.107101 81.355797 0.228233
+54.503502 82.755402 5.483440
+38.852699 94.605103 8.990240
+38.053600 95.757202 6.667290
+40.871700 94.261299 10.311300
+41.146198 92.132202 10.991800
+41.613602 74.969704 9.661930
+40.714199 71.667000 9.277860
+43.158100 70.618797 10.389600
+48.468102 92.716797 10.114500
+48.324902 90.503700 10.117000
+44.725201 89.945396 11.388300
+45.181599 86.586700 10.608600
+48.558998 86.433998 9.710690
+42.444401 87.978104 10.830800
+41.017200 87.937897 8.710540
+42.641499 85.925697 9.833400
+48.356800 83.863602 -3.256950
+46.168999 83.078903 -2.679310
+48.058998 90.208900 -1.467340
+45.262901 69.259697 -8.686920
+45.513802 69.476898 -10.180700
+46.114700 73.458000 -9.272240
+45.716202 71.736603 -8.166300
+47.917900 71.683800 -9.883910
+47.341099 75.760597 -9.161490
+52.460300 66.334801 -8.029030
+53.384102 65.417603 -7.709340
+55.998100 71.659500 -2.990520
+54.444801 72.244102 -5.510970
+56.843601 69.704399 -1.227290
+53.737900 69.713799 -7.277120
+52.826302 71.409897 -7.534490
+45.802700 54.104301 5.682030
+45.988201 51.818901 3.675990
+47.093800 52.893002 -4.309100
+48.014702 54.297798 -3.747370
+48.188301 53.700500 -2.468120
+47.214699 52.526402 -1.065030
+45.317402 49.956001 -1.615760
+48.400902 54.560600 -0.340197
+53.496300 60.588699 -5.907210
+54.777699 61.776001 -4.499780
+54.356899 64.229500 -5.472180
+54.840801 61.231800 -1.907340
+55.449699 63.572201 -2.098260
+55.258400 60.131401 0.901737
+55.683498 65.724503 -4.438440
+55.429798 67.611099 -4.054500
+55.823101 69.255997 -4.063670
+56.278099 65.994202 -1.937050
+56.829601 68.319901 -0.169324
+57.512901 67.158897 1.450620
+57.077599 63.895500 1.303030
+57.672798 66.025497 4.429630
+37.471298 64.829697 4.581970
+37.858299 62.490601 4.744720
+36.256901 64.456596 1.673110
+36.211102 65.097900 0.597961
+36.822601 66.478798 2.784470
+36.978100 64.695801 2.467520
+50.587502 57.375999 4.975030
+51.529999 58.528500 6.550920
+58.046200 70.758499 5.973310
+57.254299 68.677498 7.776070
+5.428030 32.553699 31.438400
+5.080430 30.344700 30.862801
+6.824270 30.595699 29.813400
+8.537220 34.298000 29.709000
+-0.185187 34.468102 31.771500
+2.542730 35.014702 31.732100
+-2.527080 37.584900 31.972601
+5.781490 34.282101 31.198601
+-4.408270 34.939301 31.007900
+-5.079350 36.756599 32.279598
+-9.466330 54.219799 35.515202
+-11.603300 49.345299 34.676399
+-8.900600 48.567902 35.791199
+-9.617810 52.339699 36.171001
+-8.038970 52.853001 35.915100
+-9.414620 42.402802 34.110298
+-7.735640 48.378101 35.525501
+-13.319800 42.230099 31.988701
+-14.642000 40.717999 29.792200
+-12.810700 40.611401 31.116800
+-13.682600 39.184399 30.996799
+-10.045100 39.722801 32.677898
+-21.646700 -2.193490 41.380600
+-20.945000 -3.978100 45.089100
+-20.369699 -4.410280 41.570400
+-20.999901 -3.749990 37.899101
+-20.088400 -6.771380 37.385799
+-20.359600 -5.934730 36.070499
+-22.445999 -1.496510 44.797798
+-25.343100 0.416127 32.452999
+-23.182501 -1.268250 31.783100
+-23.745600 -2.614280 34.507999
+-22.776400 -3.374080 35.869701
+-41.032600 -10.597100 45.676899
+-41.196098 -10.836200 43.017300
+-40.831299 -8.829720 44.429199
+-41.049198 -7.396580 45.687901
+-40.431301 -5.122130 47.533501
+-41.058899 -6.647260 49.667500
+-40.002102 -5.326050 51.444698
+-38.675701 -2.749030 52.157398
+-40.358299 -5.048820 45.695099
+-40.445801 -5.447360 40.983700
+-40.503799 -4.991520 42.771400
+-39.778702 -2.674810 43.736301
+-38.904400 -1.643430 46.159500
+-35.230499 0.427367 37.292198
+-36.834400 0.063561 39.316200
+-1.016220 7.619910 20.852200
+-7.412440 1.560130 9.801530
+-6.430820 3.852620 6.516030
+-5.197190 1.611560 11.270100
+-10.352500 9.290420 0.629916
+-13.940200 8.312750 2.111870
+21.770700 17.043699 14.711300
+21.548901 21.731300 13.873700
+18.488400 24.370600 16.933599
+17.439800 22.942600 19.716499
+19.728800 23.111000 17.055099
+20.575399 23.434401 15.293700
+19.239201 19.761101 17.382900
+20.557600 21.455099 16.038099
+19.254601 18.224001 17.377600
+20.989300 19.683001 16.043800
+19.090200 5.959720 -2.390920
+17.845100 6.760860 -2.274230
+20.250799 7.189340 -6.962740
+9.831090 11.096200 -4.592600
+13.997600 9.346320 -6.570620
+18.189899 9.449260 -12.073200
+18.979900 7.329900 -7.637650
+17.418900 8.104310 -8.617240
+4.857780 7.066870 24.250200
+8.775220 4.074760 23.678600
+6.731690 5.109520 25.749100
+6.087670 6.908880 29.492399
+5.939820 4.891530 28.251101
+-34.882099 3.510890 13.011300
+-34.956600 5.845090 14.641400
+-34.415798 5.151700 12.121100
+-32.769402 7.415720 11.346100
+-31.208500 5.567810 9.612180
+-30.073999 4.841340 8.109700
+-27.553900 -0.416221 7.335150
+-26.683399 2.072090 6.323470
+-40.393501 -11.957700 29.239599
+-39.224201 -12.656500 28.855700
+-35.528702 -12.584600 25.725201
+-34.671001 -12.047400 24.798599
+-14.300400 -4.660560 23.037001
+-16.970400 -4.894010 25.309900
+-15.890400 -5.693770 23.033199
+-14.820900 -4.614000 25.332800
+-19.818399 -4.674290 28.872499
+-21.092501 -5.249070 30.256399
+-18.561100 -5.851420 26.709200
+-19.190300 -6.595080 25.421900
+-7.765320 -0.828805 20.095301
+-9.381340 -2.379140 21.323099
+-9.773940 -2.620380 19.632500
+-16.454599 -1.402760 28.398100
+-14.542500 -0.763499 27.673201
+-13.206600 -3.712000 23.300100
+-14.022500 -3.220020 24.883301
+-10.776500 -0.484365 24.600800
+-8.347570 0.408992 22.503201
+-11.493500 -2.442270 23.169399
+-13.348500 -1.518010 25.601999
+-11.591000 -3.465410 20.608101
+-13.065200 -3.877470 21.672400
+-13.001000 -4.895020 20.235001
+-14.525300 -6.123740 20.577101
+-17.205700 -6.544070 23.379999
+-17.479799 -6.397350 25.233400
+-18.669800 -6.587380 22.888700
+-15.770300 -5.700990 19.347601
+-12.020600 -3.787590 16.125500
+-25.124599 5.215830 4.904240
+-27.928101 5.078560 6.208280
+-24.110399 1.797580 4.864070
+-23.716299 3.870350 4.855430
+-5.139010 9.975100 -2.724250
+-6.213300 9.769930 -0.807167
+-9.122680 10.828600 -0.390356
+-12.443200 12.717200 0.361994
+24.658701 51.206799 22.086201
+25.239799 50.274899 20.299299
+24.684099 59.670799 21.269699
+25.593901 57.156200 19.178801
+23.382200 61.685600 21.740000
+24.456699 60.274399 19.582399
+24.444300 48.148201 18.294001
+25.176100 51.632999 18.660400
+23.764999 48.295200 21.048901
+23.205000 48.897598 22.627399
+23.603600 51.232800 23.840700
+23.733801 57.336700 22.500200
+23.847601 52.126598 22.810900
+23.672300 57.548000 23.726999
+27.294600 61.792500 -2.438190
+26.869200 60.921101 -4.148600
+24.422001 67.510399 2.906550
+25.750500 65.254097 11.507100
+24.159300 67.449097 12.967300
+25.874800 63.401798 12.860100
+26.047100 64.460602 9.442590
+25.023399 66.474998 9.119740
+25.796801 64.601799 6.036250
+16.573999 75.682899 -1.539650
+18.403500 72.305298 0.333835
+15.043300 78.324203 -2.346840
+19.374800 72.796402 -1.365700
+15.032700 79.331497 -4.046870
+14.110800 78.966301 -6.040830
+14.320500 78.968903 -0.375274
+13.399700 79.537598 -2.639580
+14.657800 79.927498 4.401090
+14.537300 79.297699 2.232730
+15.764100 80.026604 8.139070
+14.312200 66.827499 31.403200
+11.194700 66.753098 33.555698
+16.837799 68.036598 29.166700
+23.631901 64.231598 21.648600
+21.800100 64.396797 23.291800
+24.543400 63.615299 19.876699
+22.566999 67.764702 20.493299
+21.843000 67.062401 21.503000
+21.659100 67.112396 23.422600
+19.733500 66.464600 25.679501
+20.493000 68.449699 23.600500
+11.000800 82.802399 14.685500
+9.919030 84.779800 13.359900
+7.284640 84.663696 14.971800
+11.637800 82.919701 12.419700
+12.073500 81.484100 14.517000
+11.570900 82.316498 16.226400
+15.394800 79.305000 15.254000
+15.304100 79.294098 16.518000
+15.595800 77.691101 17.710400
+14.248600 77.654503 19.274500
+22.617201 68.764198 19.071501
+23.440100 66.027199 19.503099
+24.205601 67.119797 17.600700
+22.580000 70.096397 17.707300
+21.242001 71.075798 17.963600
+25.723301 58.519798 16.771601
+25.404200 56.397301 17.923300
+25.409700 63.273998 17.347099
+25.889900 60.547298 17.622601
+24.251301 64.598701 17.563200
+24.523300 62.147900 18.931400
+23.041401 68.245598 17.567200
+23.510799 67.697098 16.183399
+20.973101 71.662804 16.264099
+19.277599 74.406303 15.963800
+17.888800 76.396797 14.002600
+16.635201 77.207497 15.408700
+24.541800 67.776497 12.139500
+24.803801 67.834000 11.061500
+23.099600 69.485001 10.284900
+22.390100 70.016098 12.143400
+24.868099 66.773903 14.067600
+23.565500 69.562798 14.811900
+18.693199 61.976700 -11.674400
+16.732100 62.535301 -11.831800
+14.833100 57.460499 -12.525200
+12.624300 56.909100 -12.988800
+17.279200 58.953999 -12.215900
+19.180000 59.225498 -11.136700
+-0.776689 90.735001 -5.550410
+-1.856660 90.982903 -6.884960
+4.641480 87.763802 3.076640
+2.647330 88.528503 6.244890
+2.673990 88.425697 5.128170
+5.185770 87.038597 4.667220
+3.869400 86.564598 14.563300
+5.000710 85.668800 15.243400
+2.677410 86.082298 16.819201
+0.012261 86.299896 15.687900
+-0.796327 87.179604 14.538800
+-1.374300 64.439102 35.551102
+-2.816210 65.010101 34.843102
+1.613660 57.861198 37.458599
+1.563640 62.556499 36.916302
+-1.345080 56.987801 37.163300
+1.879620 81.151199 24.914801
+5.202080 80.907898 24.273899
+2.157020 82.053703 24.144600
+2.699840 80.329002 26.495399
+6.167620 82.468597 22.160101
+-6.389940 61.974499 35.922901
+-7.629430 58.710400 35.652699
+-1.847490 66.764900 35.354099
+-3.060090 66.752602 34.715500
+-3.064330 69.508003 33.803101
+10.058900 79.180298 23.877899
+8.284780 80.100098 24.547199
+9.512830 77.722397 27.025801
+10.625200 76.039803 27.166401
+11.218700 79.408401 23.259399
+1.702900 64.103996 35.904499
+1.642050 65.550301 36.070301
+13.827500 63.279900 33.280499
+13.549800 59.310101 33.893799
+12.210800 62.604099 33.645599
+13.829500 55.241699 34.335300
+15.302900 45.507500 30.847401
+16.242599 46.438599 30.658899
+15.983400 48.526100 30.989799
+12.027100 46.664501 33.322601
+12.635100 44.034401 31.749599
+13.611600 45.786900 32.241001
+14.201400 51.160900 33.532799
+9.732730 48.166401 34.177700
+11.361800 52.040901 34.779099
+12.526300 50.753601 33.559700
+14.134700 52.907501 33.302601
+12.364900 55.601200 34.427101
+12.205600 53.455399 33.731098
+11.303100 55.764702 35.324200
+5.065110 47.272301 35.280399
+8.814390 45.338001 34.243801
+5.348210 49.027500 36.029598
+3.165970 54.858700 36.064602
+4.987220 54.863800 36.403301
+-36.115799 -16.833900 39.177502
+-33.734699 -17.748899 39.493698
+-31.021400 -16.606501 35.074299
+-28.297199 -17.893200 35.964100
+-32.044701 -16.954800 37.274502
+-27.243500 -18.177900 39.408401
+-29.044600 -18.801100 41.269100
+-35.395302 -16.980801 51.998299
+-32.632301 -17.722900 52.531799
+-37.265099 -16.653400 53.852001
+-35.726398 -16.639200 62.124500
+-29.860001 -16.663500 63.534302
+-31.218599 -16.669600 61.230999
+-28.178301 -16.087299 61.017799
+-30.856800 13.278800 15.794900
+-32.878399 10.703600 15.782100
+-35.502399 7.357810 22.684999
+-34.081902 8.344860 24.729900
+-36.851601 5.101710 24.129400
+-36.653500 1.218770 15.101500
+-37.490700 -0.838836 16.264601
+-38.645802 -3.686000 20.121700
+-37.535702 -5.436050 19.066900
+-38.942600 -0.999884 20.414101
+-38.375500 0.507464 20.404100
+-38.462399 1.864400 22.722900
+-38.819901 1.087320 23.650101
+-39.215698 -2.225170 22.430300
+-38.937801 -0.656610 24.780800
+-18.814899 8.877830 29.853201
+-17.541201 7.655960 30.057600
+-24.306000 7.893560 30.077000
+-25.799101 6.768960 30.358400
+-33.610802 5.703630 28.119301
+-30.931000 6.142270 29.412300
+-34.829102 5.845430 26.392000
+-34.440701 6.800070 25.371201
+-19.915800 5.071000 30.646400
+-22.144501 4.808080 30.980700
+-29.221100 4.461210 30.925600
+-27.264400 5.516430 30.842699
+-34.152802 3.870270 27.978100
+-31.733200 4.527970 29.580900
+-32.821999 3.750840 29.998501
+-36.611099 3.660360 25.963400
+-36.548401 2.870630 27.136101
+-37.572201 4.359240 21.478800
+-37.093201 4.339390 22.835501
+-37.809299 1.990300 25.333099
+-37.281700 2.677670 24.035801
+-33.189201 1.954650 30.796700
+-32.716099 1.228170 32.936501
+-37.706299 0.634786 27.154499
+-36.439201 1.080730 28.683701
+-47.990501 -17.596201 76.936798
+-45.392399 -20.931801 74.732697
+-44.672199 -18.592199 75.055901
+-45.946400 -12.697100 74.394699
+-43.416302 -12.079500 76.037697
+-39.933800 -10.453400 75.944504
+-42.108299 -31.795799 67.666100
+-42.673801 -31.225401 68.579300
+-42.225300 -27.324400 69.783699
+-41.897400 -26.812700 70.374199
+-43.018200 -26.841499 70.480202
+-43.153198 -26.984800 69.269203
+-42.019001 -26.474600 69.279297
+-40.828999 -24.805300 67.500702
+-40.578098 -26.555000 67.606903
+-38.664299 -26.530199 65.251297
+-38.632599 -25.274599 64.299797
+-40.801498 -23.879000 65.871803
+-41.422798 -27.938801 69.582397
+-40.902000 -27.942699 70.519402
+-40.387798 -26.452700 71.716202
+-43.116600 -25.927500 71.933601
+-39.345901 -10.959700 61.223099
+-33.996300 -3.800150 64.846001
+-31.807301 -2.934370 62.645199
+-27.875099 -2.946320 62.890999
+-31.402700 -2.612810 71.015602
+-33.513500 -3.390820 73.245697
+-23.743999 -11.065800 65.858902
+-22.896799 -7.834950 67.244003
+-22.534700 -10.048900 68.692802
+-23.623899 -12.534600 69.204697
+-21.347099 -8.867620 70.656097
+-22.928101 -11.888100 71.597702
+-22.681000 -8.146550 73.367599
+-25.397800 -13.065600 73.462097
+-24.241699 -8.404750 65.024300
+-25.116800 -5.591280 65.552299
+-26.320299 -14.022700 64.141502
+-24.418699 -11.081300 64.305099
+-38.519199 -23.687599 64.300797
+-31.908899 -19.027901 64.070503
+-32.702000 -17.704100 63.189098
+-35.434399 -20.223600 63.809601
+-35.299599 -18.600700 63.178501
+-28.905100 -17.257000 64.859497
+-25.914499 -14.952500 65.655098
+-25.897200 -14.644800 69.099602
+-24.697901 -12.746400 67.422203
+-26.014500 -15.461100 71.657204
+-24.767401 -14.200200 70.926399
+-24.304501 -9.040230 74.128601
+-28.873199 -17.509701 72.753098
+-28.387100 -15.429600 73.666496
+-18.205400 14.287900 27.386200
+-20.029200 15.391200 26.618299
+-15.001500 12.271000 28.141100
+-13.202400 10.834900 28.484900
+-21.294901 17.028200 24.814400
+-19.808100 17.055799 24.571600
+-15.226300 14.666600 26.648800
+-16.983999 15.118300 26.403700
+-10.700300 13.105000 26.346001
+-8.606270 11.853000 26.447300
+-19.314699 17.929899 4.764800
+-21.237301 16.789600 6.884850
+-25.414000 -16.437599 54.861698
+-22.212700 -13.844700 53.881100
+-21.845501 -11.945300 57.051899
+-22.917999 -15.542700 51.404202
+-20.641100 -5.996330 46.972599
+-19.512199 -7.239690 44.026501
+-29.410999 -18.678101 51.348099
+-31.759800 -18.690500 50.405998
+-30.146799 -18.494400 47.826698
+-28.446100 -18.709000 48.109501
+-25.296600 -17.489201 50.219799
+-22.988600 -16.514200 46.782501
+-23.504400 -14.230400 32.338902
+-22.145100 -12.711000 32.779598
+-24.771601 -17.130699 36.476601
+-24.646400 -16.758200 34.900501
+-46.694302 -22.244400 69.475197
+-47.397099 -23.170200 70.667503
+-40.437099 -20.886999 64.173302
+-39.868999 -22.014000 65.046501
+-42.933800 -23.875500 66.436996
+-45.402500 -25.386600 65.606796
+-43.693199 -22.582199 65.799797
+-25.675501 40.474701 9.951900
+-24.969999 39.746498 14.610100
+-24.466400 39.837299 6.358870
+-24.928200 41.154499 4.005280
+-24.658001 39.963902 2.869870
+-25.059000 41.169399 1.914430
+-23.850800 42.084202 20.320900
+-22.270901 40.544300 21.658001
+-21.424000 42.186798 24.263901
+-22.669100 41.917400 22.958799
+-20.415100 40.563099 24.027100
+-17.468901 40.165401 27.412901
+-24.015200 39.666302 17.855801
+-22.446600 39.461899 21.463499
+-19.425600 38.733700 25.793600
+-20.622101 38.278400 23.583200
+-20.416300 37.544800 19.985500
+-22.495300 38.346199 16.204700
+-18.535601 27.274401 13.460500
+-18.288700 27.083401 11.190300
+-19.140800 25.189501 8.480770
+-18.973801 27.128000 8.568880
+-19.073999 29.002199 14.771800
+-18.317400 29.684200 18.424700
+-19.838900 31.869801 10.156600
+-18.919600 30.606001 13.680100
+-6.051970 62.540501 -37.776699
+-5.587520 62.846802 -39.469200
+12.082000 26.567600 27.290899
+14.919700 27.208599 24.991301
+10.048600 28.016500 28.040701
+7.658960 25.146799 28.399099
+8.363460 29.491501 30.079901
+9.270360 28.722300 29.330299
+10.310300 33.126701 30.546700
+-18.521000 34.035000 -4.233280
+-18.888500 35.475700 -6.296790
+-19.842501 35.126701 -2.964730
+-0.333252 54.869301 -16.873301
+0.582918 53.428799 -16.221901
+5.138640 55.252102 -15.893400
+6.149120 54.797600 -15.654800
+-24.083000 41.507000 -5.359520
+-21.921801 39.250198 -4.994850
+-22.913300 39.471500 -3.062560
+-21.622499 41.049301 -8.344490
+-21.338301 38.941200 -7.486830
+-20.100700 41.478001 -11.187700
+-19.035400 39.325600 -11.224800
+-20.853399 39.889500 -9.334080
+-19.246700 38.077999 -8.401350
+-22.838900 42.416100 -8.727070
+-21.534300 43.074501 -11.022300
+-17.638100 28.692600 2.713450
+-17.741600 30.772200 0.403143
+-18.558701 33.254101 -0.374678
+-18.341499 31.695299 2.597690
+-20.017401 32.866299 1.042040
+-21.167000 34.830002 -1.328640
+-20.494900 34.559700 1.789180
+-21.644199 36.924702 -1.647630
+-20.679001 36.701099 -3.652780
+-21.117901 37.655300 -4.807410
+-18.533899 36.590698 -8.610890
+-17.322001 36.152500 -9.874940
+-17.126600 38.412102 -12.208300
+-15.414000 36.532001 -11.785400
+-13.757500 36.985001 -13.237300
+-15.951900 40.522099 -14.202500
+-8.911660 33.989899 -9.788970
+-10.796600 32.428398 -8.278860
+-6.270110 35.735901 -11.418300
+-4.971310 37.044201 -12.230500
+-6.679820 36.509102 -13.261600
+-9.761310 37.732399 -14.785700
+-6.949890 38.419601 -14.702600
+-6.970180 41.273899 -15.662100
+-12.043100 35.435799 -12.744500
+-9.777180 35.799599 -13.256200
+-10.958700 39.582500 -15.357500
+-11.860000 38.047501 -14.623400
+-8.425160 57.347801 -16.703300
+-2.936980 53.230499 -16.022499
+-4.654210 54.738098 -16.591000
+-0.824995 49.127602 -15.253700
+-2.626770 50.164799 -15.389100
+-7.502420 53.806801 -15.815500
+-5.817500 52.384201 -15.314000
+-5.557870 50.862801 -14.136900
+-6.570760 51.884201 -14.178100
+-4.591680 46.531601 -15.373900
+-4.951760 47.912300 -15.268900
+-7.745580 47.809601 -15.803600
+-6.948410 45.366100 -15.889600
+16.540600 34.895302 -5.462110
+14.743000 32.917801 -4.663930
+15.371900 35.654499 -7.362230
+18.483500 33.530499 -0.700226
+19.315701 34.838699 -1.820460
+16.514000 33.765999 -2.129380
+17.369101 32.380402 1.006800
+16.629900 29.060200 -0.741281
+12.095700 28.147400 -2.871310
+13.132200 28.303200 -2.461780
+22.224701 28.983999 1.972720
+21.732700 28.830400 3.014660
+20.475000 28.316000 3.295260
+18.753000 28.923000 1.471540
+15.032000 29.138100 -1.258170
+16.331499 29.079901 -0.129017
+16.627399 29.370899 1.275680
+16.179899 29.617300 0.918475
+16.367800 31.773701 -1.151670
+10.235000 28.898199 -5.062190
+14.477900 29.902901 -1.925110
+18.667299 32.521000 1.857540
+18.819700 33.239799 1.192060
+17.690100 31.388000 3.671680
+18.779400 31.734800 5.076420
+16.628401 30.976700 0.612825
+15.661800 31.086300 -1.082360
+10.353200 31.141899 -6.614580
+12.745300 30.871401 -4.085530
+12.773500 32.494400 -7.574870
+11.155900 31.771700 -8.086130
+9.312840 32.313801 -9.974960
+6.474180 33.132000 -11.056400
+-10.739100 21.569599 -2.285500
+-9.761620 21.903999 -3.509960
+1.058720 18.279200 -6.832210
+1.591480 16.544100 -6.900650
+-4.204420 18.004499 -6.272880
+-3.192490 18.957300 -7.157560
+-9.060480 19.276501 -5.011420
+-7.164460 20.729300 -6.281610
+-8.989200 21.648600 -5.050580
+-7.536500 22.129700 -5.892550
+-11.266300 27.998100 -5.616110
+-10.098800 26.877701 -6.292930
+-9.401270 23.163799 -6.010070
+-10.126400 23.994200 -5.700110
+14.375900 22.397100 -13.024000
+16.472799 24.701500 -14.360400
+21.076401 27.043600 -18.345800
+18.970699 25.301901 -17.910700
+16.073601 19.139400 -17.042700
+17.063200 18.664301 -17.907400
+14.504100 17.473600 -14.216400
+15.514900 16.054100 -16.206600
+16.961000 22.272900 -17.136101
+14.808800 20.288200 -14.650500
+18.629299 17.996799 -20.348900
+20.770300 59.950199 -11.345900
+21.347700 60.453602 -10.757000
+21.443800 62.438900 -9.445240
+21.609900 63.987801 -8.800980
+21.063101 66.395500 -7.296390
+12.356700 41.236099 -14.124400
+13.056700 43.373402 -14.799800
+-11.056900 -0.967571 8.930090
+-10.211600 -1.638620 11.236800
+9.832720 98.124496 -14.782500
+7.875300 91.810097 -14.384600
+8.556640 99.524498 -16.070499
+-2.576990 42.889702 -14.805400
+-2.543140 39.888401 -14.169100
+-0.363481 36.196999 -12.206800
+-0.969900 37.361599 -12.916000
+0.824022 36.653400 -13.728100
+1.044610 37.403000 -14.478600
+5.365010 35.733299 -13.546200
+6.587530 36.504200 -13.866100
+17.202999 47.802601 -13.399000
+15.630500 48.502300 -14.156400
+10.174800 79.243202 -14.969300
+9.511540 80.364098 -14.703800
+9.641580 81.114700 -16.101500
+11.309400 83.255898 -16.789600
+10.548100 82.388603 -19.087400
+9.968070 82.432999 -19.817801
+7.319980 83.456802 -21.745899
+12.565400 87.587601 -17.645599
+12.716800 85.670502 -17.974501
+13.535300 90.257698 -16.953899
+9.630740 96.180603 -19.126801
+8.313180 94.740997 -21.234501
+5.424550 96.201302 -18.121300
+7.273170 99.268097 -19.109900
+4.061590 82.860397 -25.270901
+3.042070 83.437599 -23.921600
+5.402180 84.184097 -24.246599
+1.324700 85.426102 -23.607599
+3.418960 86.001404 -22.994699
+5.414420 87.190201 -24.420500
+4.156910 86.863701 -23.063200
+4.732690 90.736099 -24.568600
+5.874720 92.034798 -24.828100
+4.361050 93.149101 -17.551300
+3.386440 90.727402 -19.243799
+3.467720 92.727798 -20.098400
+3.287810 91.076401 -21.093399
+4.491970 94.543503 -20.119400
+4.568070 93.247200 -22.316299
+10.312600 69.596199 -17.289400
+9.509320 68.592796 -18.313101
+8.570640 67.785896 -20.357700
+7.154780 65.704102 -21.188101
+10.946700 69.600098 -20.068600
+11.239700 70.900200 -19.368299
+52.058498 88.247200 8.477600
+50.620499 87.335999 8.895230
+52.964802 86.451202 7.143740
+53.368198 88.809502 7.226370
+45.419701 95.291298 0.411151
+45.416000 91.624298 0.216430
+46.213501 90.998901 -0.739730
+46.056301 87.012398 -1.015690
+46.966099 78.310204 -7.907700
+48.902500 78.344498 -7.039430
+50.854000 75.031097 -8.509880
+50.712898 71.237396 -9.195260
+53.500000 66.602402 11.236500
+54.500198 66.405403 10.225700
+50.307701 67.844902 13.091300
+54.885799 71.087799 10.291900
+55.796799 69.206100 9.843820
+57.040501 70.220703 8.333580
+54.966202 73.147400 8.827440
+56.599201 73.792900 6.882100
+50.280602 54.589199 -1.091190
+49.855701 55.080700 1.251930
+48.387501 56.016399 4.116080
+49.583302 57.048599 4.132610
+50.953400 56.858200 2.395720
+51.212002 56.713299 0.610458
+55.777500 60.920700 3.835450
+8.412580 36.549099 31.005199
+4.839070 37.943600 32.217201
+11.750400 35.585400 28.150801
+9.682780 37.804901 30.145000
+-0.834084 39.866699 33.064301
+-2.243710 39.141899 33.732201
+5.966940 44.818199 35.079899
+4.801390 52.914799 36.946400
+7.664070 52.271900 36.179699
+3.208850 52.734100 36.593899
+3.283120 48.759602 35.386398
+-3.850650 43.816898 35.342400
+-5.844830 41.855000 34.371601
+-1.672400 44.375900 35.282200
+-6.277030 43.645802 35.393501
+-9.104790 41.021099 33.196098
+-7.923480 43.214100 34.359501
+-4.465770 40.627602 34.451302
+-1.696220 42.330502 35.244598
+2.980880 29.882999 30.844101
+2.816000 28.670700 30.934299
+0.301748 31.645700 32.642200
+-0.839368 33.069901 32.640900
+-11.528700 46.066502 33.884701
+-13.962000 46.563202 32.867401
+-14.919700 47.610699 32.205799
+-21.140699 -5.201240 50.245201
+-22.403099 -3.396700 50.726601
+-24.608700 -0.033841 45.686199
+-23.519400 -1.696430 49.921299
+-26.037701 0.877187 43.132198
+-27.374001 1.721820 43.430599
+-31.644501 1.186640 49.168999
+-32.767300 1.061220 50.085300
+-31.436001 0.589560 52.089600
+-29.015699 1.312720 49.093102
+-37.290199 -2.133880 54.269501
+-38.644600 -3.957100 55.011600
+-36.775101 -2.750300 57.630901
+-35.023499 -1.889060 57.995098
+-37.708401 -4.191660 59.528999
+-34.195599 -2.219680 60.735401
+-32.250900 -0.871145 57.324100
+-35.159100 -0.970136 54.902401
+-34.236301 0.026126 52.530201
+-28.896000 -0.828778 56.647598
+-29.595501 -0.286068 53.749100
+-31.393400 -0.111180 53.985401
+-25.567400 -1.292170 53.634800
+-27.676600 -0.186739 52.268101
+-28.974100 0.712600 50.553501
+-25.976801 -0.030526 50.535400
+-26.406601 0.223020 48.513699
+-26.993401 0.901110 47.209000
+-24.769400 -1.036320 50.070599
+-24.157400 -2.185310 52.441299
+-37.196999 -0.074081 46.861900
+-37.197800 0.316395 43.649700
+-35.576099 0.027186 50.451900
+-37.120800 -1.154060 51.674301
+-34.117199 1.507040 47.770100
+-36.047901 0.428258 48.440102
+-35.132500 1.644750 45.554298
+-35.182098 1.608850 42.859402
+1.276740 7.162110 17.420500
+1.549530 7.116500 14.017400
+2.805810 7.478020 13.345700
+0.026152 5.317140 13.395100
+5.181710 6.828140 2.822460
+6.013120 7.951240 0.411761
+9.769540 7.400480 -0.158463
+10.512200 6.652090 2.737860
+2.803280 13.500800 -4.350790
+4.128290 13.609600 -4.124240
+4.764490 17.558901 -5.335240
+-1.171220 5.387180 7.903160
+-2.988770 3.699630 9.807420
+3.857740 7.593050 6.932110
+3.682740 7.930070 10.046200
+6.573790 6.395830 7.260650
+7.601270 6.116760 5.468400
+9.371170 6.159260 7.140040
+7.814570 6.276990 10.221100
+15.286900 7.051680 2.636480
+12.527800 7.319120 1.544650
+14.619000 7.765990 -3.804470
+15.875500 6.826740 -2.199720
+-38.011501 -10.899100 22.408600
+-37.853298 -9.316300 20.431400
+-28.516899 -12.715700 27.141500
+-29.174101 -13.418000 28.761000
+-26.825001 -11.117700 25.064800
+-29.875200 -11.889000 24.952900
+-23.551300 -9.473050 24.235701
+-20.872299 -8.272520 22.306200
+19.189301 49.705502 29.201401
+19.340300 45.852200 28.033199
+19.741100 45.701801 26.646299
+19.627300 41.463902 25.326799
+18.628099 51.389702 29.403000
+19.901400 50.444199 27.379200
+21.264299 52.572399 27.250099
+20.976999 57.125000 27.470200
+-0.018049 88.160301 11.369300
+-0.382973 88.707497 7.423710
+11.444700 81.835800 -7.327300
+9.184680 85.009399 -7.235020
+11.276200 79.514503 -7.623300
+9.872340 81.190102 -8.200200
+17.414400 75.514900 -3.595080
+15.844400 75.189201 -5.388980
+15.931200 76.851997 -4.042310
+17.756500 73.161102 -3.514670
+13.640900 76.400200 -6.518140
+14.264600 74.630501 -6.385060
+16.473600 71.870102 -4.850570
+17.482500 71.330902 -3.738710
+18.880199 68.658699 -3.107320
+19.519899 70.890297 -2.312030
+19.183599 69.762001 -2.351020
+25.942499 63.395000 -2.302800
+23.938200 64.213402 -3.610780
+23.603201 65.946899 -0.876924
+25.307699 64.626503 0.431852
+22.493500 66.886200 -3.538930
+20.063499 72.793098 5.449610
+18.521200 73.967598 2.096780
+20.295601 71.742401 1.836290
+21.038000 70.287498 1.746550
+20.967899 71.264900 5.121110
+20.023300 71.920097 3.646290
+22.064199 68.939003 2.922870
+22.048700 69.694603 3.916270
+23.087700 67.869598 1.391920
+21.595501 67.535500 -0.504204
+21.971201 69.232803 -0.264513
+22.362301 69.890701 0.807252
+22.975901 68.426300 2.340190
+20.108700 69.732697 -0.966685
+19.975800 70.668297 -0.149800
+15.697500 70.921700 -10.179600
+16.294701 70.610703 -8.360650
+17.978100 69.780296 -7.153370
+18.488400 68.444000 -8.674830
+19.485001 67.660500 -7.086580
+19.688299 68.288498 -5.824860
+20.375999 68.513496 -1.630730
+20.821699 68.226097 -1.489290
+24.214800 65.416603 1.874210
+22.439100 66.239098 0.840291
+24.873100 66.078903 2.808770
+25.809099 65.031601 3.527570
+15.303500 80.220802 13.810300
+13.736300 81.815002 7.607320
+13.461500 81.931099 13.333500
+20.942200 70.237801 20.441200
+20.584700 72.839104 17.896700
+-0.457315 90.063499 -2.227410
+0.905963 89.625198 -3.208630
+-0.390463 89.528900 -3.583420
+2.252310 89.711502 -1.762370
+2.776670 89.238899 0.172587
+1.941360 83.799500 21.094000
+1.260050 84.644798 19.364000
+10.251400 85.220802 10.965300
+6.487550 86.695198 10.713400
+9.971910 84.930099 7.109340
+-6.732320 48.381500 36.043201
+-6.645670 53.122501 36.819401
+-4.366070 48.420898 35.926300
+-7.626580 55.188801 35.636600
+-6.194470 54.915798 36.247898
+-5.607770 57.065300 36.903500
+-6.787130 57.669701 36.577301
+16.186001 69.203598 28.416800
+16.733200 70.711899 27.539200
+15.048400 72.026901 28.458000
+15.342000 76.233398 22.903500
+15.032600 73.946404 25.803801
+16.046700 73.583298 25.045099
+10.809700 72.893402 29.914499
+12.713000 71.773003 29.692600
+12.848100 72.639297 29.689400
+11.709900 76.564903 26.568501
+11.808900 74.594200 28.727800
+-1.793150 72.701103 32.591400
+0.701964 74.297501 32.185501
+2.112590 72.896698 32.409500
+1.928300 67.095802 35.532902
+-0.806519 71.656898 33.747002
+-1.684680 70.736504 34.107498
+6.453040 71.710602 32.681801
+3.762410 71.686798 33.088299
+2.682070 72.180397 33.105999
+7.952050 70.932198 33.300499
+5.657040 71.283096 33.646702
+3.059680 70.615601 34.082500
+18.534901 62.206001 29.667200
+17.584000 64.352402 29.944401
+17.366400 53.361198 31.447001
+16.053699 53.728298 32.612000
+16.240801 54.982201 32.565300
+17.028999 58.788700 31.167601
+19.292999 58.515099 29.379700
+9.217050 64.846703 33.852001
+9.220270 67.109299 33.666199
+7.306820 64.211304 34.972301
+10.628400 63.116901 34.755199
+11.489800 60.639099 34.673698
+-40.845600 -4.480080 21.913900
+-40.049099 -4.505250 21.312799
+-40.051998 -2.563430 28.289700
+-39.836800 -2.414030 25.403000
+-49.919800 -17.609800 71.800201
+-49.737499 -17.790600 73.799103
+-47.736401 -14.414900 69.922302
+-48.959000 -14.807700 71.347298
+-48.062302 -14.701200 75.184799
+-45.592701 -14.258200 77.264000
+-47.822300 -13.255700 73.303398
+-49.782600 -16.082300 71.534401
+-49.692902 -16.301701 73.789902
+-49.028801 -16.969900 76.145699
+-47.805801 -16.115999 77.084602
+-45.453701 -14.927800 77.523399
+-43.118301 -13.250500 77.556801
+-43.180599 -14.666200 77.445396
+-39.940601 -12.800800 77.593399
+-31.749599 -20.902599 66.711800
+-32.604500 -20.936399 65.236900
+-34.906700 -22.042500 64.251701
+-30.645300 -20.792000 68.785698
+-30.946699 -21.750799 69.524902
+-31.024900 -22.341299 67.531998
+-35.051601 -26.311399 65.177803
+-33.889000 -25.400900 65.744202
+-33.746300 -27.059200 68.262604
+-38.855598 -19.857700 64.223396
+-38.522400 -17.706100 63.570900
+-37.810799 -22.937300 63.357800
+-38.624298 -22.004700 63.759300
+-34.610802 -24.033501 64.036102
+-35.941200 -23.706600 64.045898
+-32.064201 -23.622999 67.601097
+-32.283298 -22.950199 66.461700
+-32.163898 -25.085100 68.372498
+-32.062901 -25.100700 69.736298
+-28.170799 -17.065800 66.841202
+-28.785200 -17.755301 68.001602
+-28.932800 -18.697201 71.127197
+-28.025900 -17.673599 70.324997
+-30.608999 -22.104601 70.719704
+-29.657101 -20.365200 71.484200
+-39.221401 -28.878099 64.997704
+-40.941700 -30.422501 65.598198
+-37.052399 -28.991301 66.107697
+-38.236000 -28.992300 65.404900
+-35.733501 -27.120199 66.484802
+-37.219501 -26.496099 65.339897
+-35.290001 -27.530199 67.715500
+-35.386101 -27.517200 69.480598
+-36.355099 -23.526199 72.036697
+-37.640301 -26.145901 72.018799
+-35.944801 -25.843901 71.650101
+-39.872002 -22.260700 73.207100
+-33.166199 -23.626200 72.012604
+-33.929401 -20.224199 72.981400
+-38.986000 -13.678300 58.126400
+-38.508099 -14.077400 54.589500
+-39.873001 -11.397800 56.299801
+-40.022999 -10.372200 58.901501
+-39.694401 -13.455200 52.506901
+-39.655602 -12.271900 53.425098
+-39.641899 -9.329380 51.891102
+-39.248798 -8.391110 58.249100
+-39.422699 -10.134200 55.021400
+-40.332199 -7.929500 48.152302
+-40.126701 -7.498130 51.259201
+-39.811600 -8.285600 54.966801
+-40.128502 -7.327690 53.129601
+-39.110298 -7.393270 59.918400
+-39.032101 -5.909470 57.246899
+-39.858799 -9.932770 63.518501
+-38.621601 -7.838700 61.713902
+-27.379900 -8.960270 74.679604
+-27.366301 -11.412000 74.001198
+-31.514400 -23.660400 71.221199
+-33.063900 -25.373899 71.088097
+-31.368200 -20.948700 72.850197
+-30.576000 -18.798100 73.223000
+-30.203400 -14.723800 74.157303
+-31.772200 -16.667700 73.844200
+-17.512400 21.511700 19.713600
+-18.816299 20.144199 20.985701
+-15.364200 20.036900 23.292299
+-16.575701 23.752899 20.764799
+-15.521900 23.163099 22.518900
+-18.141500 23.354900 18.885099
+-16.891899 22.242001 22.024900
+-13.414800 18.614599 24.928301
+-14.112600 17.381100 25.202801
+-24.506701 11.660300 7.132250
+-23.828400 10.368400 5.639220
+-30.825899 11.566800 12.539600
+-30.416700 11.969500 23.796000
+-30.116301 12.905300 23.117800
+-29.261101 14.684700 20.152800
+-30.777700 13.715300 18.444901
+-28.780001 14.643200 15.852800
+-28.212400 15.564000 17.326000
+-25.393600 16.841499 14.705900
+-27.047899 16.055500 14.014300
+-30.130800 10.791600 11.270800
+-27.475000 11.976300 9.862550
+-28.414801 10.494400 8.622660
+-28.045000 13.411100 11.902900
+-26.937599 9.843400 7.673750
+-25.395901 9.512070 7.007120
+-35.569599 6.967480 16.510099
+-34.791698 7.531280 14.698000
+-32.136299 9.898760 13.285400
+-32.439602 8.730280 12.854400
+-30.666401 8.741970 9.881860
+-31.168301 7.825900 10.433900
+-29.160999 8.059550 8.263700
+-27.617399 8.045340 6.590560
+-23.194901 7.901330 4.544640
+-24.359600 7.007890 5.066070
+-18.221901 11.640300 2.874010
+-20.341299 8.949570 3.918090
+-21.013901 11.905000 4.987110
+-20.510300 14.813700 5.188050
+-20.065599 -11.374700 49.042301
+-19.729900 -13.008700 45.612701
+-23.492701 -5.491180 60.841499
+-22.169300 -6.856110 58.299400
+-21.429199 -9.505990 57.027100
+-21.669201 -8.227850 56.408401
+-20.975500 -13.609100 48.153900
+-21.603600 -13.194800 51.260899
+-21.179399 -11.401100 53.273102
+-20.698601 -10.097900 53.394901
+-21.433100 -6.012300 52.779701
+-21.474800 -6.466030 54.597000
+-20.780600 -7.042640 50.635799
+-20.206900 -8.375420 50.625702
+-27.998501 -18.643299 44.114899
+-30.072001 -18.538500 43.078602
+-49.965199 -29.706699 66.846397
+-48.741600 -29.563499 66.333000
+-46.251701 -24.456600 65.869400
+-46.675301 -23.650801 66.942200
+-46.401798 -30.259501 70.617500
+-46.733002 -30.951599 69.081100
+-48.241402 -31.313700 67.759804
+-45.820099 -28.190100 66.906403
+18.947800 35.384800 22.276899
+17.011101 35.556900 24.594801
+13.245400 35.735199 28.196600
+13.729500 37.561501 29.129801
+7.377070 41.187901 33.321201
+15.157400 34.891300 25.169800
+17.125799 34.969299 22.945200
+12.279500 34.838299 27.985300
+12.155000 34.168400 28.654100
+16.109200 33.869999 23.775999
+17.459400 33.147499 21.676399
+13.552400 32.230000 27.918800
+15.366100 32.209801 26.090799
+-17.698999 43.542301 -14.233700
+-17.780701 40.918499 -13.232500
+-10.865800 51.493401 -15.379500
+-11.877200 52.690201 -15.129100
+-0.329564 26.506300 -8.983060
+-3.595980 26.546400 -8.713970
+2.880520 18.940201 -5.788440
+2.998910 17.604799 -5.738950
+8.277860 25.332300 -4.710090
+6.935250 23.966000 -5.938990
+6.747900 24.647499 -5.878260
+6.876380 26.468000 -5.407750
+5.323490 27.236700 -6.202580
+5.203880 25.569500 -6.547270
+3.665200 21.403500 -6.122300
+3.886260 22.688299 -6.019540
+3.244900 23.295900 -7.663710
+3.839990 25.224701 -8.093510
+4.202330 27.193800 -7.737130
+2.138730 26.859200 -8.707610
+1.522830 23.101601 -8.110070
+2.772410 24.082300 -8.252750
+-0.647458 23.654200 -8.549680
+-3.465260 23.864300 -8.243830
+20.802401 15.178000 -22.261200
+21.694000 15.537100 -24.055300
+19.668400 13.600000 -20.042101
+23.103701 61.189899 -6.651480
+23.296499 64.233498 -4.972410
+-5.113380 1.167290 14.399900
+-3.954280 3.484240 18.750799
+-1.800860 4.985380 17.698700
+-5.139010 2.780740 20.818701
+-5.759250 1.888370 18.373800
+-5.934100 1.938090 20.634001
+-6.618860 -0.951384 16.992201
+-7.118950 -1.285460 14.781800
+-6.717440 -0.142241 18.369900
+-8.257490 -2.226020 16.849501
+-9.284670 -3.389830 17.172600
+-12.315600 -4.932750 18.235901
+-9.635500 -3.204390 15.937200
+-6.856450 0.449909 13.437300
+-8.497970 -1.073680 14.054500
+13.730400 98.455803 -16.301399
+12.596100 92.936401 -15.181700
+13.501400 91.105301 -15.944600
+13.981600 97.529999 -15.472200
+14.232700 96.659103 -16.191900
+14.071400 95.155800 -15.564200
+14.474100 95.247398 -16.286100
+14.276800 93.070198 -16.184000
+11.945100 93.879997 -17.110001
+12.309000 97.782501 -17.024099
+1.294080 76.324898 -32.487900
+0.713415 77.671600 -31.310200
+2.735080 78.907600 -31.024599
+5.106200 78.764099 -30.001699
+6.105300 77.515297 -29.952999
+1.333800 81.453300 -27.701900
+0.777648 80.501801 -29.251801
+2.414570 79.530502 -28.684900
+4.007490 79.826302 -27.603901
+7.308510 85.499802 -24.229799
+7.234400 83.585098 -24.039600
+6.675940 81.596397 -25.286900
+4.416270 81.938202 -26.654900
+7.764180 79.020103 -22.813200
+7.018720 79.700798 -24.486500
+9.740570 76.246002 -23.093201
+10.379700 76.193703 -21.031601
+9.501160 77.891098 -20.747101
+43.050598 68.291603 -8.350230
+43.839199 68.949699 -8.191410
+44.834099 73.710899 -7.085400
+44.066101 71.346397 -7.727890
+41.528900 71.539001 -5.430970
+40.865700 69.919502 -6.322970
+42.639400 74.574799 -4.421210
+43.757099 73.723099 -5.754090
+42.152599 78.455498 -2.562990
+43.847900 79.425003 -2.927420
+44.636398 81.281700 -2.065360
+43.555500 82.880402 -0.637985
+53.334400 79.746201 7.014100
+52.333801 81.038696 6.426950
+51.246899 79.427002 8.571400
+54.278999 80.597801 4.321240
+55.213799 79.185699 4.250570
+56.006599 77.051003 4.125390
+56.181000 77.359001 2.234000
+54.988899 77.573997 6.254180
+54.027100 77.422401 7.509190
+52.191502 77.269798 9.201080
+43.682598 65.983704 10.130400
+43.910801 75.344498 10.451100
+43.341702 72.988701 10.156800
+44.521099 68.170998 10.420700
+44.853500 69.827599 11.263500
+43.247299 82.187401 8.423640
+45.203400 79.823502 9.590050
+46.556599 81.052399 8.725880
+46.391399 79.576500 10.098400
+47.774799 79.384697 9.655270
+45.711601 75.523399 11.095700
+47.154598 76.420097 10.750600
+48.370899 66.171402 12.923900
+47.889500 68.426598 13.217600
+48.784100 71.746902 13.349100
+44.088600 61.201801 8.681730
+45.189701 60.548698 9.602090
+45.121498 63.723801 10.845000
+46.446999 66.391701 11.967800
+46.094799 68.976799 12.598900
+46.601501 70.192398 12.945600
+47.209999 72.264999 12.580900
+48.106400 73.837997 12.297000
+51.685398 84.014702 7.598090
+50.429699 85.520103 9.457500
+49.085999 83.926300 8.745130
+47.528599 83.694603 9.568470
+45.216499 82.223900 8.786650
+44.420898 84.549103 9.809040
+48.086300 81.719498 8.519260
+49.484299 81.091499 8.072540
+49.772301 79.679100 8.715520
+50.005600 77.868599 10.027200
+49.121201 79.487198 9.679530
+51.816898 74.784698 10.082900
+50.105099 75.593102 10.593400
+52.697601 69.182404 12.053000
+50.504299 70.770401 12.728100
+55.486900 64.999702 7.655230
+52.838902 62.438499 9.099650
+-6.800440 32.257801 31.180300
+-9.149580 31.253300 30.285500
+-11.431700 32.866501 28.005301
+-8.344270 33.673698 29.696501
+-11.459100 34.524399 28.886801
+-11.094500 36.255100 29.363800
+-8.070210 35.862999 30.264500
+-11.853700 37.450199 30.835300
+-9.929840 37.017399 31.132500
+-9.245400 55.879601 35.999401
+13.034200 24.398500 -7.017990
+14.547100 26.762100 -6.497240
+13.885000 25.183001 -9.308590
+11.824700 24.230700 -6.010170
+10.495100 21.635401 -6.685870
+11.204600 20.570200 -7.273110
+12.667700 16.206499 -12.273700
+11.600300 16.343399 -10.210500
+12.313200 19.035601 -10.841200
+16.124399 28.264999 -4.136430
+16.224400 27.815901 -5.595920
+17.533501 28.653999 -7.609630
+18.902800 28.350000 -9.877940
+17.407200 27.428200 -9.835080
+15.322300 25.529600 -10.779800
+14.505700 23.711500 -10.709000
+12.961500 23.071501 -9.382940
+13.144900 21.684200 -10.714800
+11.298700 19.288000 -9.089730
+10.607200 17.021200 -8.833490
+9.883580 16.649401 -6.933810
+9.741490 13.861300 -6.113190
+8.809000 24.348600 -4.936420
+10.754100 26.462000 -4.103980
+9.192920 24.080299 -5.769030
+10.592700 24.663500 -5.610250
+7.598060 22.354300 -5.888040
+6.635630 22.457899 -5.969270
+7.741020 16.355301 -6.540890
+6.958900 17.575199 -6.393230
+11.103000 9.390890 -2.510120
+11.598800 8.414450 -0.865081
+7.572680 11.912900 -4.760160
+8.507440 10.263700 -3.639810
+8.307930 7.705320 17.470900
+10.385200 8.865460 16.655600
+11.065800 9.455480 17.670601
+3.735550 7.533920 23.087400
+3.815580 8.047050 24.542101
+2.651580 8.006040 21.533899
+5.222510 6.982670 20.322500
+5.769280 6.468880 20.886101
+0.652667 9.277610 23.086399
+0.485810 11.370600 23.976299
+-0.698674 8.786910 22.151800
+1.085830 7.921340 19.807899
+5.504590 7.103540 18.045799
+5.616870 7.097870 15.973800
+10.522500 8.360450 14.208700
+8.356150 7.377860 13.393800
+5.991860 7.307120 10.489300
+6.818570 7.084840 11.730100
+12.551400 7.083880 11.780600
+9.713580 6.373010 11.142200
+23.350500 61.523701 23.281500
+21.670099 63.452202 25.409800
+18.116699 66.727097 26.927200
+18.166000 65.648598 28.042801
+20.528099 62.000500 27.218599
+19.916700 65.443802 27.193001
+22.589300 55.773102 25.189699
+22.086901 60.477299 25.243601
+6.292290 87.642403 3.374360
+8.810810 86.120102 3.034820
+7.536040 86.493599 4.628140
+10.480900 84.310303 3.552250
+8.798710 85.290703 4.583930
+13.353600 80.254700 2.880520
+12.713300 81.446800 2.889000
+13.793900 81.498100 4.390720
+11.993600 83.235802 4.302590
+11.718400 84.059998 8.311630
+10.693100 84.814400 5.282690
+7.722570 80.523499 22.631100
+8.899780 81.646599 21.727800
+7.342370 81.859497 21.315399
+11.247700 80.769798 20.394501
+13.489400 79.491997 18.914600
+7.863050 84.415497 16.543900
+8.010040 83.134499 18.882299
+6.609800 84.291901 16.831699
+6.837320 83.022301 18.867901
+5.699340 83.950104 19.182800
+5.502350 85.250900 16.725500
+8.497910 86.594002 6.012810
+6.666190 87.193298 5.935940
+-0.626146 62.876400 36.694302
+-2.671590 61.991001 36.557800
+12.854000 78.853600 20.402399
+10.443500 79.910599 21.807899
+16.709101 72.026802 24.716700
+16.286200 73.753700 23.409300
+15.992500 75.529297 21.931700
+15.271000 76.798798 20.738701
+13.497400 78.203300 22.408701
+14.122200 78.093498 21.251301
+3.231200 63.689201 35.623501
+4.189880 64.236801 35.596699
+5.169930 65.833397 35.590900
+7.145100 66.004097 35.096100
+10.683500 68.913399 32.798599
+10.315800 70.951302 32.074200
+7.110280 75.945503 29.546101
+7.130000 77.561302 27.607000
+5.237950 78.975098 26.834900
+9.770690 75.068703 29.500200
+9.325380 73.487099 30.942200
+9.817740 71.933502 30.785500
+11.732600 71.086899 30.254700
+-0.552818 78.650703 28.523300
+0.060652 80.803802 26.238800
+1.891470 79.093498 27.825899
+4.051640 77.227997 29.154100
+1.959480 77.013000 29.730301
+0.497001 76.429298 30.165001
+7.471900 73.840797 31.411501
+4.872960 74.305801 31.652100
+8.420900 71.943497 31.368099
+7.588180 72.303200 31.815701
+9.193390 69.230904 32.899799
+8.857340 70.764198 32.251999
+5.428860 68.173401 34.577400
+8.236370 67.565804 34.391300
+11.055600 53.631100 34.677299
+8.188350 54.277100 35.525200
+9.651720 59.104599 35.413101
+8.829750 56.204899 35.753899
+1.444790 55.244499 36.835701
+1.906430 53.549900 37.108299
+-0.928321 47.154701 36.107201
+-2.798640 45.463799 35.880600
+2.185010 50.423199 36.619900
+-47.674999 -23.004999 72.431900
+-48.369099 -24.956200 72.127098
+-46.961102 -24.187201 73.115097
+-45.629799 -25.177099 73.090202
+-40.699799 -24.874500 72.863197
+-43.290798 -23.617500 73.639702
+-41.867298 -20.843500 73.875702
+-38.936100 -18.122601 74.467598
+-40.902401 -15.011000 76.649597
+-39.111698 -16.094500 75.684799
+-36.818699 -5.601510 62.029099
+-34.669399 -3.946060 62.419899
+-22.043501 -6.084070 72.313599
+-23.091700 -4.252000 73.336899
+-23.852600 -4.205360 71.986298
+-22.518400 -5.846640 71.030098
+-27.306601 -3.559260 66.312798
+-25.890200 -3.321750 67.570801
+-23.265301 -5.153370 68.084000
+-22.348801 -7.330890 69.382896
+-24.482100 -3.022640 70.762001
+-26.830400 -2.581790 73.632599
+-25.442801 -3.357440 74.464302
+-25.850000 -5.570340 75.695000
+-37.485001 -6.533650 72.361900
+-35.714901 -4.841710 71.980797
+-34.529400 -4.745260 75.313599
+-36.918400 -6.855660 75.385002
+-34.692902 -6.998390 77.556396
+-38.074200 -9.672380 77.337502
+-36.481499 -8.596990 77.546204
+-34.176998 -7.790450 77.768600
+-40.958401 -12.016500 77.470200
+-38.821899 -10.759500 77.687202
+-37.282398 -11.014700 77.581299
+-36.278702 -13.581800 76.039001
+-35.857899 -10.353700 77.102203
+-36.811699 -12.173000 76.746101
+-36.782200 -9.647800 77.732300
+-35.986099 -9.757750 77.605797
+-30.849100 -6.810740 76.834900
+-32.643101 -8.455840 76.475601
+-30.942301 -7.794300 76.477501
+-31.547701 -8.872480 75.954597
+-32.045502 -3.882890 75.711304
+-26.985300 -2.492670 70.118103
+-27.535299 -2.609970 71.687500
+-29.653500 -2.525770 73.767998
+-31.222401 -2.649660 73.938004
+-30.193199 -4.063440 76.468102
+-27.154400 -3.960370 76.041801
+-28.207899 -3.799180 76.279701
+-32.199402 -5.201010 77.523102
+-33.288300 -6.166120 77.685997
+-32.156601 -5.960030 77.748199
+-30.162201 -4.964360 77.243103
+-28.212999 -4.976210 76.740898
+-29.260201 -5.696010 76.992897
+-29.620399 -7.560910 75.855698
+-29.599501 -8.233700 75.404701
+-34.165501 -13.606000 75.248100
+-32.774799 -11.813800 75.294899
+-24.734301 -5.300400 62.361500
+-25.674400 -3.193810 61.297501
+-26.257500 -1.697890 56.798302
+-31.188200 -1.532000 59.249500
+-31.091801 -1.669460 61.141602
+-27.801399 -1.955420 59.911598
+-28.756800 -1.659540 60.778301
+-26.687500 -1.852590 58.795200
+-25.205799 -3.093750 58.414600
+-23.260599 -4.292630 56.714802
+-23.323500 -5.120640 58.082500
+-49.580799 -27.858601 70.968102
+-48.935600 -28.173300 71.714500
+-50.691399 -29.798000 68.321602
+-49.105598 -27.051300 67.483200
+14.417500 13.462200 -13.114900
+13.029900 12.580200 -10.999500
+18.488800 10.256200 -14.622100
+17.320801 9.882110 -13.174900
+16.099899 12.495800 -14.723400
+17.744600 13.014000 -16.831301
+18.698700 15.903400 -20.144800
+17.222300 15.577100 -17.781700
+-5.179690 0.909860 16.290400
+-3.149570 2.948720 16.463800
+8.734230 80.763397 -22.398100
+9.206610 80.614502 -21.091101
+11.747700 73.664001 -15.449400
+11.265300 74.668900 -17.640699
+0.689305 88.163597 -14.207200
+-1.005320 88.336403 -15.821600
+-0.293243 85.324303 -22.106100
+1.347370 85.376999 -21.452200
+-1.113980 86.758400 -21.743900
+2.988110 87.057503 -11.728000
+3.719260 86.906601 -10.822700
+1.448690 87.428001 -11.615300
+3.838940 86.345497 -9.234770
+0.990254 87.480598 -9.388120
+0.555745 88.171402 -11.303800
+0.193428 88.216202 -12.130200
+56.654800 63.019299 4.681290
+55.289799 61.412399 5.603360
+-9.184840 57.535301 35.889400
+20.214800 7.070750 2.427940
+20.707500 7.258020 4.954250
+20.165199 6.358740 0.314386
+19.684799 6.318890 -0.660006
+17.302900 6.293090 1.248830
+18.433701 6.533710 2.461700
+14.178300 6.985400 5.221130
+16.080000 7.434630 6.819180
+12.568500 6.605340 5.510410
+4.763150 42.784302 33.290699
+5.882660 43.368900 34.628799
+4.860070 43.832500 34.384701
+2.538020 44.094299 33.731800
+3.600500 43.924500 32.847801
+1.992490 43.482300 34.264198
+2.769830 44.926201 34.825901
+3.876810 45.138599 35.185299
+3.447200 46.645901 35.553398
+4.362890 46.072300 35.746601
+6.612310 39.813099 32.054001
+7.629010 40.053600 31.733200
+4.067770 41.924900 33.456200
+0.270211 41.556499 33.279499
+2.038470 40.045101 32.924999
+2.175080 42.004200 33.311298
+2.562070 43.517399 33.162300
+1.176030 43.190800 33.636398
+-0.970983 40.686100 34.334702
+-2.237650 39.784100 34.354000
+0.628360 43.016201 34.502899
+-0.131306 42.275501 34.753502
+1.516330 45.418800 35.912800
+0.410667 44.427200 35.838402
+0.569555 46.847801 35.498100
+1.958550 48.013401 35.705399
+-5.958460 51.895302 36.703701
+-4.067650 53.200802 36.975399
+-5.035170 53.017502 36.565899
+-3.993240 55.254002 36.479000
+-1.745830 55.429600 36.647701
+-0.961199 53.901699 37.190201
+-1.406510 53.123299 37.099701
+0.725983 48.830299 36.328300
+-1.217620 50.417099 36.480301
+-36.642502 -19.940300 73.411697
+-36.448399 -17.783400 74.236900
+11.908100 11.220500 17.010900
+11.896400 10.898600 16.998501
+11.973200 11.542900 17.136400
+12.451600 11.182000 17.392700
+11.956800 11.320300 19.896500
+11.973300 13.233500 20.796700
+12.090300 11.294500 18.233200
+11.978500 11.265400 17.845100
+12.058700 10.161200 17.437500
+11.711600 10.176600 17.127899
+13.437100 10.828300 17.156000
+15.739900 11.074300 16.255199
+12.913700 9.659520 15.179100
+14.354400 8.293530 12.575700
+18.512699 7.601640 4.955310
+18.925301 8.007240 6.504390
+20.775900 8.574490 7.229270
+19.313700 8.389350 7.938940
+19.652700 9.427300 9.781110
+17.915899 14.754200 17.858999
+17.028799 13.629900 17.823299
+18.380800 10.519800 14.475900
+20.278700 12.277800 14.537100
+20.954500 10.253700 10.780200
+16.658199 8.580350 12.703900
+17.544300 8.425020 11.611900
+13.633700 6.840510 9.507590
+15.634500 7.278500 9.746470
+
+3 1 2 0
+3 1 3 2
+3 0 4 5
+3 0 2 4
+3 6 7 4
+3 9 10 8
+3 11 12 8
+3 8 10 11
+3 12 11 13
+3 14 15 8
+3 12 14 8
+3 13 16 14
+3 12 13 14
+3 18 19 17
+3 21 22 20
+3 17 20 22
+3 23 17 22
+3 17 19 20
+3 25 26 24
+3 27 23 22
+3 27 22 21
+3 27 21 5
+3 28 29 20
+3 21 20 29
+3 28 20 19
+3 1 31 30
+3 0 31 1
+3 5 31 0
+3 21 30 31
+3 31 5 21
+3 29 30 21
+3 29 28 30
+3 30 33 32
+3 32 33 3
+3 32 3 1
+3 32 1 30
+3 33 30 28
+3 19 33 28
+3 35 36 34
+3 38 34 37
+3 37 34 36
+3 36 39 37
+3 40 41 35
+3 35 41 42
+3 34 40 35
+3 44 45 43
+3 46 43 45
+3 48 49 47
+3 51 48 50
+3 48 47 50
+3 38 48 52
+3 54 55 53
+3 57 58 56
+3 56 59 57
+3 11 61 60
+3 62 63 60
+3 60 61 62
+3 62 61 64
+3 67 68 66
+3 66 70 69
+3 66 68 70
+3 69 63 66
+3 63 71 60
+3 69 71 63
+3 72 71 70
+3 70 71 69
+3 11 71 72
+3 71 11 60
+3 11 72 13
+3 68 74 73
+3 74 72 73
+3 72 74 13
+3 72 70 73
+3 73 70 68
+3 76 77 75
+3 79 75 78
+3 79 67 75
+3 75 66 76
+3 66 63 76
+3 67 66 75
+3 81 82 80
+3 81 80 77
+3 83 84 80
+3 75 77 85
+3 77 80 85
+3 84 86 85
+3 80 84 85
+3 87 88 78
+3 78 88 79
+3 75 87 78
+3 85 87 75
+3 90 74 89
+3 90 89 88
+3 68 89 74
+3 89 68 67
+3 89 67 79
+3 88 89 79
+3 13 74 90
+3 10 92 91
+3 64 91 92
+3 92 10 9
+3 64 61 91
+3 11 91 61
+3 10 91 11
+3 94 95 93
+3 94 13 95
+3 95 13 90
+3 13 94 16
+3 97 98 96
+3 96 99 97
+3 96 101 100
+3 103 104 102
+3 103 101 96
+3 103 96 98
+3 105 104 103
+3 107 108 106
+3 110 109 16
+3 110 16 111
+3 113 111 112
+3 113 110 111
+3 114 113 112
+3 112 115 114
+3 116 47 49
+3 118 119 117
+3 117 119 120
+3 117 121 118
+3 123 124 122
+3 126 127 125
+3 125 128 126
+3 125 129 128
+3 58 130 56
+3 84 83 131
+3 133 84 132
+3 84 131 132
+3 84 133 86
+3 134 87 85
+3 85 86 134
+3 86 133 134
+3 135 88 87
+3 134 136 135
+3 87 134 135
+3 95 137 93
+3 95 90 137
+3 137 88 138
+3 88 135 138
+3 90 88 137
+3 140 141 139
+3 142 140 139
+3 143 144 139
+3 139 141 143
+3 146 147 145
+3 143 146 145
+3 149 150 148
+3 152 153 151
+3 153 145 151
+3 153 152 144
+3 143 153 144
+3 143 145 153
+3 155 148 154
+3 154 151 155
+3 151 145 155
+3 157 158 156
+3 160 161 159
+3 163 164 162
+3 42 166 165
+3 168 169 167
+3 168 167 156
+3 170 167 169
+3 167 171 156
+3 170 171 167
+3 173 174 172
+3 175 174 173
+3 174 170 172
+3 172 170 169
+3 172 169 168
+3 175 177 176
+3 173 177 175
+3 179 39 178
+3 181 182 180
+3 180 182 178
+3 182 179 178
+3 184 185 183
+3 183 182 186
+3 183 185 179
+3 183 179 182
+3 187 188 184
+3 189 184 188
+3 184 183 187
+3 186 187 183
+3 191 192 190
+3 180 193 181
+3 193 180 194
+3 195 196 181
+3 195 181 193
+3 198 199 197
+3 201 202 200
+3 201 200 203
+3 204 202 201
+3 206 202 205
+3 202 204 205
+3 206 200 202
+3 208 209 207
+3 211 212 210
+3 213 211 210
+3 210 212 214
+3 216 217 215
+3 219 220 218
+3 222 223 221
+3 222 221 224
+3 226 227 225
+3 25 225 228
+3 229 230 228
+3 229 228 225
+3 225 227 229
+3 232 7 231
+3 5 4 232
+3 232 4 7
+3 234 235 233
+3 233 6 234
+3 233 235 236
+3 7 6 237
+3 233 236 237
+3 233 237 6
+3 238 239 6
+3 4 238 6
+3 238 4 2
+3 234 6 239
+3 241 234 240
+3 240 234 239
+3 235 234 241
+3 243 236 242
+3 243 7 237
+3 237 236 243
+3 242 236 235
+3 241 242 235
+3 245 3 244
+3 244 3 33
+3 238 246 239
+3 246 238 2
+3 246 3 247
+3 246 2 3
+3 240 247 241
+3 239 246 247
+3 240 239 247
+3 249 242 248
+3 245 249 248
+3 242 241 248
+3 248 241 247
+3 3 248 247
+3 3 245 248
+3 249 243 242
+3 250 226 231
+3 7 251 250
+3 7 250 231
+3 7 243 251
+3 249 251 243
+3 249 245 251
+3 251 244 250
+3 245 244 251
+3 219 252 220
+3 253 252 224
+3 253 224 221
+3 253 221 223
+3 252 254 224
+3 256 254 255
+3 254 252 219
+3 255 254 219
+3 258 259 257
+3 52 261 260
+3 34 260 40
+3 38 260 34
+3 38 52 260
+3 263 42 262
+3 41 262 42
+3 166 42 263
+3 265 266 264
+3 267 266 265
+3 266 267 268
+3 266 269 264
+3 271 272 270
+3 44 272 271
+3 44 43 272
+3 273 272 43
+3 52 48 274
+3 274 48 51
+3 276 277 275
+3 276 278 277
+3 259 277 278
+3 277 258 275
+3 258 277 259
+3 280 281 279
+3 282 275 258
+3 284 285 283
+3 284 283 282
+3 285 261 283
+3 283 261 52
+3 284 282 258
+3 258 285 284
+3 286 287 283
+3 287 282 283
+3 283 52 286
+3 286 52 274
+3 289 290 288
+3 291 289 288
+3 293 294 292
+3 295 293 292
+3 288 293 295
+3 288 290 293
+3 294 293 290
+3 296 297 57
+3 298 299 296
+3 300 301 299
+3 302 299 301
+3 302 296 299
+3 57 298 296
+3 59 298 57
+3 300 304 303
+3 300 299 304
+3 304 299 298
+3 298 59 304
+3 264 306 305
+3 264 269 306
+3 306 307 305
+3 307 269 308
+3 306 269 307
+3 309 308 269
+3 311 312 310
+3 314 315 313
+3 316 313 315
+3 318 319 317
+3 320 317 319
+3 322 323 321
+3 324 323 322
+3 326 324 325
+3 324 322 325
+3 328 329 327
+3 331 332 330
+3 332 334 333
+3 334 332 331
+3 336 337 335
+3 335 337 338
+3 340 341 339
+3 343 344 342
+3 345 346 344
+3 343 345 344
+3 348 349 347
+3 350 351 349
+3 348 350 349
+3 352 353 351
+3 349 354 347
+3 356 357 355
+3 358 356 345
+3 356 346 345
+3 358 345 127
+3 360 361 359
+3 363 364 362
+3 77 76 365
+3 62 366 63
+3 76 366 365
+3 76 63 366
+3 366 81 365
+3 365 81 77
+3 81 366 65
+3 367 369 368
+3 370 371 64
+3 370 64 92
+3 367 371 370
+3 370 369 367
+3 367 366 371
+3 366 62 371
+3 64 371 62
+3 373 374 372
+3 373 372 375
+3 375 376 373
+3 377 54 375
+3 372 377 375
+3 93 377 378
+3 93 378 94
+3 379 380 378
+3 378 377 379
+3 372 379 377
+3 374 379 372
+3 115 379 374
+3 112 379 115
+3 111 380 379
+3 112 111 379
+3 111 16 380
+3 16 94 380
+3 378 380 94
+3 218 382 381
+3 218 220 382
+3 383 382 220
+3 385 383 384
+3 386 385 384
+3 382 383 385
+3 385 381 382
+3 388 389 387
+3 253 387 252
+3 391 392 390
+3 390 393 122
+3 124 390 122
+3 395 392 394
+3 395 394 396
+3 398 399 397
+3 398 397 400
+3 403 404 402
+3 402 404 401
+3 403 405 404
+3 407 408 406
+3 115 409 114
+3 409 115 410
+3 409 411 114
+3 411 409 412
+3 409 410 412
+3 411 113 114
+3 398 413 399
+3 394 413 398
+3 392 413 394
+3 392 391 413
+3 399 413 414
+3 413 391 414
+3 415 399 414
+3 417 418 416
+3 420 421 419
+3 106 419 422
+3 106 420 419
+3 106 422 107
+3 422 424 423
+3 424 426 425
+3 427 428 120
+3 428 117 120
+3 429 430 428
+3 121 117 430
+3 428 430 117
+3 429 428 431
+3 432 429 431
+3 433 429 432
+3 434 430 429
+3 433 434 429
+3 436 437 435
+3 438 439 436
+3 438 318 439
+3 438 440 318
+3 442 443 441
+3 445 446 444
+3 447 445 444
+3 389 446 445
+3 389 388 446
+3 446 319 444
+3 446 320 319
+3 320 448 317
+3 450 121 449
+3 452 453 451
+3 453 450 451
+3 453 100 450
+3 450 449 451
+3 451 449 270
+3 451 270 272
+3 451 272 273
+3 452 451 273
+3 273 455 454
+3 273 43 455
+3 43 46 455
+3 457 458 456
+3 457 454 458
+3 273 457 452
+3 273 454 457
+3 454 257 458
+3 456 459 457
+3 460 100 453
+3 452 459 460
+3 452 457 459
+3 452 460 453
+3 461 436 435
+3 463 464 462
+3 466 467 465
+3 468 265 264
+3 305 468 264
+3 469 468 467
+3 467 466 469
+3 462 469 466
+3 471 265 470
+3 265 468 470
+3 469 470 468
+3 469 472 470
+3 471 470 473
+3 471 473 435
+3 472 473 470
+3 435 475 474
+3 471 435 474
+3 435 437 475
+3 477 278 476
+3 476 278 268
+3 476 268 267
+3 477 476 267
+3 267 265 477
+3 479 456 478
+3 479 259 278
+3 278 477 479
+3 458 478 456
+3 478 458 257
+3 478 259 479
+3 259 478 257
+3 481 471 480
+3 479 481 480
+3 479 480 456
+3 477 481 479
+3 265 481 477
+3 265 471 481
+3 460 459 482
+3 459 456 482
+3 482 456 480
+3 483 482 480
+3 483 480 471
+3 474 483 471
+3 484 97 99
+3 486 318 485
+3 485 318 317
+3 485 317 448
+3 487 485 448
+3 441 486 485
+3 441 485 487
+3 488 441 443
+3 488 490 489
+3 318 491 439
+3 486 491 318
+3 491 441 489
+3 489 441 488
+3 491 486 441
+3 437 436 492
+3 436 439 492
+3 439 491 492
+3 492 491 484
+3 493 437 492
+3 492 484 493
+3 99 493 484
+3 475 437 493
+3 482 483 494
+3 494 483 474
+3 494 474 475
+3 494 493 495
+3 493 494 475
+3 99 495 493
+3 99 96 495
+3 495 96 100
+3 495 100 460
+3 495 482 494
+3 495 460 482
+3 497 498 496
+3 499 497 496
+3 501 502 500
+3 503 501 500
+3 504 501 503
+3 504 217 501
+3 216 501 217
+3 216 502 501
+3 502 505 500
+3 507 508 506
+3 509 506 508
+3 506 509 510
+3 509 511 510
+3 503 510 511
+3 500 510 503
+3 505 506 510
+3 507 506 505
+3 500 505 510
+3 513 514 512
+3 14 514 15
+3 16 514 14
+3 16 512 514
+3 109 512 16
+3 376 516 515
+3 375 516 376
+3 375 54 516
+3 516 54 53
+3 515 516 517
+3 53 517 516
+3 518 515 517
+3 517 519 518
+3 518 376 515
+3 520 414 391
+3 521 108 107
+3 523 524 522
+3 103 525 101
+3 103 102 525
+3 507 527 526
+3 526 508 507
+3 126 128 527
+3 527 128 528
+3 530 531 529
+3 530 529 532
+3 534 535 533
+3 533 536 534
+3 534 536 537
+3 538 534 537
+3 540 541 539
+3 534 539 541
+3 540 542 541
+3 541 535 534
+3 538 539 534
+3 531 530 543
+3 541 542 544
+3 544 542 540
+3 545 544 540
+3 547 548 546
+3 550 548 549
+3 549 548 547
+3 549 547 551
+3 553 554 552
+3 548 554 553
+3 550 554 548
+3 556 557 555
+3 559 560 558
+3 555 562 561
+3 563 561 562
+3 559 561 563
+3 559 558 561
+3 561 558 556
+3 556 555 561
+3 549 564 550
+3 549 551 564
+3 57 565 58
+3 567 136 566
+3 566 138 567
+3 138 135 567
+3 567 135 136
+3 568 566 136
+3 570 571 569
+3 140 570 569
+3 572 569 571
+3 140 142 570
+3 570 142 573
+3 574 570 573
+3 574 571 570
+3 575 576 572
+3 577 578 143
+3 578 577 576
+3 577 143 141
+3 578 576 575
+3 146 578 575
+3 146 143 578
+3 576 580 579
+3 140 579 141
+3 569 579 140
+3 572 579 569
+3 579 572 576
+3 576 577 580
+3 579 580 141
+3 141 580 577
+3 152 582 581
+3 152 151 582
+3 150 149 583
+3 147 584 583
+3 147 583 149
+3 586 587 585
+3 171 586 585
+3 156 585 157
+3 171 585 156
+3 170 586 171
+3 174 586 170
+3 174 587 586
+3 588 157 585
+3 585 587 588
+3 589 154 148
+3 150 589 148
+3 583 589 150
+3 584 589 583
+3 591 592 590
+3 592 593 590
+3 590 588 591
+3 594 591 588
+3 595 596 594
+3 597 595 594
+3 592 596 595
+3 593 592 595
+3 592 591 596
+3 596 591 594
+3 149 599 598
+3 149 148 599
+3 599 148 155
+3 598 599 145
+3 145 599 155
+3 598 145 147
+3 147 149 598
+3 601 602 600
+3 157 601 158
+3 157 602 601
+3 604 605 603
+3 606 604 603
+3 607 603 605
+3 606 603 608
+3 192 191 609
+3 191 608 609
+3 611 612 610
+3 610 612 139
+3 139 612 142
+3 610 139 144
+3 614 615 613
+3 617 618 616
+3 620 616 619
+3 616 620 621
+3 616 621 617
+3 262 623 622
+3 262 624 623
+3 263 626 625
+3 262 626 263
+3 262 622 626
+3 625 627 166
+3 166 263 625
+3 625 628 627
+3 626 628 625
+3 630 631 629
+3 633 629 632
+3 633 634 630
+3 633 630 629
+3 636 637 635
+3 158 638 637
+3 637 636 158
+3 601 638 158
+3 640 641 639
+3 631 641 640
+3 630 641 631
+3 630 634 641
+3 639 641 642
+3 641 634 642
+3 644 640 643
+3 639 643 640
+3 645 643 639
+3 631 640 644
+3 631 646 629
+3 644 646 631
+3 647 646 635
+3 635 646 644
+3 637 647 635
+3 647 629 646
+3 637 638 647
+3 163 648 164
+3 632 648 163
+3 632 629 648
+3 647 649 648
+3 629 647 648
+3 638 649 647
+3 601 649 638
+3 649 601 600
+3 607 651 650
+3 609 608 650
+3 608 603 650
+3 650 603 607
+3 652 653 618
+3 619 616 653
+3 616 618 653
+3 655 36 654
+3 655 178 39
+3 39 36 655
+3 35 654 36
+3 35 42 654
+3 42 165 654
+3 165 657 656
+3 166 657 165
+3 656 180 178
+3 655 656 178
+3 655 654 656
+3 165 656 654
+3 166 658 657
+3 166 627 658
+3 659 658 628
+3 627 628 658
+3 660 659 628
+3 661 659 660
+3 659 661 662
+3 663 657 658
+3 665 666 664
+3 666 665 667
+3 621 668 162
+3 669 668 620
+3 621 620 668
+3 669 634 633
+3 633 632 669
+3 668 669 163
+3 162 668 163
+3 669 632 163
+3 670 671 669
+3 670 669 620
+3 670 620 619
+3 189 671 670
+3 188 671 189
+3 188 642 671
+3 634 671 642
+3 634 669 671
+3 673 674 672
+3 675 673 672
+3 191 673 675
+3 673 191 190
+3 677 678 676
+3 674 676 678
+3 674 678 672
+3 676 674 679
+3 681 674 680
+3 679 674 681
+3 673 680 674
+3 190 681 680
+3 190 680 673
+3 682 679 681
+3 195 683 196
+3 685 686 684
+3 198 688 687
+3 198 197 688
+3 688 197 689
+3 690 691 689
+3 693 694 692
+3 18 693 695
+3 694 696 692
+3 693 697 695
+3 698 699 697
+3 697 692 698
+3 699 700 697
+3 697 693 692
+3 702 703 701
+3 703 704 701
+3 213 703 702
+3 213 704 703
+3 702 211 213
+3 705 706 701
+3 705 707 706
+3 209 706 707
+3 706 708 701
+3 702 708 211
+3 708 702 701
+3 710 711 709
+3 710 709 211
+3 710 708 712
+3 710 211 708
+3 706 712 708
+3 209 712 706
+3 208 712 209
+3 712 711 710
+3 208 711 712
+3 713 711 208
+3 714 715 713
+3 714 713 208
+3 256 715 714
+3 255 715 256
+3 717 718 716
+3 499 496 717
+3 719 717 716
+3 719 499 717
+3 719 716 720
+3 721 722 498
+3 496 498 722
+3 718 724 723
+3 717 724 718
+3 717 496 724
+3 724 496 722
+3 722 721 724
+3 718 725 716
+3 725 718 723
+3 723 726 725
+3 728 729 727
+3 720 729 728
+3 729 720 716
+3 729 716 725
+3 730 729 725
+3 730 731 729
+3 727 729 731
+3 733 734 732
+3 736 737 735
+3 738 502 216
+3 739 738 215
+3 215 738 216
+3 741 742 740
+3 744 734 743
+3 742 741 744
+3 734 733 743
+3 743 733 738
+3 739 743 738
+3 742 744 743
+3 739 742 743
+3 746 731 745
+3 732 746 745
+3 737 747 735
+3 749 735 748
+3 735 747 748
+3 747 746 748
+3 748 746 732
+3 749 748 734
+3 734 748 732
+3 744 749 734
+3 741 749 744
+3 736 749 741
+3 736 735 749
+3 751 388 750
+3 388 387 750
+3 387 253 750
+3 750 223 752
+3 253 223 750
+3 754 752 753
+3 751 750 754
+3 750 752 754
+3 753 752 223
+3 755 756 229
+3 756 222 230
+3 229 756 230
+3 758 223 757
+3 758 753 223
+3 757 223 222
+3 757 222 756
+3 759 760 754
+3 751 754 760
+3 759 754 753
+3 759 753 758
+3 763 764 225
+3 764 763 232
+3 225 25 763
+3 25 24 763
+3 764 232 231
+3 764 231 226
+3 764 226 225
+3 765 766 700
+3 755 765 700
+3 18 765 19
+3 18 766 765
+3 766 18 695
+3 766 695 697
+3 700 766 697
+3 768 33 767
+3 19 767 33
+3 767 19 765
+3 755 767 765
+3 755 229 767
+3 227 768 767
+3 229 227 767
+3 768 227 226
+3 250 768 226
+3 244 768 250
+3 33 768 244
+3 228 769 25
+3 228 230 769
+3 222 769 230
+3 25 769 770
+3 25 770 26
+3 771 772 770
+3 770 769 771
+3 771 769 222
+3 771 222 224
+3 224 254 771
+3 772 771 254
+3 254 256 772
+3 776 774 775
+3 778 779 777
+3 781 782 780
+3 784 532 783
+3 532 529 783
+3 786 787 785
+3 783 787 784
+3 529 787 783
+3 785 787 529
+3 789 330 788
+3 721 498 789
+3 789 331 330
+3 788 330 790
+3 790 791 788
+3 793 497 792
+3 499 792 497
+3 499 794 792
+3 795 796 793
+3 331 796 795
+3 331 789 796
+3 498 796 789
+3 497 796 498
+3 497 793 796
+3 798 333 797
+3 334 797 333
+3 334 331 797
+3 331 795 797
+3 800 801 799
+3 803 804 802
+3 799 801 804
+3 201 806 805
+3 201 203 806
+3 807 808 784
+3 800 809 807
+3 807 809 808
+3 809 810 808
+3 811 808 810
+3 532 808 811
+3 808 532 784
+3 813 801 812
+3 813 804 801
+3 812 801 800
+3 800 807 812
+3 813 815 814
+3 812 815 813
+3 804 814 816
+3 804 813 814
+3 819 507 818
+3 818 507 505
+3 730 725 820
+3 820 725 726
+3 821 822 819
+3 730 820 821
+3 824 257 823
+3 823 257 454
+3 823 454 455
+3 823 455 46
+3 285 258 824
+3 824 258 257
+3 41 826 825
+3 45 825 826
+3 44 825 45
+3 624 825 44
+3 262 825 624
+3 41 825 262
+3 45 826 827
+3 827 826 41
+3 828 824 823
+3 828 46 827
+3 46 45 827
+3 823 46 828
+3 41 829 827
+3 829 41 40
+3 829 40 260
+3 261 829 260
+3 829 261 285
+3 830 829 285
+3 824 830 285
+3 830 824 828
+3 827 829 830
+3 830 828 827
+3 290 832 831
+3 290 831 833
+3 290 289 832
+3 289 834 832
+3 831 835 833
+3 274 837 836
+3 286 836 287
+3 286 274 836
+3 274 51 837
+3 839 840 838
+3 841 838 840
+3 842 838 841
+3 843 838 842
+3 845 846 844
+3 848 849 847
+3 846 847 849
+3 850 848 847
+3 852 853 851
+3 854 853 852
+3 852 851 839
+3 839 854 852
+3 851 840 839
+3 855 840 851
+3 853 856 855
+3 851 853 855
+3 855 856 841
+3 841 840 855
+3 841 856 857
+3 854 859 858
+3 860 853 858
+3 858 853 854
+3 860 856 853
+3 862 863 861
+3 863 864 861
+3 857 861 864
+3 861 857 856
+3 860 861 856
+3 864 863 865
+3 866 867 519
+3 867 122 393
+3 867 393 518
+3 519 867 518
+3 292 866 519
+3 869 519 868
+3 517 868 519
+3 869 868 53
+3 868 517 53
+3 55 869 53
+3 55 295 869
+3 292 869 295
+3 292 519 869
+3 871 872 870
+3 872 873 870
+3 874 875 871
+3 56 877 876
+3 56 130 877
+3 130 878 877
+3 876 879 56
+3 59 879 880
+3 56 879 59
+3 59 880 304
+3 465 467 881
+3 883 884 882
+3 885 886 315
+3 886 316 315
+3 885 315 314
+3 440 888 887
+3 888 890 889
+3 887 888 891
+3 891 888 889
+3 319 887 891
+3 887 319 318
+3 318 440 887
+3 893 894 892
+3 896 897 895
+3 537 896 895
+3 537 536 896
+3 533 896 536
+3 533 898 896
+3 900 901 899
+3 900 899 902
+3 903 904 899
+3 903 899 901
+3 900 903 901
+3 895 906 905
+3 906 537 905
+3 537 895 905
+3 197 199 907
+3 907 199 908
+3 910 911 909
+3 912 913 545
+3 912 545 540
+3 329 328 912
+3 328 911 912
+3 915 916 914
+3 322 914 916
+3 322 321 914
+3 214 915 914
+3 321 214 914
+3 918 350 917
+3 917 350 348
+3 917 916 918
+3 918 916 915
+3 917 919 916
+3 920 921 785
+3 544 921 543
+3 785 529 920
+3 921 920 531
+3 921 531 543
+3 920 529 531
+3 922 921 544
+3 922 544 545
+3 913 922 545
+3 923 922 913
+3 922 924 921
+3 924 785 921
+3 926 923 925
+3 922 926 924
+3 922 923 926
+3 928 929 927
+3 929 928 930
+3 928 931 930
+3 933 934 932
+3 935 929 933
+3 933 929 930
+3 934 933 930
+3 924 926 932
+3 935 937 936
+3 933 937 935
+3 937 933 932
+3 938 937 926
+3 926 925 938
+3 937 932 926
+3 939 940 923
+3 940 925 923
+3 939 923 913
+3 912 939 913
+3 912 911 939
+3 939 910 940
+3 911 910 939
+3 942 943 941
+3 910 942 941
+3 909 942 910
+3 945 946 944
+3 945 910 946
+3 910 945 940
+3 946 910 941
+3 944 946 907
+3 948 949 947
+3 938 925 949
+3 940 947 949
+3 940 949 925
+3 945 947 940
+3 947 945 944
+3 944 950 947
+3 950 948 947
+3 336 952 951
+3 335 952 336
+3 953 326 325
+3 954 955 953
+3 955 954 956
+3 958 959 957
+3 961 962 960
+3 960 962 963
+3 960 963 964
+3 966 967 965
+3 967 966 961
+3 360 966 965
+3 360 359 966
+3 960 967 961
+3 963 969 968
+3 969 963 962
+3 969 961 970
+3 962 961 969
+3 961 966 970
+3 972 973 971
+3 972 971 964
+3 963 973 972
+3 964 963 972
+3 973 963 968
+3 973 974 971
+3 974 973 968
+3 974 968 969
+3 975 976 341
+3 341 976 339
+3 978 341 977
+3 341 340 977
+3 978 975 341
+3 980 981 979
+3 979 981 982
+3 980 979 360
+3 965 980 360
+3 361 360 979
+3 984 985 983
+3 984 983 986
+3 988 989 987
+3 985 988 987
+3 965 990 980
+3 980 990 991
+3 989 991 987
+3 989 981 991
+3 991 981 980
+3 993 994 992
+3 993 991 994
+3 993 987 991
+3 991 990 994
+3 219 995 255
+3 219 218 995
+3 995 381 996
+3 995 218 381
+3 997 715 255
+3 255 995 997
+3 997 995 998
+3 995 996 998
+3 999 713 715
+3 999 715 997
+3 999 997 998
+3 355 354 1000
+3 1000 349 1001
+3 349 1000 354
+3 356 1000 1001
+3 355 1000 356
+3 1001 346 356
+3 357 1003 1002
+3 357 1002 1004
+3 357 1005 1003
+3 357 356 1005
+3 1007 1008 1006
+3 1009 1007 1006
+3 1012 1013 1011
+3 1014 1011 1013
+3 1015 1011 1014
+3 1015 1016 1011
+3 1012 1011 1016
+3 1017 1018 685
+3 685 1018 686
+3 1020 1018 1019
+3 893 1020 1019
+3 1020 893 892
+3 1020 1021 684
+3 1020 684 686
+3 1018 1020 686
+3 1023 904 1022
+3 359 361 1024
+3 1026 1027 1025
+3 1028 1027 1026
+3 1030 1031 1029
+3 1032 1030 1029
+3 1034 1035 1033
+3 1035 1036 1033
+3 1037 1038 1036
+3 1037 1036 1035
+3 1037 1039 1038
+3 1039 1029 1038
+3 1041 1037 1040
+3 1040 1028 1026
+3 1037 1041 1039
+3 364 1043 1042
+3 386 384 1042
+3 363 1043 364
+3 363 1044 1043
+3 363 1030 1044
+3 1030 1032 1044
+3 386 1045 385
+3 1045 1042 1044
+3 1043 1044 1042
+3 386 1042 1045
+3 1047 1032 1046
+3 1048 1049 1047
+3 1047 1046 1048
+3 342 1049 1048
+3 1050 1051 1045
+3 1051 1050 1047
+3 1050 1045 1044
+3 1032 1050 1044
+3 1047 1050 1032
+3 1049 1051 1047
+3 381 385 1051
+3 1051 385 1045
+3 1053 1054 1052
+3 1054 1055 1052
+3 1057 384 1056
+3 1057 1056 1055
+3 1052 1055 1056
+3 362 1057 1055
+3 364 1057 362
+3 1057 364 1042
+3 384 1057 1042
+3 389 445 1058
+3 445 447 1058
+3 1056 1058 447
+3 389 1058 1059
+3 383 1059 1058
+3 384 1058 1056
+3 384 383 1058
+3 220 1059 383
+3 220 252 1059
+3 387 1059 252
+3 389 1059 387
+3 1061 1062 1060
+3 1063 1062 1061
+3 1065 1066 1064
+3 1065 1064 1063
+3 1061 1065 1063
+3 1067 1065 1061
+3 1068 1069 1065
+3 1068 1065 1067
+3 1071 376 1070
+3 376 1071 373
+3 1070 376 518
+3 1070 518 393
+3 1072 374 373
+3 373 1071 1072
+3 1074 1075 1073
+3 1073 1075 1076
+3 1078 1026 1077
+3 1078 1041 1040
+3 1026 1078 1040
+3 1079 1080 1025
+3 1079 1075 1080
+3 1079 1025 1081
+3 1080 1077 1026
+3 1025 1080 1026
+3 1069 1082 1065
+3 397 1084 1083
+3 1084 1085 1083
+3 1082 1069 1086
+3 1088 1089 407
+3 407 406 1088
+3 1088 1087 1089
+3 1088 406 1087
+3 401 404 1090
+3 404 405 1090
+3 415 414 1091
+3 1093 1094 1092
+3 1095 1092 1094
+3 1097 420 1096
+3 421 420 1097
+3 1096 420 106
+3 108 1096 106
+3 1099 1100 1098
+3 107 1099 1098
+3 1098 521 107
+3 107 422 1099
+3 1099 422 423
+3 1101 1099 423
+3 1100 1099 1101
+3 1101 1103 1102
+3 423 1103 1101
+3 424 1103 423
+3 1103 425 1102
+3 1103 424 425
+3 1066 1102 425
+3 1104 1106 1105
+3 1108 1107 1109
+3 1111 1112 1110
+3 1113 1114 1112
+3 1110 1115 1111
+3 1108 1109 1116
+3 1109 1111 1116
+3 428 1117 431
+3 427 1117 428
+3 1119 1120 1118
+3 1118 621 1119
+3 621 1118 617
+3 1122 1123 1121
+3 1124 1123 1122
+3 1123 1118 1121
+3 1120 1121 1118
+3 1121 1120 605
+3 1121 605 604
+3 1121 606 1122
+3 604 606 1121
+3 1125 1126 675
+3 1126 1125 606
+3 1124 1122 1125
+3 606 1125 1122
+3 608 1126 606
+3 1126 608 191
+3 1126 191 675
+3 1128 1124 1127
+3 1128 678 677
+3 1124 1125 1127
+3 675 1127 1125
+3 1127 672 1128
+3 1128 672 678
+3 675 672 1127
+3 1118 1130 1129
+3 1123 1130 1118
+3 617 1129 618
+3 1118 1129 617
+3 618 1129 1131
+3 1131 1130 1132
+3 1129 1130 1131
+3 1134 1135 1133
+3 1124 1135 1134
+3 1133 1132 1134
+3 1130 1134 1132
+3 1134 1130 1123
+3 1134 1123 1124
+3 1135 1124 1128
+3 1136 677 662
+3 1136 662 661
+3 1135 1137 1133
+3 1137 1128 1136
+3 1128 677 1136
+3 1137 1135 1128
+3 1139 661 1138
+3 1138 661 660
+3 1140 1139 1138
+3 1139 1140 1141
+3 1140 1138 660
+3 49 1143 1142
+3 1143 37 1142
+3 1143 49 48
+3 38 1143 48
+3 1143 38 37
+3 39 1142 37
+3 49 1145 1144
+3 49 1142 1145
+3 116 49 1144
+3 1131 1147 1146
+3 1146 652 618
+3 618 1131 1146
+3 1131 1132 1147
+3 1146 1147 1144
+3 1144 652 1146
+3 1147 116 1144
+3 47 1148 50
+3 1148 47 116
+3 50 1148 1149
+3 1149 1148 431
+3 432 431 1148
+3 51 50 1149
+3 1132 1150 1147
+3 1150 433 1151
+3 432 1151 433
+3 1148 1151 432
+3 1150 1151 116
+3 1150 116 1147
+3 1151 1148 116
+3 1153 434 1152
+3 434 433 1152
+3 1152 433 1150
+3 1152 1132 1154
+3 1132 1152 1150
+3 1154 1132 1133
+3 1137 1154 1133
+3 1155 1156 1152
+3 1156 1153 1152
+3 1154 1155 1152
+3 1154 1137 1155
+3 1155 1137 1136
+3 1155 1136 661
+3 1155 1139 1156
+3 1141 1156 1139
+3 1139 1155 661
+3 1157 1158 270
+3 1157 270 449
+3 1157 449 1159
+3 449 121 1159
+3 1160 1161 660
+3 628 1160 660
+3 622 1161 1160
+3 626 1160 628
+3 1160 626 622
+3 1161 1140 660
+3 271 270 1162
+3 1162 270 1158
+3 1162 1163 271
+3 1161 1163 1162
+3 622 1163 1161
+3 622 623 1163
+3 623 624 1163
+3 624 44 1163
+3 1163 44 271
+3 1164 1165 1140
+3 1140 1165 1141
+3 1161 1164 1140
+3 1162 1164 1161
+3 1165 1164 1158
+3 1158 1164 1162
+3 1159 1166 1157
+3 1141 1165 1167
+3 1166 1167 1158
+3 1166 1158 1157
+3 1167 1165 1158
+3 1166 1169 1168
+3 1169 1166 1159
+3 1159 121 1169
+3 1168 1141 1167
+3 1168 1167 1166
+3 1171 1169 1170
+3 1169 121 1170
+3 121 430 1170
+3 434 1171 1170
+3 1170 430 434
+3 1171 434 1153
+3 1156 1171 1153
+3 1141 1171 1156
+3 1171 1141 1168
+3 1168 1169 1171
+3 441 487 1172
+3 1172 442 441
+3 1173 1174 525
+3 1173 525 102
+3 1175 1173 102
+3 1175 102 104
+3 1175 1176 1173
+3 523 522 1176
+3 1174 1173 1176
+3 720 728 1177
+3 1178 794 499
+3 1177 1178 719
+3 720 1177 719
+3 719 1178 499
+3 1177 1179 1178
+3 1181 792 1180
+3 797 1181 1180
+3 792 794 1180
+3 1183 1180 1182
+3 798 1180 1183
+3 797 1180 798
+3 797 795 1181
+3 795 793 1181
+3 792 1181 793
+3 794 1185 1184
+3 1178 1185 794
+3 1180 1184 1182
+3 1180 794 1184
+3 1187 1185 1186
+3 1185 1187 1184
+3 1178 1186 1185
+3 1186 1178 1179
+3 1186 1188 1187
+3 1179 1188 1186
+3 1192 1193 1191
+3 1190 1192 1191
+3 1190 1189 1192
+3 1194 1195 557
+3 557 1196 1194
+3 1196 1197 1194
+3 551 1195 564
+3 1199 1200 1198
+3 1201 1198 1200
+3 1201 1202 1198
+3 120 1199 1198
+3 119 1199 120
+3 1198 1202 120
+3 100 1203 450
+3 101 1203 100
+3 118 1205 1204
+3 1205 118 121
+3 1203 1205 450
+3 1205 121 450
+3 1207 1204 1206
+3 101 1207 1206
+3 1204 1205 1206
+3 1205 1203 1206
+3 1206 1203 101
+3 525 1207 101
+3 1174 1207 525
+3 1208 1209 1204
+3 1208 1204 1207
+3 1174 1208 1207
+3 1210 1211 1199
+3 1210 1199 119
+3 119 118 1210
+3 1204 1210 118
+3 1210 1204 1209
+3 1199 1211 1200
+3 414 1212 1091
+3 414 520 1212
+3 1213 1212 520
+3 1212 1215 1214
+3 1213 1215 1212
+3 1217 123 1216
+3 1217 124 123
+3 1216 123 1201
+3 1216 1201 1200
+3 1218 1219 1217
+3 1218 520 1219
+3 1216 1218 1217
+3 1220 1213 1218
+3 1218 1213 520
+3 1219 520 391
+3 1219 391 390
+3 124 1219 390
+3 124 1217 1219
+3 1221 1222 127
+3 127 1222 358
+3 1221 127 126
+3 527 1221 126
+3 507 1222 1221
+3 1222 507 819
+3 527 507 1221
+3 1064 1224 1223
+3 508 526 1223
+3 526 527 1223
+3 527 528 1223
+3 1223 528 1064
+3 1226 1227 1225
+3 1227 898 1225
+3 533 1228 1225
+3 1228 533 535
+3 1225 898 533
+3 1230 1231 1229
+3 1230 1229 1232
+3 1230 1233 1231
+3 1235 1236 1234
+3 1234 1236 553
+3 1234 553 552
+3 552 1233 1234
+3 553 1238 1237
+3 1236 1238 553
+3 546 548 1237
+3 548 553 1237
+3 1239 1240 1236
+3 546 1237 1240
+3 1237 1238 1240
+3 1240 1238 1236
+3 1241 562 555
+3 1243 1244 1242
+3 1243 132 1244
+3 1246 1243 1245
+3 1243 1242 1245
+3 136 1245 568
+3 134 1246 1245
+3 134 1245 136
+3 133 1246 134
+3 133 132 1246
+3 132 1243 1246
+3 1247 1248 834
+3 1247 834 289
+3 289 291 1247
+3 1250 1251 1249
+3 1249 565 1250
+3 1251 1250 1252
+3 1251 556 1249
+3 1251 1196 557
+3 557 556 1251
+3 1254 1251 1253
+3 1254 1196 1251
+3 1253 1251 1252
+3 1256 1253 1255
+3 1255 1253 1252
+3 1255 1252 1250
+3 1258 1259 1257
+3 1258 1260 1259
+3 1260 1254 1259
+3 1259 1254 1253
+3 1259 1253 1256
+3 1261 1259 1256
+3 1257 1259 1261
+3 1263 1258 1262
+3 1262 1258 1257
+3 1248 1262 1257
+3 1262 1248 1247
+3 1265 1266 1264
+3 571 1268 1267
+3 571 574 1268
+3 1269 1268 574
+3 1269 574 1266
+3 1265 1269 1266
+3 587 1271 1270
+3 582 1270 1271
+3 1271 587 174
+3 175 1271 174
+3 175 176 1271
+3 176 582 1271
+3 1272 1273 597
+3 1273 1272 587
+3 594 1272 597
+3 594 588 1272
+3 587 1272 588
+3 1273 587 1270
+3 154 1274 151
+3 1275 1276 1274
+3 1270 1276 1275
+3 1273 1270 1275
+3 1270 582 1276
+3 1276 582 151
+3 1276 151 1274
+3 1278 575 1277
+3 146 1278 147
+3 575 1278 146
+3 575 572 1277
+3 571 1277 572
+3 1267 1277 571
+3 1279 1280 1267
+3 1280 584 147
+3 147 1278 1280
+3 1278 1277 1280
+3 1267 1280 1277
+3 1282 590 1281
+3 157 1282 1281
+3 157 1281 602
+3 1282 157 588
+3 588 590 1282
+3 1284 584 1283
+3 589 584 1284
+3 1283 584 1280
+3 602 1281 1283
+3 1281 590 1283
+3 593 1284 1283
+3 590 593 1283
+3 1286 1274 1285
+3 1275 1274 1286
+3 1285 1274 154
+3 154 589 1285
+3 589 1284 1285
+3 593 1286 1285
+3 1285 1284 593
+3 595 1288 1287
+3 1288 595 597
+3 1288 597 1273
+3 1287 1288 1273
+3 1273 1275 1287
+3 1286 1287 1275
+3 1287 1286 593
+3 593 595 1287
+3 1290 573 1289
+3 1290 574 573
+3 1289 573 142
+3 142 612 1289
+3 1266 1292 1291
+3 574 1292 1266
+3 1290 1292 574
+3 1289 1292 1290
+3 1291 615 1264
+3 1291 1264 1266
+3 1293 1289 612
+3 1293 612 611
+3 1295 1296 1294
+3 613 1294 1297
+3 1295 1299 1298
+3 1295 1294 1299
+3 613 1299 1294
+3 615 1299 613
+3 1291 1299 615
+3 1299 1291 1292
+3 1299 1289 1298
+3 1299 1292 1289
+3 1298 1289 1293
+3 1293 1300 1298
+3 1301 1302 636
+3 156 158 1302
+3 158 636 1302
+3 1301 636 635
+3 1301 173 172
+3 1301 168 1302
+3 168 156 1302
+3 168 1301 172
+3 1303 1304 177
+3 173 1303 177
+3 1303 173 1301
+3 1303 635 1304
+3 1303 1301 635
+3 1305 645 639
+3 1305 642 1306
+3 1305 639 642
+3 1306 642 188
+3 187 1306 188
+3 1306 187 1307
+3 1309 581 1308
+3 581 582 1308
+3 1308 176 1309
+3 177 1309 176
+3 582 176 1308
+3 1311 1312 1310
+3 1310 1312 1309
+3 1309 177 1310
+3 1304 1310 177
+3 1313 1311 1310
+3 1313 1310 1304
+3 1304 635 1314
+3 1314 635 644
+3 643 1314 644
+3 1314 1315 1313
+3 1313 1304 1314
+3 1315 1311 1313
+3 161 1317 1316
+3 160 1317 161
+3 1269 1316 1268
+3 1265 1316 1269
+3 1265 161 1316
+3 1279 1267 1318
+3 1268 1318 1267
+3 1268 1316 1318
+3 605 1120 1319
+3 1321 607 1320
+3 1320 607 605
+3 1320 605 1319
+3 1322 1321 1320
+3 1322 1320 1319
+3 1321 1322 159
+3 1323 1324 651
+3 651 607 1323
+3 1321 1324 1323
+3 1321 1323 607
+3 1326 609 1325
+3 1325 609 650
+3 650 651 1325
+3 1328 613 1327
+3 613 1297 1327
+3 1327 1297 664
+3 1327 664 1329
+3 614 613 1328
+3 1331 1328 1330
+3 1331 1330 1325
+3 651 1331 1325
+3 1328 1331 614
+3 1333 194 1332
+3 180 1332 194
+3 180 656 1332
+3 656 1333 1332
+3 657 1333 656
+3 657 663 1333
+3 662 677 1334
+3 1334 677 1335
+3 677 676 1335
+3 1334 1335 1336
+3 1335 676 1336
+3 676 679 1336
+3 1338 1334 1337
+3 658 1338 663
+3 1338 658 659
+3 662 1338 659
+3 1334 1338 662
+3 1337 1334 1336
+3 1337 1336 1339
+3 1339 194 1337
+3 1337 194 1333
+3 663 1338 1337
+3 663 1337 1333
+3 1341 190 1340
+3 190 192 1340
+3 1340 192 609
+3 1342 1341 1340
+3 1340 609 1342
+3 1326 1342 609
+3 1344 1345 1343
+3 1341 1344 1343
+3 1345 682 1343
+3 682 681 1343
+3 1343 681 190
+3 1343 190 1341
+3 1342 1344 1341
+3 1344 1342 1346
+3 1342 1347 1346
+3 1347 1342 1326
+3 1348 1347 1325
+3 1325 1347 1326
+3 1348 1325 1330
+3 1348 1329 1347
+3 1348 1330 1328
+3 1328 1327 1348
+3 1348 1327 1329
+3 1347 1350 1349
+3 1347 1329 1350
+3 664 1350 1329
+3 1349 1344 1346
+3 1346 1347 1349
+3 1351 1352 1349
+3 1351 1353 1352
+3 1349 1350 1351
+3 664 1351 1350
+3 1351 664 666
+3 1352 1345 1344
+3 1352 1344 1349
+3 185 184 1354
+3 1354 184 189
+3 1145 1142 1355
+3 1142 39 1355
+3 1355 39 179
+3 185 1354 1355
+3 185 1355 179
+3 1356 1357 652
+3 1357 1356 619
+3 1357 619 653
+3 653 652 1357
+3 1144 1356 652
+3 1144 1145 1356
+3 1359 1354 1358
+3 1356 1359 1358
+3 1356 1145 1359
+3 1359 1145 1355
+3 1354 1359 1355
+3 1354 189 1358
+3 189 670 1358
+3 1358 670 619
+3 1356 1358 619
+3 1360 1361 195
+3 193 1360 195
+3 1363 1353 1362
+3 1353 1351 1362
+3 1362 1351 666
+3 1365 1366 1364
+3 1366 1367 1364
+3 1369 1370 1368
+3 1369 1368 1364
+3 1369 1364 1371
+3 1371 1364 1367
+3 1370 1373 1372
+3 1370 1372 1368
+3 1376 1377 1375
+3 1376 1378 1377
+3 1378 1374 1377
+3 1379 1376 1375
+3 1380 1376 1379
+3 1376 1380 1378
+3 1382 1383 1381
+3 1382 1016 1015
+3 1379 1381 1383
+3 1385 1383 1384
+3 1383 1382 1384
+3 1387 1388 1386
+3 1389 1386 1388
+3 1391 1389 1390
+3 1390 799 1391
+3 1388 1390 1389
+3 685 1390 1388
+3 685 684 1390
+3 1390 684 799
+3 804 1391 799
+3 804 803 1391
+3 803 1389 1391
+3 1392 1387 1386
+3 687 1392 1386
+3 1393 1394 200
+3 206 1393 200
+3 908 1393 206
+3 199 1393 908
+3 198 1394 1393
+3 198 1393 199
+3 802 203 1394
+3 200 1394 203
+3 802 1395 803
+3 802 1394 1395
+3 1395 198 1396
+3 1395 1394 198
+3 1396 198 687
+3 1386 1396 687
+3 1386 1389 1396
+3 1396 803 1395
+3 1389 803 1396
+3 538 537 1397
+3 906 1397 537
+3 329 912 1398
+3 912 540 1398
+3 1398 540 539
+3 1397 1398 538
+3 1398 539 538
+3 329 1399 327
+3 1399 329 1398
+3 1399 1400 327
+3 1398 1397 1399
+3 1397 906 1399
+3 1402 1403 1401
+3 1403 1404 1401
+3 1400 1405 327
+3 909 1406 942
+3 911 1406 909
+3 911 328 1406
+3 1407 1406 327
+3 327 1406 328
+3 327 1405 1407
+3 1408 1409 943
+3 1408 943 942
+3 1408 942 1406
+3 1408 1406 1407
+3 1409 1408 1405
+3 1405 1408 1407
+3 1409 1405 1401
+3 1401 1404 1409
+3 689 197 1410
+3 197 907 1410
+3 946 1411 1410
+3 907 946 1410
+3 946 941 1411
+3 941 943 1411
+3 207 1412 208
+3 1414 1415 1413
+3 1414 1413 727
+3 1414 727 731
+3 746 1414 731
+3 746 747 1414
+3 1417 821 1416
+3 1417 730 821
+3 731 1417 1416
+3 1417 731 730
+3 745 731 1416
+3 1420 1421 751
+3 1421 1420 320
+3 320 1420 448
+3 446 1421 320
+3 388 1421 446
+3 1421 388 751
+3 1422 1420 751
+3 751 760 1422
+3 1423 448 1422
+3 1422 448 1420
+3 487 448 1423
+3 759 1424 760
+3 1423 1425 1419
+3 1424 1425 1422
+3 1424 1422 760
+3 1422 1425 1423
+3 1418 1427 1426
+3 1426 1427 1424
+3 1427 1425 1424
+3 1424 759 1426
+3 1429 1430 1428
+3 1430 762 1428
+3 777 1432 1431
+3 1433 1432 779
+3 1432 777 779
+3 1434 1430 1429
+3 1432 1433 1435
+3 692 696 1436
+3 23 1438 1437
+3 1438 694 1437
+3 693 1437 694
+3 18 1437 693
+3 17 1437 18
+3 17 23 1437
+3 694 1438 696
+3 696 1440 1439
+3 1438 1440 696
+3 23 1440 1438
+3 1440 27 1439
+3 23 27 1440
+3 1439 27 5
+3 232 1439 5
+3 232 763 1439
+3 1439 763 24
+3 337 1442 1441
+3 336 1442 337
+3 1441 791 790
+3 790 337 1441
+3 1442 1444 1443
+3 1443 1441 1442
+3 1446 791 1445
+3 1445 791 1441
+3 1445 1441 1443
+3 1445 1443 1444
+3 721 1447 724
+3 721 789 1447
+3 1447 789 788
+3 1448 1447 791
+3 1447 788 791
+3 1446 1448 791
+3 1450 924 1449
+3 932 1449 924
+3 1449 931 1450
+3 934 1449 932
+3 934 930 1449
+3 1449 930 931
+3 785 924 1450
+3 1452 786 1451
+3 1451 786 785
+3 1451 785 1450
+3 1452 1451 931
+3 1451 1450 931
+3 798 1452 333
+3 1454 1455 1453
+3 1453 1456 1454
+3 1456 805 1454
+3 1454 805 806
+3 1457 1458 816
+3 203 1458 1457
+3 203 1457 806
+3 203 802 1458
+3 802 804 1458
+3 804 816 1458
+3 806 1459 1454
+3 1457 1459 806
+3 1459 816 1460
+3 1459 1457 816
+3 1462 1463 1461
+3 1465 704 1464
+3 701 704 1465
+3 204 1464 704
+3 201 1464 204
+3 1467 1456 1466
+3 1453 1466 1456
+3 201 1467 1464
+3 1467 201 805
+3 1467 805 1456
+3 705 701 1468
+3 1461 1469 1468
+3 1462 1461 1468
+3 1469 705 1468
+3 1469 707 705
+3 1463 1462 1470
+3 1470 1468 1471
+3 1462 1468 1470
+3 1468 701 1471
+3 1471 701 1465
+3 1464 1471 1465
+3 1467 1470 1471
+3 1470 1467 1466
+3 1467 1471 1464
+3 1470 1473 1472
+3 1466 1473 1470
+3 1466 1453 1473
+3 1472 1463 1470
+3 1473 1474 1472
+3 1473 1453 1474
+3 1474 1453 1475
+3 1455 1475 1453
+3 1476 1475 1455
+3 1460 1476 1477
+3 1477 1476 1455
+3 1454 1477 1455
+3 1459 1477 1454
+3 1459 1460 1477
+3 1479 1475 1478
+3 1478 1475 1476
+3 1460 1478 1476
+3 1460 816 1478
+3 816 814 1478
+3 1188 1479 1187
+3 1480 1479 1188
+3 1479 1480 1475
+3 1448 1482 1481
+3 1448 1446 1482
+3 1483 1484 726
+3 723 1483 726
+3 723 724 1483
+3 1483 724 1447
+3 1447 1448 1483
+3 1483 1448 1484
+3 1481 1484 1448
+3 1486 502 1485
+3 1485 502 738
+3 733 1485 738
+3 732 1485 733
+3 1486 1485 732
+3 732 745 1486
+3 1486 505 502
+3 818 505 1487
+3 505 1486 1487
+3 1487 1486 745
+3 1488 1487 1416
+3 1416 1487 745
+3 821 1488 1416
+3 819 1488 821
+3 1488 818 1487
+3 819 818 1488
+3 1490 1491 1489
+3 1491 1490 1492
+3 1491 1494 1493
+3 1492 1494 1491
+3 276 1496 1495
+3 1495 1496 1490
+3 1492 1490 1496
+3 268 278 1495
+3 1495 278 276
+3 1495 1490 1497
+3 1490 1489 1497
+3 1499 309 1498
+3 309 269 1498
+3 269 266 1498
+3 1497 1498 268
+3 268 1495 1497
+3 1498 266 268
+3 1491 1493 1500
+3 1498 1501 1499
+3 1501 1498 1497
+3 1500 1501 1489
+3 1500 1489 1491
+3 1497 1489 1501
+3 1501 1502 1499
+3 1501 1500 1502
+3 51 1503 837
+3 1503 51 1149
+3 1504 1503 431
+3 1117 1504 431
+3 1503 1149 431
+3 1505 864 865
+3 1507 1508 1506
+3 279 281 1508
+3 865 1510 1509
+3 1506 1509 1510
+3 1506 1508 1509
+3 281 1509 1508
+3 281 282 1509
+3 282 287 1509
+3 1505 865 1511
+3 1511 865 1509
+3 1511 1509 287
+3 842 1512 843
+3 1513 1512 842
+3 1514 843 1512
+3 1515 1512 1513
+3 1516 1517 297
+3 1519 302 1518
+3 843 1518 838
+3 843 1519 1518
+3 1514 1519 843
+3 1516 1519 1514
+3 1516 297 1519
+3 296 1519 297
+3 1519 296 302
+3 839 1521 1520
+3 839 1520 854
+3 1521 839 838
+3 838 1518 1521
+3 302 1521 1518
+3 1521 302 301
+3 1522 859 854
+3 1520 1522 854
+3 1523 1524 882
+3 884 1523 882
+3 884 1525 1523
+3 1527 1493 1526
+3 1493 1494 1526
+3 1526 1494 1528
+3 1526 1528 1529
+3 1529 1527 1526
+3 1529 1530 1527
+3 1531 1532 1527
+3 1527 1530 1531
+3 1533 1532 1531
+3 845 1533 846
+3 1533 845 1532
+3 1535 1536 1534
+3 1534 1538 1537
+3 1534 1539 1538
+3 1538 1541 1540
+3 1539 1541 1538
+3 1542 1543 848
+3 1542 848 850
+3 1540 1541 1542
+3 1545 1528 1544
+3 1545 1544 1529
+3 1546 1544 1528
+3 1547 1548 1544
+3 1548 1530 1544
+3 1544 1530 1529
+3 1545 1529 1528
+3 282 1549 275
+3 282 281 1549
+3 1550 276 1549
+3 276 275 1549
+3 280 1549 281
+3 1550 1494 1492
+3 1492 1496 1550
+3 1496 276 1550
+3 1551 1552 280
+3 1552 1494 1550
+3 1549 1552 1550
+3 1552 1549 280
+3 1553 1551 280
+3 1553 1528 1554
+3 1553 1546 1528
+3 1554 1528 1494
+3 1554 1494 1552
+3 1553 1554 1551
+3 1554 1552 1551
+3 1546 1556 1555
+3 1547 1555 1556
+3 1546 1553 1556
+3 1553 280 1556
+3 279 1556 280
+3 1544 1555 1547
+3 1555 1544 1546
+3 1548 1547 1557
+3 1556 1557 1547
+3 1557 862 1558
+3 862 1557 1556
+3 1560 1558 1559
+3 1559 859 1560
+3 862 1559 1558
+3 1559 862 861
+3 1559 861 860
+3 1559 860 858
+3 859 1559 858
+3 859 1540 1560
+3 1560 1540 1542
+3 1560 1542 850
+3 850 1558 1560
+3 1561 1507 1506
+3 1506 1562 1561
+3 1506 1510 1562
+3 863 1564 1563
+3 1564 1507 1563
+3 1507 1561 1563
+3 1563 1561 1562
+3 1562 1510 1563
+3 1563 1510 865
+3 863 1563 865
+3 1507 1566 1565
+3 1507 1565 1508
+3 1566 1507 1564
+3 1566 1564 863
+3 862 1566 863
+3 1566 862 1556
+3 1565 1566 279
+3 1565 279 1508
+3 1566 1556 279
+3 1567 1568 290
+3 833 1567 290
+3 1568 294 290
+3 1569 1570 866
+3 123 122 1570
+3 1570 122 867
+3 866 1570 867
+3 1201 1569 1202
+3 123 1570 1569
+3 123 1569 1201
+3 1571 1572 1202
+3 1569 1571 1202
+3 1571 1569 866
+3 292 1571 866
+3 294 1571 292
+3 1572 1571 294
+3 294 1568 1572
+3 1572 1568 1567
+3 1202 1572 120
+3 877 1573 876
+3 878 1573 877
+3 1575 880 879
+3 871 870 1576
+3 871 1576 1577
+3 1575 1577 1578
+3 874 1577 1575
+3 874 871 1577
+3 1580 1536 1579
+3 1535 1579 1536
+3 1579 873 1580
+3 873 1581 1580
+3 870 873 1579
+3 873 1582 1581
+3 1583 1582 873
+3 1586 313 316
+3 1588 1586 1587
+3 1587 1586 316
+3 1590 1591 1589
+3 1589 1592 1590
+3 1591 1590 1593
+3 1596 1597 1585
+3 1597 1596 1598
+3 1596 1585 1584
+3 1600 1601 1599
+3 1603 1599 1602
+3 1599 1601 1602
+3 1587 1604 1584
+3 1604 1587 316
+3 1605 1596 1584
+3 1605 1584 1604
+3 1606 1607 883
+3 1608 1607 1606
+3 1608 1609 1607
+3 883 882 1606
+3 1606 882 1608
+3 466 465 1610
+3 1611 1612 1610
+3 1610 465 1611
+3 1611 465 881
+3 881 1612 1611
+3 463 1614 1613
+3 463 462 1614
+3 462 466 1614
+3 466 1615 1614
+3 466 1610 1615
+3 1612 1615 1610
+3 1612 1616 1615
+3 1613 1618 1617
+3 1618 1613 1619
+3 1613 1614 1619
+3 1619 1614 1615
+3 1616 1619 1615
+3 1619 1616 1620
+3 1622 1609 1621
+3 1608 1621 1609
+3 1622 1618 1619
+3 1622 1619 1620
+3 1609 1622 1620
+3 1621 1623 1622
+3 1623 1621 1608
+3 1625 1626 1624
+3 1625 1624 463
+3 1613 1625 463
+3 1617 1625 1613
+3 1625 1617 1626
+3 1628 314 1627
+3 314 313 1627
+3 1630 1228 1629
+3 1629 1228 535
+3 535 541 1629
+3 544 1629 541
+3 543 1629 544
+3 530 1629 543
+3 1631 530 532
+3 811 1631 532
+3 1631 811 810
+3 810 1632 1631
+3 1631 1633 530
+3 1632 1633 1631
+3 1633 1228 1630
+3 1629 1633 1630
+3 1629 530 1633
+3 1634 1635 1633
+3 1632 1634 1633
+3 1228 1633 1635
+3 1227 1637 1636
+3 1637 903 1636
+3 1636 903 900
+3 900 1638 1636
+3 1636 1638 897
+3 1636 897 896
+3 898 1636 896
+3 1227 1636 898
+3 903 1637 904
+3 1639 982 902
+3 899 1639 902
+3 1641 1642 1640
+3 899 1641 1639
+3 1641 904 1642
+3 904 1641 899
+3 1642 904 1023
+3 1008 1642 1023
+3 1642 1008 1007
+3 1644 956 1643
+3 1645 1646 953
+3 1645 953 955
+3 1645 955 951
+3 952 1645 951
+3 1646 326 953
+3 1647 1645 952
+3 1649 338 1648
+3 1649 330 332
+3 1648 338 337
+3 1648 790 1649
+3 1649 790 330
+3 1648 337 790
+3 1651 927 1650
+3 1650 332 1651
+3 1650 1649 332
+3 1651 332 333
+3 1652 1653 338
+3 1653 335 338
+3 1652 338 1649
+3 1650 1652 1649
+3 1653 1654 335
+3 1655 1654 1652
+3 1652 1654 1653
+3 1657 1652 1656
+3 1655 1652 1657
+3 1652 1650 1656
+3 1659 210 1658
+3 214 1658 210
+3 1658 214 321
+3 321 323 1658
+3 213 210 1659
+3 1659 1658 1660
+3 1660 1658 323
+3 324 1661 1660
+3 324 1660 323
+3 1662 1663 326
+3 1663 1661 324
+3 1663 324 326
+3 1665 1647 1664
+3 1664 1662 1665
+3 1665 1662 326
+3 326 1646 1665
+3 1646 1645 1665
+3 1665 1645 1647
+3 1666 704 213
+3 213 1659 1666
+3 1666 1660 1667
+3 1666 1659 1660
+3 1660 1661 1667
+3 204 1666 1667
+3 1666 204 704
+3 204 1667 205
+3 908 206 1668
+3 1668 205 1669
+3 1668 206 205
+3 1669 205 1667
+3 1661 1669 1667
+3 1669 1661 1663
+3 1664 1670 1662
+3 1671 908 1668
+3 1662 1670 1671
+3 1671 1670 1672
+3 1668 1669 1671
+3 1671 1669 1663
+3 1662 1671 1663
+3 1673 1674 1670
+3 1670 1674 1672
+3 1673 1670 1664
+3 1673 1664 1647
+3 1654 1676 1675
+3 335 1675 952
+3 335 1654 1675
+3 1673 1647 1676
+3 1675 1676 952
+3 1647 952 1676
+3 1678 1654 1677
+3 1654 1678 1676
+3 1654 1655 1677
+3 1677 1655 1657
+3 1677 1673 1678
+3 1673 1676 1678
+3 1677 1674 1673
+3 1672 1679 1671
+3 1672 1674 1679
+3 950 944 1680
+3 1680 944 907
+3 1680 908 1679
+3 1679 908 1671
+3 907 908 1680
+3 1681 1674 1677
+3 1681 1677 1657
+3 1681 949 948
+3 1682 1674 1681
+3 1681 948 1682
+3 950 1682 948
+3 1682 950 1680
+3 1679 1682 1680
+3 1674 1682 1679
+3 971 974 1683
+3 1683 974 1684
+3 1684 1685 1683
+3 1686 1687 994
+3 990 1686 994
+3 994 1688 992
+3 1688 994 1687
+3 976 1690 1689
+3 976 1689 339
+3 975 1690 976
+3 1692 1693 1691
+3 1691 1693 1694
+3 1694 1695 1691
+3 1696 1697 1695
+3 1698 1697 1696
+3 1696 1700 1699
+3 1698 1696 1699
+3 1690 1702 1701
+3 1702 1693 1701
+3 1690 975 1702
+3 1701 1693 1692
+3 1692 1691 1701
+3 1695 1701 1691
+3 1701 1695 1697
+3 1697 1689 1701
+3 1690 1701 1689
+3 1704 1693 1703
+3 1693 1702 1703
+3 975 1703 1702
+3 982 981 1705
+3 984 1707 1706
+3 984 1708 1707
+3 984 1706 985
+3 983 1709 986
+3 1709 983 1710
+3 1712 1713 1711
+3 1715 1716 1714
+3 1714 1713 1715
+3 1716 1715 1717
+3 1717 1718 1716
+3 1719 1720 1712
+3 1712 1711 1719
+3 1007 1722 1721
+3 1009 1722 1007
+3 1722 1009 1719
+3 1711 1721 1722
+3 1722 1719 1711
+3 1640 1642 1721
+3 1642 1007 1721
+3 1700 1723 1699
+3 1725 1640 1724
+3 1724 1726 1725
+3 1727 1725 1726
+3 1639 1725 1727
+3 1639 1641 1725
+3 1725 1641 1640
+3 1724 1640 1728
+3 1728 1721 1729
+3 1640 1721 1728
+3 1711 1729 1721
+3 1730 1731 1714
+3 1731 1729 1711
+3 1711 1713 1731
+3 1713 1714 1731
+3 1732 1733 1716
+3 1732 1730 1733
+3 1718 1732 1716
+3 1730 1714 1733
+3 1714 1716 1733
+3 1734 1718 1717
+3 1732 1736 1735
+3 1718 1736 1732
+3 1738 915 1737
+3 918 915 1738
+3 1737 915 214
+3 212 1740 1739
+3 212 211 1740
+3 1740 709 1739
+3 211 709 1740
+3 1737 214 1739
+3 212 1739 214
+3 918 1738 1741
+3 1742 1741 1738
+3 352 351 1742
+3 350 1741 1742
+3 918 1741 350
+3 351 350 1742
+3 352 1744 1743
+3 1744 352 1742
+3 1744 1742 1738
+3 1738 1737 1744
+3 1744 1737 1739
+3 709 1743 1744
+3 709 1744 1739
+3 1743 709 711
+3 1745 1746 999
+3 1745 352 1743
+3 1746 1745 711
+3 1745 1743 711
+3 711 713 1746
+3 713 999 1746
+3 1747 1748 358
+3 1222 1747 358
+3 819 1747 1222
+3 1747 819 822
+3 1748 1005 356
+3 358 1748 356
+3 1008 1023 1749
+3 1023 1022 1749
+3 1750 1751 1008
+3 1750 1008 1749
+3 1749 1752 1750
+3 1006 1008 1751
+3 1754 1387 1753
+3 1754 1017 685
+3 1388 1754 685
+3 1388 1387 1754
+3 1755 1022 904
+3 904 1637 1755
+3 1755 1637 1756
+3 1637 1227 1756
+3 1758 1755 1757
+3 894 1758 892
+3 1757 1755 1756
+3 1757 1756 1227
+3 1757 1227 1226
+3 1759 1760 1752
+3 894 1760 1759
+3 1759 1752 1749
+3 1022 1759 1749
+3 1755 1759 1022
+3 1755 1758 1759
+3 894 1759 1758
+3 1760 894 893
+3 893 1019 1760
+3 1761 1762 1021
+3 800 1762 1761
+3 800 1761 809
+3 1762 800 799
+3 684 1762 799
+3 1021 1762 684
+3 1763 1020 892
+3 1763 892 1634
+3 1763 1634 1632
+3 1764 1763 810
+3 810 1763 1632
+3 1764 810 809
+3 1761 1764 809
+3 1763 1764 1021
+3 1020 1763 1021
+3 1021 1764 1761
+3 1765 1766 970
+3 966 1765 970
+3 966 359 1765
+3 359 1024 1765
+3 361 979 1767
+3 1768 1700 1767
+3 1700 1768 1723
+3 1770 1771 1769
+3 1700 1769 1771
+3 1770 1024 1771
+3 1771 1024 361
+3 1767 1771 361
+3 1700 1771 1767
+3 1696 1769 1700
+3 1696 1695 1769
+3 1028 1774 1027
+3 1773 1774 1028
+3 1775 1774 1772
+3 1772 1774 1773
+3 1776 1025 1027
+3 1774 1776 1027
+3 1777 1776 1775
+3 1774 1775 1776
+3 1777 1081 1776
+3 1025 1776 1081
+3 1781 1779 1780
+3 1781 1778 1779
+3 1780 1010 1781
+3 1010 1778 1781
+3 1782 1783 1015
+3 1782 1015 1014
+3 1780 1782 1014
+3 1780 1779 1782
+3 1382 1783 1384
+3 1382 1015 1783
+3 1785 1779 1784
+3 1782 1779 1785
+3 1785 1787 1786
+3 1787 1785 1784
+3 1035 1034 1787
+3 1787 1034 1786
+3 1786 1034 1384
+3 1786 1384 1783
+3 1782 1786 1783
+3 1782 1785 1786
+3 1789 1040 1788
+3 1037 1788 1040
+3 1035 1788 1037
+3 1787 1788 1035
+3 1789 1788 1784
+3 1784 1788 1787
+3 1773 1789 1784
+3 1773 1028 1789
+3 1789 1028 1040
+3 1790 1791 343
+3 1790 343 342
+3 1790 342 1048
+3 1790 1048 1046
+3 1792 125 127
+3 345 1792 127
+3 345 343 1792
+3 343 1793 1792
+3 1791 1793 343
+3 1793 1073 129
+3 1792 1793 125
+3 1793 129 125
+3 1046 1795 1794
+3 1073 1794 1074
+3 1794 1073 1793
+3 1794 1793 1791
+3 1794 1791 1790
+3 1046 1794 1790
+3 1795 1046 1032
+3 1795 1032 1029
+3 1039 1795 1029
+3 1080 1796 1077
+3 1075 1796 1080
+3 1074 1796 1075
+3 1074 1797 1796
+3 1794 1797 1074
+3 1794 1795 1797
+3 1797 1795 1039
+3 1041 1797 1039
+3 1078 1796 1797
+3 1078 1077 1796
+3 1078 1797 1041
+3 1798 1799 8
+3 8 1799 9
+3 444 1801 1800
+3 1800 1801 889
+3 444 319 1801
+3 891 1801 319
+3 889 1801 891
+3 447 444 1800
+3 1802 1803 1800
+3 1052 1803 1802
+3 1803 1052 1056
+3 447 1803 1056
+3 447 1800 1803
+3 1802 1800 889
+3 890 1802 889
+3 1804 1805 890
+3 1806 1367 1804
+3 1804 1367 1366
+3 1804 1366 1053
+3 1052 1805 1804
+3 1053 1052 1804
+3 1805 1052 1802
+3 890 1805 1802
+3 1807 1808 1067
+3 1809 1808 1807
+3 1061 1807 1067
+3 1061 1060 1807
+3 1807 1060 1809
+3 1808 1068 1067
+3 374 1810 115
+3 1811 1810 1072
+3 1811 1072 396
+3 374 1072 1810
+3 1070 1813 1812
+3 396 1812 1813
+3 1813 1070 393
+3 393 390 1813
+3 392 1813 390
+3 395 1813 392
+3 395 396 1813
+3 1072 1812 396
+3 1072 1071 1812
+3 1070 1812 1071
+3 1815 1816 1814
+3 1818 1815 1817
+3 1815 1814 1817
+3 1820 1821 1819
+3 1821 1817 1819
+3 1820 1818 1821
+3 1817 1821 1818
+3 1820 1822 1818
+3 1823 1824 1819
+3 1817 1823 1819
+3 1817 1814 1823
+3 1825 1826 1063
+3 1063 1064 1825
+3 1825 1064 528
+3 528 128 1825
+3 1825 128 129
+3 1826 1060 1062
+3 1826 1062 1063
+3 1060 1827 1809
+3 1060 1826 1827
+3 1826 1825 1828
+3 1828 1825 129
+3 1828 129 1073
+3 1827 1828 1076
+3 1828 1827 1826
+3 1828 1073 1076
+3 1830 1809 1829
+3 1809 1827 1829
+3 1830 1829 1076
+3 1076 1829 1827
+3 1079 1832 1831
+3 1832 1830 1831
+3 1081 1832 1079
+3 1081 1816 1832
+3 1831 1830 1076
+3 1075 1831 1076
+3 1075 1079 1831
+3 1834 1822 1833
+3 1834 1833 1832
+3 1809 1833 1808
+3 1809 1830 1833
+3 1833 1830 1832
+3 1832 1816 1834
+3 1816 1815 1834
+3 1834 1815 1818
+3 1818 1822 1834
+3 1822 1836 1835
+3 1069 1068 1836
+3 1808 1836 1068
+3 1835 1836 1808
+3 1833 1835 1808
+3 1833 1822 1835
+3 1837 1838 1836
+3 1837 1839 1838
+3 1822 1837 1836
+3 1820 1837 1822
+3 1839 1086 1838
+3 1069 1838 1086
+3 1069 1836 1838
+3 1840 1087 406
+3 1840 1839 1837
+3 1842 1082 1841
+3 1842 1841 1102
+3 1066 1842 1102
+3 1065 1842 1066
+3 1065 1082 1842
+3 1843 1100 1101
+3 1843 1101 1102
+3 1841 1843 1102
+3 1844 1100 1843
+3 1843 1841 1082
+3 1084 1844 1085
+3 1100 1844 1084
+3 1846 1847 1845
+3 1845 1844 1843
+3 1082 1845 1843
+3 1848 1847 1846
+3 1847 1848 1083
+3 1085 1845 1847
+3 1085 1844 1845
+3 1085 1847 1083
+3 1086 1849 1082
+3 1086 1839 1849
+3 1846 1850 1849
+3 1850 1846 1845
+3 1849 1850 1082
+3 1850 1845 1082
+3 1851 1840 406
+3 1851 406 408
+3 1848 1851 408
+3 1851 1848 1846
+3 1851 1846 1852
+3 1849 1852 1846
+3 1839 1852 1849
+3 1840 1851 1852
+3 1840 1852 1839
+3 412 410 1853
+3 402 1853 410
+3 1855 1810 1854
+3 1855 402 410
+3 410 115 1855
+3 1855 115 1810
+3 1811 1854 1810
+3 1857 1811 1856
+3 1811 1857 1854
+3 1856 1811 396
+3 396 394 1856
+3 1857 1856 398
+3 398 400 1857
+3 1856 394 398
+3 1858 403 402
+3 1858 402 1855
+3 1855 1859 1858
+3 1854 1859 1855
+3 1854 1857 1859
+3 1860 1861 1859
+3 1859 1861 1858
+3 1857 1860 1859
+3 1857 400 1860
+3 1860 403 1861
+3 1861 403 1858
+3 403 1860 405
+3 1862 397 1083
+3 1860 1863 405
+3 400 1862 1863
+3 400 397 1862
+3 1860 400 1863
+3 1862 1865 1864
+3 1863 1862 1864
+3 1862 1083 1865
+3 1848 1865 1083
+3 1848 408 1865
+3 1865 407 1864
+3 1865 408 407
+3 1866 104 105
+3 1867 1866 105
+3 1868 1176 1175
+3 1868 104 1866
+3 1868 1175 104
+3 105 1870 1869
+3 105 103 1870
+3 1870 103 98
+3 1867 105 1871
+3 1872 1871 1869
+3 1869 1871 105
+3 1114 1873 1112
+3 1874 1875 416
+3 416 418 1874
+3 1876 1110 1877
+3 1110 1876 1115
+3 1877 1879 1878
+3 1879 443 1878
+3 1877 1110 1879
+3 1110 1112 1879
+3 1873 1879 1112
+3 443 442 1878
+3 1877 1878 442
+3 1881 1114 1880
+3 1114 1875 1880
+3 1881 1880 443
+3 1879 1881 443
+3 1881 1879 1873
+3 1881 1873 1114
+3 1883 490 1882
+3 490 488 1882
+3 1882 488 443
+3 443 1880 1882
+3 1882 1875 1883
+3 1880 1875 1882
+3 1883 1875 1874
+3 1874 418 1883
+3 1867 1871 1884
+3 1871 1872 1884
+3 1885 1886 418
+3 417 1885 418
+3 1885 417 421
+3 421 1097 1885
+3 1888 97 1887
+3 97 484 1887
+3 1888 1887 1869
+3 1872 1869 1887
+3 1888 1869 1870
+3 1870 98 1888
+3 98 97 1888
+3 1889 1890 489
+3 1890 1889 1872
+3 1890 1872 1887
+3 1890 1887 484
+3 484 491 1890
+3 489 1890 491
+3 490 1889 489
+3 490 1883 1889
+3 1886 1892 1891
+3 1892 1884 1891
+3 1867 1884 1892
+3 1884 1872 1891
+3 1891 1872 1889
+3 1883 1891 1889
+3 418 1891 1883
+3 418 1886 1891
+3 1867 1894 1893
+3 1894 1867 1892
+3 1892 1886 1894
+3 1894 1886 1885
+3 1894 1097 1893
+3 1885 1097 1894
+3 1097 1096 1893
+3 1896 523 1895
+3 1895 523 1176
+3 1868 1895 1176
+3 1866 1895 1868
+3 1867 1896 1895
+3 1866 1867 1895
+3 1896 1867 1893
+3 1096 1896 1893
+3 1897 1898 524
+3 1897 524 523
+3 523 1896 1897
+3 1096 1898 1897
+3 1896 1096 1897
+3 108 1898 1096
+3 108 521 1898
+3 1899 1900 509
+3 1224 1900 1223
+3 508 1900 1899
+3 508 1223 1900
+3 508 1899 509
+3 1902 504 1901
+3 1902 217 504
+3 504 1903 1901
+3 504 503 1903
+3 511 1903 503
+3 1904 1901 1903
+3 1904 1903 511
+3 1904 1095 1094
+3 1901 1904 1094
+3 511 509 1905
+3 1905 509 1900
+3 1904 1905 1906
+3 511 1905 1904
+3 1904 1906 1095
+3 1907 1908 1906
+3 1092 1095 1908
+3 1908 1095 1906
+3 1907 1906 1905
+3 1900 1907 1905
+3 1909 1910 1224
+3 1224 1064 1909
+3 1064 1066 1909
+3 425 1910 1909
+3 1066 425 1909
+3 426 1910 425
+3 1907 1912 1911
+3 1907 1911 1908
+3 1900 1912 1907
+3 1224 1912 1900
+3 1910 1912 1224
+3 1911 1912 426
+3 1912 1910 426
+3 1913 1914 775
+3 1914 776 775
+3 1915 1916 775
+3 1915 775 774
+3 1915 817 1916
+3 1104 1918 1917
+3 1917 1918 1919
+3 1918 1920 1919
+3 1922 1916 1921
+3 1922 1921 1917
+3 1921 1916 817
+3 1921 817 1104
+3 1921 1104 1917
+3 1917 1919 1922
+3 1922 1913 775
+3 1922 775 1916
+3 1918 1104 1923
+3 1104 1105 1923
+3 120 1924 427
+3 1572 1924 120
+3 427 1924 1925
+3 1567 1924 1572
+3 1924 833 1925
+3 1567 833 1924
+3 1925 1926 427
+3 1925 833 1926
+3 1926 835 1927
+3 1928 1927 835
+3 833 835 1926
+3 1929 1208 1174
+3 1929 1174 1176
+3 522 1929 1176
+3 522 1215 1929
+3 1930 1208 1929
+3 1929 1215 1930
+3 1215 1213 1930
+3 1930 1213 1220
+3 1208 1930 1209
+3 1931 1932 1179
+3 1932 1931 1413
+3 1931 1179 1177
+3 1931 1177 728
+3 727 1931 728
+3 727 1413 1931
+3 1179 1932 1188
+3 1933 1934 1195
+3 1934 1241 555
+3 1934 555 557
+3 1195 1934 557
+3 1933 1195 551
+3 1933 551 547
+3 547 1935 1933
+3 1934 1933 1241
+3 1933 1935 1241
+3 397 399 1936
+3 1936 415 1937
+3 415 1936 399
+3 1084 1936 1937
+3 397 1936 1084
+3 1100 1084 1937
+3 1098 1939 1938
+3 1100 1939 1098
+3 1100 1937 1939
+3 415 1939 1937
+3 415 1091 1939
+3 1098 1938 521
+3 1938 1939 1940
+3 1940 1939 1941
+3 1941 1939 1091
+3 1212 1941 1091
+3 1214 1941 1212
+3 1941 521 1940
+3 1938 1940 521
+3 521 1941 1898
+3 1214 1943 1942
+3 1941 1942 1898
+3 1214 1942 1941
+3 1214 1215 1943
+3 1215 522 1943
+3 1942 1943 524
+3 1942 524 1898
+3 522 524 1943
+3 1944 1945 1211
+3 1218 1945 1220
+3 1218 1216 1945
+3 1945 1216 1200
+3 1211 1945 1200
+3 1211 1210 1944
+3 1944 1210 1209
+3 1930 1945 1944
+3 1930 1220 1945
+3 1209 1930 1944
+3 1947 1260 1946
+3 1196 1254 1947
+3 1260 1947 1254
+3 1258 1946 1260
+3 1946 1258 1263
+3 1946 1948 1947
+3 1948 1946 1263
+3 1949 1196 1948
+3 1947 1948 1196
+3 1196 1949 1197
+3 1197 1949 1950
+3 1950 1949 1948
+3 1952 1230 1951
+3 1951 1230 1232
+3 1197 1954 1953
+3 1955 1197 1953
+3 1954 1197 1950
+3 1950 1951 1954
+3 1951 1232 1954
+3 1954 1229 1953
+3 1954 1232 1229
+3 1957 554 1956
+3 552 554 1957
+3 1956 554 550
+3 1957 1956 1233
+3 552 1957 1233
+3 1233 1956 1231
+3 1935 1959 1958
+3 547 1959 1935
+3 546 1959 547
+3 1935 1958 1241
+3 1961 1962 1960
+3 1961 1960 1192
+3 1960 1193 1192
+3 1963 1964 1189
+3 1964 559 563
+3 1961 1964 1962
+3 1961 1192 1964
+3 1964 1192 1189
+3 1962 1965 1235
+3 1966 1965 1964
+3 1966 1964 563
+3 1964 1965 1962
+3 1235 1967 1236
+3 1965 1967 1235
+3 1966 1967 1965
+3 1968 1967 1240
+3 1968 1240 1239
+3 1968 1236 1967
+3 1239 1236 1968
+3 1969 1970 562
+3 1970 563 562
+3 1241 1969 562
+3 1241 1958 1969
+3 1967 1972 1971
+3 1969 1971 1970
+3 1958 1971 1969
+3 1967 1966 1972
+3 563 1972 1966
+3 1971 1972 1970
+3 1970 1972 563
+3 1973 1974 1971
+3 1959 546 1974
+3 546 1240 1974
+3 1240 1967 1974
+3 1974 1967 1971
+3 1958 1973 1971
+3 1973 1959 1974
+3 1959 1973 1958
+3 295 1976 1975
+3 295 55 1976
+3 54 1976 55
+3 291 288 1975
+3 288 295 1975
+3 1977 1978 138
+3 93 1978 377
+3 93 137 1978
+3 137 138 1978
+3 1978 1977 54
+3 377 1978 54
+3 54 1977 1976
+3 1976 1979 1975
+3 1976 1977 1979
+3 1977 138 1979
+3 1979 138 566
+3 1979 1980 1975
+3 566 1980 1979
+3 1980 566 568
+3 1980 291 1975
+3 581 1982 1981
+3 1309 1982 581
+3 1982 1309 1312
+3 1983 1984 1981
+3 1982 1983 1981
+3 1300 1293 1983
+3 1983 611 1984
+3 1983 1293 611
+3 1984 611 610
+3 1984 610 144
+3 152 1984 144
+3 152 581 1984
+3 1981 1984 581
+3 1985 1283 1280
+3 1985 1280 1279
+3 1986 602 1985
+3 602 1283 1985
+3 602 1986 600
+3 1988 1986 1987
+3 1988 1987 1318
+3 1987 1986 1985
+3 1279 1987 1985
+3 1279 1318 1987
+3 1318 1316 1988
+3 1317 1988 1316
+3 649 600 1988
+3 1988 600 1986
+3 161 1990 1989
+3 1990 1324 1989
+3 1265 1990 161
+3 1264 1990 1265
+3 1989 1324 1321
+3 1989 1321 159
+3 161 1989 159
+3 1264 1991 1990
+3 1264 615 1991
+3 614 1991 615
+3 614 1331 1991
+3 1991 1331 1992
+3 1992 1331 651
+3 1991 1992 1324
+3 1990 1991 1324
+3 1324 1992 651
+3 683 1994 1993
+3 1995 683 1993
+3 1997 1998 1996
+3 1993 1994 1997
+3 1997 1994 1363
+3 1363 1998 1997
+3 1362 1998 1363
+3 1999 2000 667
+3 1999 1998 2000
+3 1996 1998 1999
+3 2000 1998 1362
+3 2000 1362 666
+3 2000 666 667
+3 2001 2002 1339
+3 1339 2002 194
+3 1339 1336 2001
+3 1336 679 2001
+3 2003 2004 193
+3 2004 1360 193
+3 194 2003 193
+3 2002 2003 194
+3 2005 2006 682
+3 2006 2005 2002
+3 2005 1360 2004
+3 2003 2005 2004
+3 2005 2003 2002
+3 2001 2006 2002
+3 2001 679 2006
+3 679 682 2006
+3 1361 1360 2007
+3 1360 2005 2007
+3 2007 2005 682
+3 2007 682 1345
+3 2007 1345 1352
+3 2009 1371 2008
+3 1369 1371 2009
+3 2008 1371 1367
+3 2008 1367 2010
+3 2008 2010 2011
+3 2012 1370 1369
+3 2013 1373 1370
+3 2013 1370 2012
+3 2014 464 463
+3 2014 463 1624
+3 1626 2016 2015
+3 1628 2015 2016
+3 2016 1626 1617
+3 2016 1617 1618
+3 2015 1628 1627
+3 2017 2015 1627
+3 1624 1626 2018
+3 2018 1626 2015
+3 2018 2015 2017
+3 2020 2021 2019
+3 2020 2019 2022
+3 2023 1383 1385
+3 2020 2024 2023
+3 2024 2020 2022
+3 2022 1380 2024
+3 2024 1379 2023
+3 1379 1383 2023
+3 2024 1380 1379
+3 2020 2025 2021
+3 2023 2025 2020
+3 2025 2026 2021
+3 2025 2023 1385
+3 2028 1053 2027
+3 1055 2028 362
+3 1054 2028 1055
+3 1053 2028 1054
+3 2027 1053 1366
+3 1365 2027 1366
+3 2027 1365 1364
+3 2027 1364 1368
+3 2029 2030 362
+3 362 2028 2029
+3 2027 2029 2028
+3 1368 2030 2029
+3 1368 1372 2030
+3 2027 1368 2029
+3 2032 1381 2031
+3 2031 1381 1379
+3 2031 1379 1375
+3 2033 1016 1382
+3 1381 2033 1382
+3 2032 2033 1381
+3 1387 2035 2034
+3 2034 1753 1387
+3 1392 2035 1387
+3 2035 1392 2036
+3 2036 2037 2035
+3 2036 1392 2038
+3 2038 1392 687
+3 2039 2038 688
+3 688 2038 687
+3 2039 688 689
+3 691 2039 689
+3 2041 2042 2040
+3 691 2040 2043
+3 691 690 2040
+3 1404 2045 2044
+3 1404 1403 2045
+3 2045 2046 2044
+3 2046 2048 2047
+3 2048 2049 2047
+3 2050 2047 2049
+3 2051 2052 2044
+3 2046 2051 2044
+3 2046 2047 2051
+3 2047 2050 2051
+3 2042 2052 2051
+3 2041 2052 2042
+3 2054 2055 2053
+3 2054 2053 2056
+3 2054 2042 2055
+3 2040 2042 2054
+3 2055 2042 2051
+3 2055 2051 2050
+3 2050 2053 2055
+3 2057 2058 2054
+3 2043 2040 2058
+3 2058 2040 2054
+3 2057 2054 2056
+3 2057 2056 2059
+3 2061 2043 2060
+3 2043 2058 2060
+3 2058 2057 2060
+3 2057 2059 2060
+3 2036 2061 2060
+3 2060 2037 2036
+3 2038 2061 2036
+3 2039 2061 2038
+3 2039 691 2061
+3 2061 691 2043
+3 2063 2037 2062
+3 2060 2062 2037
+3 2059 2062 2060
+3 2056 2063 2062
+3 2059 2056 2062
+3 2035 2037 2063
+3 1404 2064 1409
+3 943 2064 2065
+3 1409 2064 943
+3 943 2065 1411
+3 2066 2067 2052
+3 2041 2066 2052
+3 2066 1404 2067
+3 2066 2064 1404
+3 2067 1404 2044
+3 2044 2052 2067
+3 2068 2069 2041
+3 2068 2064 2069
+3 2040 2068 2041
+3 2040 690 2068
+3 2069 2064 2066
+3 2041 2069 2066
+3 2070 2071 2065
+3 690 689 2071
+3 2071 689 1410
+3 2071 1410 1411
+3 2071 1411 2065
+3 2070 2065 2064
+3 2064 2068 2070
+3 690 2071 2070
+3 2068 690 2070
+3 207 2073 2072
+3 207 2072 1412
+3 2073 2075 2074
+3 2077 2078 2076
+3 2078 2079 2076
+3 2076 741 2077
+3 741 740 2077
+3 2076 736 741
+3 2080 2081 742
+3 742 2081 740
+3 739 2080 742
+3 739 215 2080
+3 2081 2080 217
+3 2082 2081 217
+3 2080 215 217
+3 747 737 2083
+3 2074 2083 737
+3 2074 2075 2083
+3 2075 2084 2083
+3 2084 2075 1415
+3 747 2083 2084
+3 1415 1414 2084
+3 2084 1414 747
+3 2085 2086 737
+3 736 2085 737
+3 737 2086 2074
+3 2087 2085 736
+3 2089 2087 2088
+3 2088 2079 2089
+3 2087 736 2088
+3 736 2076 2088
+3 2076 2079 2088
+3 2089 2090 2087
+3 2079 2092 2091
+3 1434 2094 2093
+3 1435 1434 2093
+3 1434 1429 2094
+3 1429 2091 2094
+3 2092 2093 2094
+3 2094 2091 2092
+3 2095 1452 931
+3 928 2096 2095
+3 2095 931 928
+3 928 927 2096
+3 1651 2096 927
+3 333 2095 2096
+3 2095 333 1452
+3 1651 333 2096
+3 815 812 2097
+3 786 2097 2098
+3 812 2098 2097
+3 2098 812 807
+3 807 784 2098
+3 787 2098 784
+3 786 2098 787
+3 2099 2100 1183
+3 2097 2100 2099
+3 815 2097 2099
+3 2100 2097 786
+3 2100 786 1452
+3 798 2100 1452
+3 798 1183 2100
+3 815 2099 2101
+3 2099 1183 2101
+3 1182 2102 2101
+3 1183 1182 2101
+3 1184 2102 1182
+3 1184 1187 2102
+3 1187 1479 2102
+3 1479 1478 2102
+3 814 2101 2102
+3 815 2101 814
+3 1478 814 2102
+3 1620 1616 2103
+3 2103 1616 1612
+3 2104 2103 881
+3 2103 1612 881
+3 2104 881 467
+3 2104 2106 2105
+3 2104 467 2106
+3 467 468 2106
+3 468 305 2106
+3 2105 2106 307
+3 307 2106 305
+3 2105 307 308
+3 2103 2104 2105
+3 2108 311 2107
+3 311 310 2107
+3 2108 2107 2103
+3 2103 2107 1620
+3 2105 2108 2103
+3 2108 2105 308
+3 308 309 2108
+3 309 2109 2108
+3 2109 309 1499
+3 311 2109 2110
+3 2109 311 2108
+3 311 2110 312
+3 1583 873 2111
+3 872 2111 873
+3 872 2112 2111
+3 2112 872 871
+3 2113 2114 297
+3 2114 2113 565
+3 2114 565 57
+3 2114 57 297
+3 2115 2116 2113
+3 1250 2116 2115
+3 1250 565 2116
+3 2113 2116 565
+3 297 2115 2113
+3 1517 2115 297
+3 2118 2119 2117
+3 2120 2117 1515
+3 2117 2120 2118
+3 1516 2119 1517
+3 2119 1516 1514
+3 2119 1512 2117
+3 1512 1515 2117
+3 1512 2119 1514
+3 2121 1255 1250
+3 2121 1250 2115
+3 2122 1255 2121
+3 2118 2122 2121
+3 2115 1517 2121
+3 2119 2121 1517
+3 2121 2119 2118
+3 2122 1261 1256
+3 2122 1256 1255
+3 2124 2125 2123
+3 2123 2125 1261
+3 2123 1261 2122
+3 2124 2123 2118
+3 2123 2122 2118
+3 2118 2120 2124
+3 2127 2124 2126
+3 2120 2126 2124
+3 1515 2126 2120
+3 2127 2125 2124
+3 1503 2128 837
+3 2128 1503 1504
+3 2128 1504 2129
+3 1504 1117 2129
+3 2130 2131 2129
+3 837 2128 2131
+3 2131 2128 2129
+3 2130 2129 2132
+3 2133 2134 841
+3 2133 841 857
+3 2134 842 841
+3 2135 2136 1513
+3 1513 842 2135
+3 2135 842 2134
+3 2135 2138 2137
+3 2133 2137 2138
+3 2134 2138 2135
+3 2133 2138 2134
+3 857 2137 2133
+3 864 1505 2139
+3 864 2139 2140
+3 2139 2136 2140
+3 2136 2135 2140
+3 2140 2135 2137
+3 2140 2137 857
+3 2140 857 864
+3 2142 2143 2141
+3 2144 2145 2141
+3 2143 2144 2141
+3 2144 2136 2145
+3 2145 2136 2139
+3 2145 1505 2141
+3 1505 2145 2139
+3 2146 2147 2143
+3 2126 2146 2127
+3 1515 2147 2146
+3 2126 1515 2146
+3 1515 1513 2147
+3 1513 2136 2147
+3 2136 2144 2147
+3 2147 2144 2143
+3 2149 831 2148
+3 832 2148 831
+3 834 2148 832
+3 1248 2148 834
+3 2149 2148 1257
+3 1257 2148 1248
+3 1261 2149 1257
+3 1261 2150 2149
+3 2150 1261 2125
+3 2151 831 2150
+3 2150 831 2149
+3 831 2151 835
+3 2153 2132 2152
+3 2132 2129 2152
+3 2152 2129 1928
+3 1928 835 2152
+3 835 2151 2152
+3 2150 2153 2152
+3 2153 2150 2125
+3 2150 2152 2151
+3 2142 2155 2154
+3 2132 2155 2130
+3 2153 2155 2132
+3 2125 2154 2155
+3 2153 2125 2155
+3 2127 2154 2125
+3 2154 2127 2146
+3 2154 2146 2143
+3 2154 2143 2142
+3 2130 2157 2156
+3 2156 2131 2130
+3 2130 2155 2157
+3 2155 2142 2157
+3 2142 2141 2157
+3 2157 2158 2156
+3 2157 2141 2158
+3 2141 1505 2158
+3 2158 1505 1511
+3 287 2159 1511
+3 287 836 2159
+3 836 837 2159
+3 2159 837 2131
+3 2156 2158 2159
+3 2158 1511 2159
+3 2156 2159 2131
+3 1522 2160 859
+3 1522 2161 2160
+3 2161 2162 2160
+3 1537 1538 2162
+3 2162 1540 2160
+3 859 2160 1540
+3 1538 1540 2162
+3 847 846 2163
+3 1533 2163 846
+3 2163 1533 1531
+3 2163 1531 1530
+3 2163 1530 1548
+3 847 2163 2164
+3 2164 2163 1548
+3 1557 2164 1548
+3 1558 2164 1557
+3 850 2164 1558
+3 847 2164 850
+3 2166 2167 2165
+3 876 2166 879
+3 2167 2166 1573
+3 2166 876 1573
+3 2168 2169 1575
+3 2168 2165 2169
+3 2168 1575 879
+3 2166 2168 879
+3 2165 2168 2166
+3 1575 2169 874
+3 2170 1591 1593
+3 2170 1593 2171
+3 2172 2173 1535
+3 2172 1535 1534
+3 1534 1537 2172
+3 2174 2172 1537
+3 1576 870 2173
+3 2173 870 1579
+3 1579 1535 2173
+3 2175 2176 1380
+3 2176 1378 1380
+3 2175 1380 2022
+3 2177 2175 2022
+3 2178 1374 1378
+3 2176 2179 2178
+3 1378 2176 2178
+3 2181 2178 2180
+3 2179 2180 2178
+3 1595 2181 1594
+3 1595 2178 2181
+3 2183 2184 2182
+3 844 2183 2182
+3 2186 2187 2185
+3 2184 2187 2186
+3 2183 2187 2184
+3 2189 2190 2188
+3 2189 2184 2190
+3 2182 2184 2189
+3 2192 2186 2191
+3 2188 2190 2192
+3 2190 2184 2192
+3 2192 2184 2186
+3 2192 2191 1602
+3 2192 1602 2188
+3 2191 1603 1602
+3 2193 2195 2194
+3 2197 2198 2196
+3 2198 2197 2193
+3 2197 2195 2193
+3 1598 2198 2193
+3 2198 1598 1596
+3 1596 1605 2198
+3 2198 1605 2196
+3 2195 2200 2199
+3 2195 2201 2200
+3 2197 2201 2195
+3 2199 2203 2202
+3 2200 2203 2199
+3 2200 2204 2203
+3 2204 2200 2201
+3 2204 2201 2197
+3 2204 2197 2196
+3 2206 883 2205
+3 883 2206 884
+3 2207 1620 2107
+3 310 2207 2107
+3 2209 1609 2208
+3 1609 1620 2208
+3 2208 1620 2207
+3 2209 2208 2207
+3 310 2209 2207
+3 883 2210 2205
+3 883 1607 2210
+3 1607 1609 2210
+3 2210 1609 2209
+3 2205 2210 2211
+3 2210 2209 2211
+3 2209 310 2211
+3 2211 310 312
+3 2211 312 2205
+3 2213 2214 2212
+3 2213 2212 1524
+3 882 1524 2212
+3 2216 1608 2215
+3 2216 1623 1608
+3 1608 882 2215
+3 2215 882 2212
+3 2214 2215 2212
+3 2214 886 2215
+3 886 885 2215
+3 2218 927 2217
+3 2218 2217 1656
+3 927 929 2217
+3 2217 929 935
+3 936 2217 935
+3 1650 2218 1656
+3 1650 927 2218
+3 938 949 2219
+3 1681 2219 949
+3 1657 2220 2219
+3 2219 937 938
+3 1681 1657 2219
+3 2220 1657 1656
+3 1656 2217 2220
+3 2220 936 2219
+3 936 937 2219
+3 936 2220 2217
+3 960 2221 967
+3 960 964 2221
+3 2222 2221 964
+3 2222 964 971
+3 965 2224 2223
+3 2223 990 965
+3 2226 2227 2225
+3 2226 1686 2227
+3 2227 1686 990
+3 2223 2227 990
+3 2227 2223 2224
+3 2228 2229 2224
+3 2229 2228 2221
+3 2222 2229 2221
+3 2225 2227 2229
+3 2227 2224 2229
+3 965 2228 2224
+3 967 2228 965
+3 2221 2228 967
+3 2231 2225 2230
+3 2231 2230 1683
+3 2225 2229 2230
+3 2229 2222 2230
+3 2222 971 2230
+3 2230 971 1683
+3 2226 2225 2231
+3 2232 2231 1683
+3 1687 1686 2233
+3 2232 2233 2226
+3 2226 2231 2232
+3 2226 2233 1686
+3 2234 2235 2233
+3 2232 2234 2233
+3 1683 2234 2232
+3 1685 2234 1683
+3 2237 1724 2236
+3 2237 2238 1726
+3 1724 2237 1726
+3 2240 2241 2239
+3 2239 2241 2236
+3 2243 2244 2242
+3 2245 1727 1726
+3 2245 2246 1727
+3 2245 1767 2246
+3 1768 1767 2245
+3 1767 979 2246
+3 2246 979 982
+3 2246 982 1639
+3 2246 1639 1727
+3 1723 2248 2247
+3 1768 2248 1723
+3 2248 1768 2245
+3 1726 2247 2248
+3 1726 2238 2247
+3 2248 2245 1726
+3 2238 2237 2249
+3 2249 2243 2250
+3 2242 2250 2243
+3 2242 1699 2250
+3 1723 2250 1699
+3 2238 2249 2250
+3 1723 2247 2250
+3 2238 2250 2247
+3 2251 2241 2240
+3 2251 2243 2252
+3 2252 2243 2249
+3 2252 2249 2237
+3 2237 2236 2252
+3 2251 2252 2241
+3 2252 2236 2241
+3 2254 2244 2253
+3 2253 2244 2243
+3 2251 2253 2243
+3 2240 2254 2253
+3 2240 2253 2251
+3 1724 2255 2236
+3 1724 1728 2255
+3 2236 2255 2256
+3 1729 2255 1728
+3 1731 2255 1729
+3 1730 2255 1731
+3 2236 2256 2239
+3 2257 2258 1735
+3 2239 2258 2257
+3 2239 2256 2258
+3 2256 2255 2258
+3 2258 2255 1730
+3 2258 1730 1732
+3 1735 2258 1732
+3 2240 2260 2259
+3 2259 2254 2240
+3 2240 2239 2260
+3 2260 2239 2257
+3 1735 2260 2257
+3 340 2262 2261
+3 339 2262 340
+3 2262 339 1689
+3 1697 2262 1689
+3 1698 2261 2262
+3 1697 1698 2262
+3 2264 2261 2263
+3 2263 340 2264
+3 2264 340 2261
+3 2263 977 340
+3 2266 2242 2265
+3 2263 2266 2265
+3 977 2263 2265
+3 2261 2266 2263
+3 2261 1698 2266
+3 1698 1699 2266
+3 1699 2242 2266
+3 2267 2268 978
+3 2267 978 977
+3 2265 2267 977
+3 2267 2265 2242
+3 2244 2268 2267
+3 2244 2267 2242
+3 2270 2271 2269
+3 2269 2272 2270
+3 2270 1703 975
+3 978 2271 2270
+3 2270 975 978
+3 2271 978 2268
+3 2271 2273 2269
+3 2274 2269 2273
+3 2276 900 2275
+3 2275 900 902
+3 2275 902 982
+3 897 1638 2276
+3 1638 900 2276
+3 2276 2278 2277
+3 2276 2275 2278
+3 982 2278 2275
+3 1705 2278 982
+3 897 2276 2279
+3 2279 2276 2280
+3 2280 2276 2277
+3 906 2280 2281
+3 895 2279 2280
+3 2279 895 897
+3 906 895 2280
+3 2278 2282 2277
+3 1705 2282 2278
+3 2280 2283 2281
+3 2277 2282 2283
+3 2277 2283 2280
+3 2281 2285 2284
+3 2285 1402 2284
+3 2285 1403 1402
+3 2284 1402 1401
+3 1405 2284 1401
+3 1400 2284 1405
+3 1399 2284 1400
+3 1399 906 2284
+3 906 2281 2284
+3 2286 2283 2282
+3 2045 1403 2287
+3 2287 1403 2285
+3 2286 2287 2281
+3 2281 2283 2286
+3 2287 2285 2281
+3 2289 2282 2288
+3 2288 2048 2289
+3 2048 2046 2289
+3 2289 2046 2045
+3 2289 2045 2287
+3 2289 2287 2286
+3 2289 2286 2282
+3 989 2291 2290
+3 1705 2290 2291
+3 2048 2288 2291
+3 2288 2282 2291
+3 1705 2291 2282
+3 981 2290 1705
+3 989 2290 981
+3 2293 1734 2292
+3 1734 2293 1718
+3 2273 2295 2294
+3 2294 2295 2254
+3 2273 2271 2295
+3 2271 2268 2295
+3 2295 2268 2244
+3 2254 2295 2244
+3 2259 2294 2254
+3 2296 2297 2274
+3 2273 2296 2274
+3 2273 2294 2296
+3 2259 2296 2294
+3 2260 2296 2259
+3 1735 2297 2296
+3 2260 1735 2296
+3 1735 1736 2297
+3 1736 1718 2298
+3 1718 2293 2298
+3 2297 2299 2274
+3 2299 1736 2298
+3 2297 1736 2299
+3 1001 2301 2300
+3 2300 2301 2302
+3 2301 1001 349
+3 351 2301 349
+3 353 2301 351
+3 2301 353 2302
+3 346 2300 344
+3 346 1001 2300
+3 2304 1049 2303
+3 2303 1049 342
+3 2304 998 996
+3 996 381 2304
+3 381 1051 2304
+3 2304 1051 1049
+3 342 2305 2303
+3 344 2305 342
+3 344 2306 2305
+3 344 2300 2306
+3 2306 2300 2302
+3 2304 2306 998
+3 2306 2303 2305
+3 2304 2303 2306
+3 998 2306 2307
+3 2302 2308 2307
+3 2307 2306 2302
+3 2308 2302 353
+3 352 2308 353
+3 1745 2308 352
+3 2308 999 2307
+3 998 2307 999
+3 2308 1745 999
+3 1004 1002 2309
+3 1005 2310 2309
+3 1002 1003 2309
+3 1005 2309 1003
+3 1644 1643 2311
+3 2313 954 2312
+3 954 953 2312
+3 2312 953 325
+3 325 322 2312
+3 2313 2312 916
+3 919 2313 916
+3 2312 322 916
+3 2313 919 2314
+3 917 2314 919
+3 2314 2315 954
+3 2313 2314 954
+3 954 2315 956
+3 956 2316 1643
+3 956 2315 2316
+3 2316 2315 2317
+3 2317 2315 2314
+3 2317 2314 917
+3 917 348 2317
+3 347 2317 348
+3 347 2318 2317
+3 347 354 2318
+3 2318 354 355
+3 2319 2318 357
+3 2318 355 357
+3 1004 2319 357
+3 2318 2319 2317
+3 2319 2316 2317
+3 2321 2322 2320
+3 2311 2323 2321
+3 2320 2311 2321
+3 1643 2323 2311
+3 2316 2323 1643
+3 2319 2323 2316
+3 2321 2323 1004
+3 2319 1004 2323
+3 2322 2321 2324
+3 2321 1004 2324
+3 2324 1004 2309
+3 2309 2325 2324
+3 2309 2310 2325
+3 1644 2327 2326
+3 1442 2326 2327
+3 336 2326 1442
+3 2326 336 951
+3 955 2326 951
+3 2326 955 956
+3 1644 2326 956
+3 1644 2328 2327
+3 2328 1644 2311
+3 2327 2328 2329
+3 2328 2311 2329
+3 2329 2311 2320
+3 2329 1444 1442
+3 2327 2329 1442
+3 2330 2331 2320
+3 2322 2330 2320
+3 1445 2331 2330
+3 1445 1444 2331
+3 2331 1444 2329
+3 2331 2329 2320
+3 1446 1445 2332
+3 1445 2330 2332
+3 2322 2332 2330
+3 2322 2324 2332
+3 2324 2333 2332
+3 2325 2333 2324
+3 1481 1482 2333
+3 2333 1446 2332
+3 1446 2333 1482
+3 1484 2335 2334
+3 2335 1484 1481
+3 2334 2335 2310
+3 2335 1481 2333
+3 2325 2335 2333
+3 2325 2310 2335
+3 822 821 2336
+3 821 820 2336
+3 820 2337 2336
+3 726 2337 820
+3 726 1484 2337
+3 2337 1484 2334
+3 2338 2334 2310
+3 2338 1005 2339
+3 1005 2338 2310
+3 2339 1005 1748
+3 2339 1748 1747
+3 1747 822 2339
+3 2339 822 2336
+3 2338 2339 2337
+3 2337 2334 2338
+3 2337 2339 2336
+3 2341 1017 2340
+3 2341 1760 1019
+3 1019 1018 2341
+3 2341 1018 1017
+3 1006 2343 2342
+3 1006 2342 1009
+3 2345 1006 2344
+3 2344 1006 1751
+3 2343 1006 2345
+3 2347 1752 2346
+3 1752 1760 2346
+3 2346 1760 2341
+3 2346 2340 2347
+3 2341 2340 2346
+3 1750 1752 2347
+3 2348 2349 2344
+3 2344 2349 2345
+3 2348 2344 1751
+3 1750 2348 1751
+3 2348 1750 2347
+3 2348 2340 2349
+3 2347 2340 2348
+3 2035 2351 2350
+3 2035 2063 2351
+3 2035 2350 2034
+3 2349 2353 2352
+3 2352 1753 2034
+3 2034 2350 2352
+3 2351 2352 2350
+3 2351 2345 2352
+3 2349 2352 2345
+3 2349 2340 2353
+3 2340 1017 2353
+3 2353 1754 2352
+3 2352 1754 1753
+3 1017 1754 2353
+3 1634 2354 1635
+3 1634 892 2354
+3 892 1758 2354
+3 2354 1758 1757
+3 1635 2354 2355
+3 2355 2354 1226
+3 1757 1226 2354
+3 1226 1225 2355
+3 1228 2355 1225
+3 1228 1635 2355
+3 2356 2357 959
+3 2356 959 958
+3 1770 2358 1024
+3 2358 1770 2357
+3 2358 2357 2356
+3 1765 2359 1766
+3 2358 2359 1024
+3 1765 1024 2359
+3 2360 1694 1693
+3 1704 2360 1693
+3 959 2361 2360
+3 2360 2361 1694
+3 957 2360 1704
+3 957 959 2360
+3 2363 2361 2362
+3 2362 2357 2363
+3 959 2362 2361
+3 959 2357 2362
+3 2357 1770 2363
+3 1769 2363 1770
+3 1695 2363 1769
+3 1695 1694 2363
+3 2363 1694 2361
+3 2364 461 435
+3 2364 473 2365
+3 472 2365 473
+3 435 473 2364
+3 2010 2366 2011
+3 472 2367 2365
+3 472 469 2367
+3 469 462 2367
+3 462 464 2367
+3 2366 2367 2368
+3 2367 464 2368
+3 2369 2367 2366
+3 461 2364 2370
+3 2365 2369 2370
+3 2365 2367 2369
+3 2370 2364 2365
+3 2010 2372 2371
+3 2366 2371 2369
+3 2371 2366 2010
+3 2010 1367 2372
+3 2372 1367 1806
+3 2373 2374 461
+3 2370 2373 461
+3 2370 2369 2373
+3 2373 2369 2371
+3 2372 2373 2371
+3 2374 2373 440
+3 438 2374 440
+3 436 2374 438
+3 461 2374 436
+3 2376 2372 2375
+3 2375 890 2376
+3 2375 2372 1806
+3 2375 1806 1804
+3 2375 1804 890
+3 2376 890 888
+3 2376 888 440
+3 2373 2376 440
+3 2376 2373 2372
+3 1840 2378 2377
+3 2378 1840 1837
+3 1820 2378 1837
+3 1819 2378 1820
+3 1819 1824 2378
+3 2377 1087 1840
+3 405 1863 2379
+3 1864 2379 1863
+3 1864 407 2379
+3 2379 2380 1090
+3 405 2379 1090
+3 2381 2382 424
+3 2381 424 422
+3 424 2382 426
+3 2384 1902 2383
+3 2383 1902 1901
+3 1094 2383 1901
+3 2082 217 2384
+3 2384 217 1902
+3 2386 2387 2385
+3 2388 2389 417
+3 417 2389 421
+3 2388 417 416
+3 416 2385 2388
+3 2388 2385 2387
+3 2389 2388 2390
+3 2387 2390 2388
+3 2391 2386 2383
+3 1094 2391 2383
+3 1093 2391 1094
+3 2386 2391 2392
+3 1093 2392 2391
+3 2392 2390 2387
+3 2386 2392 2387
+3 2393 2394 2390
+3 2390 2394 2389
+3 2392 2393 2390
+3 2393 2392 1093
+3 2396 419 2395
+3 2395 2394 2396
+3 421 2395 419
+3 421 2389 2395
+3 2395 2389 2394
+3 422 2396 2381
+3 422 419 2396
+3 2397 2398 2393
+3 2398 2396 2394
+3 2393 2398 2394
+3 2393 1093 2397
+3 1093 1092 2397
+3 2399 2400 2382
+3 2381 2399 2382
+3 2381 2396 2399
+3 2396 2398 2399
+3 2397 2399 2398
+3 2399 1092 2400
+3 1092 2399 2397
+3 2400 1092 1908
+3 1911 2400 1908
+3 426 2400 1911
+3 2382 2400 426
+3 2402 781 2401
+3 781 780 2401
+3 2401 780 2403
+3 2404 2405 2129
+3 1928 2129 2405
+3 1117 2404 2129
+3 427 2404 1117
+3 1926 2404 427
+3 2404 1927 2405
+3 1927 1928 2405
+3 1926 1927 2404
+3 2075 2406 1415
+3 2408 209 2407
+3 2075 2073 2408
+3 2073 207 2408
+3 2408 207 209
+3 2410 2407 2409
+3 2407 209 2409
+3 2411 2409 707
+3 209 707 2409
+3 1469 2411 707
+3 2410 2409 2411
+3 1461 2411 1469
+3 2412 2413 2406
+3 2411 2414 2410
+3 1461 2414 2411
+3 1463 2414 1461
+3 2415 2413 2412
+3 2415 2412 2414
+3 2416 2415 1463
+3 1472 2416 1463
+3 2415 2414 1463
+3 1472 2417 2416
+3 1474 2417 1472
+3 2417 1474 1475
+3 2417 1480 2418
+3 1475 1480 2417
+3 2415 2418 2413
+3 2416 2417 2418
+3 2415 2416 2418
+3 2413 2420 2419
+3 2420 1932 2419
+3 2418 2420 2413
+3 2418 1480 2420
+3 2420 1480 1188
+3 2420 1188 1932
+3 1932 1413 2419
+3 1415 2419 1413
+3 2406 2419 1415
+3 2406 2413 2419
+3 564 2421 550
+3 564 1195 2422
+3 1194 2422 1195
+3 2423 2422 1197
+3 1194 1197 2422
+3 1197 1955 2423
+3 2425 2421 2424
+3 564 2424 2421
+3 564 2422 2424
+3 2426 2425 2424
+3 2424 2422 2426
+3 2422 2423 2426
+3 2427 2428 1955
+3 2428 2423 1955
+3 2427 2426 2428
+3 2423 2428 2426
+3 2426 2427 2425
+3 2429 2430 2421
+3 2429 2421 2425
+3 2429 2425 2427
+3 2429 2427 1955
+3 1953 2429 1955
+3 2429 1953 1229
+3 1231 2429 1229
+3 2430 2429 1231
+3 1231 1956 2430
+3 2430 1956 550
+3 550 2421 2430
+3 2432 2433 2431
+3 131 2431 2433
+3 83 2431 131
+3 2435 131 2434
+3 2435 2434 1244
+3 131 2433 2434
+3 132 2435 1244
+3 132 131 2435
+3 1193 2436 1191
+3 1190 2436 2437
+3 1190 1191 2436
+3 2438 2433 2432
+3 2434 2439 1244
+3 2439 2433 2438
+3 2434 2433 2439
+3 1233 2440 1234
+3 1230 2440 1233
+3 1952 2440 1230
+3 2441 2440 1952
+3 2441 1960 1962
+3 1235 2440 2441
+3 2440 1235 1234
+3 1962 1235 2441
+3 2439 2438 2442
+3 2442 2437 2443
+3 2442 2438 2437
+3 2443 2437 2436
+3 1193 2443 2436
+3 1960 2443 1193
+3 2442 2443 2441
+3 1960 2441 2443
+3 1244 2445 2444
+3 1242 1244 2444
+3 1244 2439 2445
+3 2439 2442 2445
+3 2444 2447 2446
+3 2444 2448 2447
+3 1980 568 2447
+3 568 2446 2447
+3 568 1245 2446
+3 1242 2446 1245
+3 1242 2444 2446
+3 2449 2450 1120
+3 1120 1119 2449
+3 2450 1319 1120
+3 160 159 2451
+3 2451 1322 2452
+3 1322 2451 159
+3 2452 1322 1319
+3 2452 1319 2450
+3 2453 2454 621
+3 162 2453 621
+3 2449 1119 2453
+3 2454 2453 1119
+3 621 2454 1119
+3 2456 2453 2455
+3 2455 2453 162
+3 2456 160 2451
+3 2456 2451 2452
+3 2450 2456 2452
+3 2450 2449 2456
+3 2449 2453 2456
+3 2457 162 164
+3 164 648 2457
+3 2458 160 2456
+3 2458 2455 2457
+3 2457 2455 162
+3 2456 2455 2458
+3 2459 1317 160
+3 2459 160 2458
+3 2459 2457 2460
+3 2459 2458 2457
+3 648 2460 2457
+3 648 649 2460
+3 1988 2460 649
+3 2459 2460 1317
+3 1317 2460 1988
+3 2462 2463 2461
+3 1295 1298 2464
+3 1298 1300 2464
+3 2462 2464 1300
+3 2465 1295 2464
+3 2462 2465 2464
+3 2462 2461 2465
+3 665 2467 2466
+3 664 2467 665
+3 1297 2467 664
+3 1297 1294 2467
+3 1296 2467 1294
+3 2467 1296 1295
+3 2466 2467 2465
+3 2467 1295 2465
+3 2466 2465 2461
+3 2469 667 2468
+3 1999 667 2469
+3 665 2468 667
+3 665 2466 2468
+3 2466 2461 2468
+3 2469 2468 2463
+3 2470 2469 2463
+3 2463 2468 2461
+3 2471 1307 187
+3 186 2471 187
+3 1305 2472 645
+3 1305 2473 2472
+3 2473 1305 1306
+3 1307 2473 1306
+3 2474 2475 1307
+3 2471 2474 1307
+3 2475 2473 1307
+3 1315 1314 2476
+3 2476 1314 643
+3 643 645 2476
+3 2478 2476 2477
+3 645 2477 2476
+3 645 2472 2477
+3 2472 2479 2477
+3 2479 2478 2477
+3 2480 2478 2479
+3 2472 2481 2479
+3 2481 2472 2473
+3 2482 2479 2481
+3 2482 2480 2479
+3 196 683 2483
+3 683 1995 2483
+3 2484 2483 1995
+3 1995 2485 2484
+3 186 2486 2471
+3 186 182 2486
+3 2487 2486 181
+3 2487 181 196
+3 181 2486 182
+3 2486 2487 2488
+3 2488 196 2489
+3 2488 2487 196
+3 2489 196 2483
+3 2471 2488 2489
+3 2471 2486 2488
+3 2489 2474 2471
+3 2490 2491 2475
+3 2474 2490 2475
+3 2474 2489 2490
+3 2489 2483 2490
+3 2491 2490 2484
+3 2490 2483 2484
+3 2491 2484 2485
+3 2493 2481 2492
+3 2493 2482 2481
+3 2492 2481 2473
+3 2492 2473 2475
+3 2491 2492 2475
+3 2493 2492 2485
+3 2485 2492 2491
+3 1982 2495 2494
+3 1982 1312 2495
+3 2462 1300 2494
+3 2494 1300 1983
+3 2494 1983 1982
+3 2494 2496 2462
+3 2494 2495 2496
+3 2497 2496 1312
+3 1311 2497 1312
+3 2496 2495 1312
+3 2498 2499 1315
+3 2476 2498 1315
+3 2478 2498 2476
+3 2499 2498 1311
+3 1315 2499 1311
+3 2497 1311 2498
+3 2500 2501 2496
+3 2502 2463 2501
+3 2463 2462 2501
+3 2496 2501 2462
+3 2497 2500 2496
+3 2497 2498 2500
+3 2478 2501 2500
+3 2500 2498 2478
+3 2504 2480 2503
+3 2502 2501 2504
+3 2478 2504 2501
+3 2504 2478 2480
+3 2482 2503 2480
+3 2503 2463 2504
+3 2504 2463 2502
+3 2503 2470 2463
+3 2470 2506 2505
+3 2470 2503 2506
+3 2503 2482 2506
+3 2506 2482 2493
+3 2505 2506 2485
+3 2506 2493 2485
+3 2505 2485 1999
+3 2505 1999 2469
+3 2470 2505 2469
+3 1996 2508 2507
+3 1995 2507 2508
+3 1995 1993 2507
+3 1993 1997 2507
+3 2507 1997 1996
+3 1999 2508 1996
+3 2508 1999 2485
+3 1995 2508 2485
+3 1994 2510 2509
+3 1363 1994 2509
+3 1994 683 2510
+3 195 2510 683
+3 195 1361 2510
+3 2030 1372 2511
+3 1030 2512 1031
+3 363 2512 1030
+3 2511 2512 362
+3 2030 2511 362
+3 363 362 2512
+3 2514 2515 2513
+3 2514 2511 1372
+3 2513 2515 1036
+3 2513 1036 1038
+3 1038 1029 2513
+3 1029 1031 2513
+3 2513 2512 2514
+3 2514 2512 2511
+3 2513 1031 2512
+3 2515 2517 2516
+3 2514 2517 2515
+3 2517 2514 1372
+3 1373 2517 1372
+3 2516 1033 1036
+3 2516 1036 2515
+3 1033 2519 2518
+3 2519 1033 2516
+3 2519 2516 2517
+3 1373 2519 2517
+3 2518 2519 2025
+3 2025 2519 1373
+3 2518 2025 1385
+3 1384 2518 1385
+3 1384 1034 2518
+3 2518 1034 1033
+3 2178 2520 1374
+3 2520 2178 1595
+3 2522 2523 2521
+3 2521 2525 2524
+3 2522 2524 1113
+3 2524 2522 2521
+3 2526 2525 2521
+3 2528 2529 2527
+3 2529 1913 1922
+3 1919 2529 1922
+3 1919 2527 2529
+3 2528 2527 778
+3 2531 2522 2530
+3 1113 2530 2522
+3 1112 2530 1113
+3 1112 1111 2530
+3 1109 2530 1111
+3 1109 2531 2530
+3 2532 2531 1109
+3 2534 2532 2533
+3 2523 2522 2534
+3 2522 2531 2534
+3 2534 2531 2532
+3 1109 2533 2532
+3 1109 1107 2533
+3 1107 773 2533
+3 2533 774 2534
+3 774 776 2534
+3 774 2533 773
+3 2536 2523 2535
+3 2535 2523 2534
+3 2534 776 2535
+3 2535 1914 2536
+3 2535 776 1914
+3 2536 1914 1913
+3 2538 2529 2537
+3 2537 2536 2538
+3 2537 2526 2521
+3 2521 2523 2537
+3 2523 2536 2537
+3 2538 2536 1913
+3 2529 2538 1913
+3 2528 2540 2539
+3 2528 778 2540
+3 2526 2539 2540
+3 2537 2539 2526
+3 2537 2529 2539
+3 2529 2528 2539
+3 2526 2541 2525
+3 2541 2526 2540
+3 2541 778 2542
+3 2540 778 2541
+3 2542 778 777
+3 2542 777 1431
+3 2385 2544 2543
+3 2385 416 2544
+3 2544 416 1875
+3 1114 2544 1875
+3 2385 2543 2386
+3 2544 2545 2543
+3 1114 2546 2545
+3 2544 1114 2545
+3 1113 2546 1114
+3 2524 2546 1113
+3 2525 2546 2524
+3 2548 2543 2547
+3 2548 2547 2082
+3 2543 2545 2547
+3 2545 2546 2547
+3 2082 2384 2548
+3 2548 2384 2383
+3 2548 2383 2386
+3 2543 2548 2386
+3 2549 2525 2541
+3 2081 2082 2550
+3 2082 2547 2550
+3 2547 2546 2550
+3 2550 2525 2549
+3 2546 2525 2550
+3 1431 1432 2551
+3 2551 1432 1435
+3 1435 2093 2551
+3 2093 2552 2551
+3 2552 2093 2092
+3 2092 2079 2552
+3 2078 2551 2552
+3 2552 2079 2078
+3 740 2081 2553
+3 2081 2550 2553
+3 2549 2553 2550
+3 2553 2549 2541
+3 2541 2542 2553
+3 1431 2554 2553
+3 2542 1431 2553
+3 2554 1431 2551
+3 2554 2551 2078
+3 2077 2554 2078
+3 2554 740 2553
+3 2077 740 2554
+3 2555 2556 698
+3 2556 2557 699
+3 698 2556 699
+3 2557 700 699
+3 2558 2559 26
+3 26 2560 2558
+3 2559 2558 1436
+3 692 1436 2558
+3 1436 696 2559
+3 696 1439 2559
+3 1439 24 2559
+3 26 2559 24
+3 2561 2562 2558
+3 2562 2561 698
+3 2558 2560 2561
+3 692 2562 698
+3 2558 2562 692
+3 2563 2564 714
+3 770 2564 26
+3 772 2564 770
+3 256 2564 772
+3 2564 256 714
+3 714 208 2563
+3 26 2564 2563
+3 26 2563 2560
+3 2566 2563 2565
+3 2560 2563 2566
+3 2565 2563 208
+3 2566 2565 1412
+3 2072 2566 1412
+3 2565 208 1412
+3 2566 2568 2567
+3 2568 2555 2567
+3 2566 2072 2568
+3 2072 2073 2568
+3 2568 2073 2074
+3 2555 698 2567
+3 698 2561 2567
+3 2561 2560 2567
+3 2567 2560 2566
+3 2568 2570 2569
+3 2568 2074 2570
+3 2556 2555 2569
+3 2568 2569 2555
+3 2572 2074 2571
+3 2074 2572 2570
+3 2086 2571 2074
+3 2571 2090 2572
+3 2086 2085 2571
+3 2087 2571 2085
+3 2087 2090 2571
+3 2570 2574 2573
+3 2569 2570 2573
+3 2572 2574 2570
+3 2090 2574 2572
+3 2089 2574 2090
+3 1527 2576 2575
+3 1502 1500 2575
+3 2575 1500 1493
+3 2575 1493 1527
+3 1532 845 2577
+3 2577 845 844
+3 844 2182 2577
+3 2578 2577 1525
+3 2577 2182 1525
+3 2578 1525 884
+3 2578 884 2206
+3 2205 2578 2206
+3 2205 312 2578
+3 2576 2580 2579
+3 312 2110 2579
+3 2580 2576 1527
+3 1527 1532 2580
+3 2580 1532 2577
+3 2579 2580 2578
+3 312 2579 2578
+3 2578 2580 2577
+3 2109 1499 2581
+3 2582 2581 1502
+3 2581 1499 1502
+3 2575 2582 1502
+3 2576 2582 2575
+3 2579 2582 2576
+3 2110 2581 2582
+3 2110 2109 2581
+3 2110 2582 2579
+3 2584 303 2583
+3 303 304 2583
+3 304 880 2583
+3 2584 2583 2585
+3 2583 880 1575
+3 2583 1575 1578
+3 2583 1578 2585
+3 2584 2587 2586
+3 2585 2587 2584
+3 2587 2585 2174
+3 2586 300 303
+3 303 2584 2586
+3 2588 2589 1520
+3 1520 1521 2588
+3 2588 301 2589
+3 1521 301 2588
+3 2589 301 300
+3 2591 2161 2590
+3 1522 2590 2161
+3 2590 1522 1520
+3 2589 2590 1520
+3 300 2591 2590
+3 300 2586 2591
+3 2590 2589 300
+3 2591 2593 2592
+3 2591 2586 2593
+3 2586 2587 2593
+3 2592 2593 2174
+3 2593 2587 2174
+3 2174 1537 2592
+3 1537 2162 2592
+3 2161 2592 2162
+3 2592 2161 2591
+3 1593 1590 2594
+3 2594 1590 1600
+3 2596 2594 2595
+3 1593 2594 2596
+3 1599 2594 1600
+3 2598 1539 2597
+3 2598 1543 1542
+3 1541 2598 1542
+3 2598 1541 1539
+3 1534 2599 1539
+3 1536 2599 1534
+3 2600 2596 2595
+3 2597 2599 2600
+3 2597 1539 2599
+3 2597 2600 2595
+3 2601 2599 1536
+3 1580 2601 1536
+3 2602 1593 2596
+3 2602 2599 2601
+3 2596 2600 2602
+3 2599 2602 2600
+3 1581 2171 2603
+3 1593 2603 2171
+3 1593 2602 2603
+3 2603 2602 2604
+3 2604 2602 2601
+3 1580 2604 2601
+3 1581 2603 2604
+3 2604 1580 1581
+3 2606 2173 2605
+3 2606 2605 1578
+3 2172 2605 2173
+3 2172 2174 2605
+3 2174 2585 2605
+3 2605 2585 1578
+3 1578 1577 2606
+3 1577 1576 2606
+3 1576 2173 2606
+3 2608 1588 2607
+3 1588 1587 2607
+3 1587 1584 2607
+3 2181 2608 1594
+3 2608 2181 2180
+3 2180 1588 2608
+3 1543 2598 2609
+3 2597 2610 2609
+3 2598 2597 2609
+3 2595 2610 2597
+3 2610 2595 2594
+3 2594 1599 2610
+3 1599 1603 2610
+3 2611 2612 2187
+3 2611 2187 2183
+3 844 2611 2183
+3 846 2612 2611
+3 844 846 2611
+3 849 2612 846
+3 2185 2187 2613
+3 2187 2612 2613
+3 849 2614 2613
+3 2613 2612 849
+3 849 848 2614
+3 1543 2614 848
+3 2613 2614 2185
+3 1543 2609 2614
+3 2191 2615 1603
+3 2186 2615 2191
+3 2615 2186 2185
+3 2616 1603 2615
+3 2615 2185 2616
+3 2614 2616 2185
+3 2609 2616 2614
+3 2610 2616 2609
+3 2610 1603 2616
+3 2617 2618 1605
+3 1605 1604 2617
+3 316 2617 1604
+3 2617 886 2618
+3 886 2214 2618
+3 316 886 2617
+3 1605 2619 2196
+3 2619 1605 2618
+3 2620 2619 2214
+3 2618 2214 2619
+3 2621 2213 1524
+3 1523 2621 1524
+3 1525 2622 2621
+3 1523 1525 2621
+3 2624 2625 2623
+3 1600 2625 2624
+3 1600 2624 1601
+3 1590 2625 1600
+3 1592 2625 1590
+3 2626 2627 2188
+3 2626 2188 1602
+3 2626 1602 1601
+3 2626 1601 2624
+3 2623 2626 2624
+3 2622 2629 2628
+3 1525 2629 2622
+3 2629 1525 2182
+3 2182 2189 2629
+3 2628 2629 2188
+3 2627 2628 2188
+3 2189 2188 2629
+3 2631 1592 1589
+3 2632 1592 2631
+3 2631 2630 2632
+3 2632 2633 2625
+3 1592 2632 2625
+3 2625 2633 2623
+3 2635 2194 2634
+3 2633 2632 2634
+3 2635 2634 2630
+3 2632 2630 2634
+3 2627 2636 2628
+3 2626 2636 2627
+3 2623 2636 2626
+3 2637 2636 2623
+3 2637 2623 2633
+3 2634 2637 2633
+3 2634 2194 2637
+3 2637 2195 2636
+3 2637 2194 2195
+3 2638 2639 2202
+3 2636 2639 2638
+3 2628 2636 2638
+3 2636 2195 2639
+3 2195 2199 2639
+3 2639 2199 2202
+3 2621 2640 2213
+3 2622 2640 2621
+3 2622 2641 2640
+3 2622 2628 2641
+3 2641 2628 2638
+3 2641 2202 2640
+3 2202 2641 2638
+3 2642 2203 2204
+3 2204 2196 2642
+3 2642 2196 2619
+3 2643 2620 2214
+3 2213 2643 2214
+3 2203 2642 2643
+3 2619 2643 2642
+3 2620 2643 2619
+3 2640 2643 2213
+3 2202 2643 2640
+3 2203 2643 2202
+3 1623 2645 2644
+3 1628 2645 314
+3 2645 2016 2644
+3 1628 2016 2645
+3 2644 2016 1618
+3 1622 2644 1618
+3 1623 2644 1622
+3 885 2647 2646
+3 2647 1623 2646
+3 2646 1623 2216
+3 2646 2216 2215
+3 885 2646 2215
+3 885 314 2647
+3 2647 314 2645
+3 2647 2645 1623
+3 2649 1627 2648
+3 1627 313 2648
+3 2648 313 1586
+3 1588 2648 1586
+3 2017 1627 2649
+3 2177 2651 2650
+3 2022 2651 2177
+3 2022 2019 2651
+3 2021 2650 2651
+3 2021 2651 2019
+3 2652 2018 2017
+3 2652 2017 2649
+3 974 969 2653
+3 2653 969 970
+3 2654 2653 1766
+3 970 1766 2653
+3 2655 2653 2654
+3 2655 957 2656
+3 2656 957 1704
+3 974 2655 2656
+3 2655 974 2653
+3 2656 1684 974
+3 2272 2658 2657
+3 2656 2658 1684
+3 2658 1704 2657
+3 2656 1704 2658
+3 1704 1703 2657
+3 2657 1703 2270
+3 2270 2272 2657
+3 1685 1684 2659
+3 1684 2658 2659
+3 2660 2659 2272
+3 2659 2658 2272
+3 2662 2235 2661
+3 2662 2659 2660
+3 2661 2235 2234
+3 1685 2662 2661
+3 1685 2659 2662
+3 2661 2234 1685
+3 2291 989 2663
+3 2663 989 988
+3 985 2663 988
+3 2664 2663 985
+3 1706 2664 985
+3 2664 1706 1707
+3 1707 2049 2664
+3 2663 2664 2048
+3 2291 2663 2048
+3 2664 2049 2048
+3 2665 2666 1717
+3 2667 2666 2665
+3 1717 1715 2665
+3 2665 1715 2668
+3 2668 2667 2665
+3 2669 2670 1720
+3 2670 2669 986
+3 2669 1708 984
+3 984 986 2669
+3 2668 2672 2671
+3 1715 2672 2668
+3 1715 1713 2672
+3 1712 2671 2672
+3 1712 2672 1713
+3 1720 2671 1712
+3 1720 2670 2671
+3 2667 2668 2673
+3 2671 2673 2668
+3 2671 2670 2673
+3 2674 2675 2673
+3 2666 2667 2675
+3 2667 2673 2675
+3 1734 1717 2676
+3 1717 2666 2676
+3 2666 2675 2676
+3 2677 987 993
+3 992 2677 993
+3 2678 987 2677
+3 1710 983 2678
+3 983 985 2678
+3 985 987 2678
+3 2680 2681 2679
+3 2677 992 2680
+3 2678 2680 2679
+3 2678 2677 2680
+3 2678 2679 1710
+3 2682 2680 992
+3 1688 2682 992
+3 2684 2681 2683
+3 2683 2680 2682
+3 2683 2681 2680
+3 2235 2686 2685
+3 2233 2685 1687
+3 2233 2235 2685
+3 2685 2686 1688
+3 2685 1688 1687
+3 2686 2682 1688
+3 2235 2687 2686
+3 2662 2688 2235
+3 2687 2690 2689
+3 2235 2688 2690
+3 2690 2687 2235
+3 2692 2683 2691
+3 2692 2684 2683
+3 2691 2683 2682
+3 2691 2682 2686
+3 2686 2687 2691
+3 2689 2692 2691
+3 2689 2691 2687
+3 2694 2695 2693
+3 2694 2693 2684
+3 2694 2684 2692
+3 2688 2696 2694
+3 2694 2696 2695
+3 2689 2694 2692
+3 2690 2694 2689
+3 2688 2694 2690
+3 1710 2679 2697
+3 2670 2698 2673
+3 2699 2698 986
+3 986 2698 2670
+3 986 1709 2699
+3 2699 2673 2698
+3 2674 2673 2699
+3 2701 2697 2700
+3 2700 2697 2702
+3 2674 2699 2700
+3 2700 1709 2701
+3 2699 1709 2700
+3 1710 2701 1709
+3 1710 2697 2701
+3 2676 2675 2703
+3 2675 2674 2703
+3 2704 2703 2700
+3 2702 2704 2700
+3 2703 2674 2700
+3 2705 2702 2697
+3 2706 2705 2679
+3 2697 2679 2705
+3 2706 2679 2681
+3 2681 2684 2706
+3 2708 2705 2707
+3 2707 2705 2706
+3 2684 2707 2706
+3 2708 2704 2702
+3 2708 2702 2705
+3 2710 2676 2709
+3 2676 2703 2709
+3 2709 2703 2704
+3 2709 2708 2710
+3 2709 2704 2708
+3 2710 2708 2707
+3 2710 2707 2684
+3 2693 2710 2684
+3 1734 2676 2710
+3 2695 2712 2711
+3 2696 2712 2695
+3 2298 2293 2712
+3 2292 2711 2712
+3 2712 2293 2292
+3 2292 1734 2711
+3 1734 2710 2711
+3 2711 2710 2693
+3 2711 2693 2695
+3 2662 2713 2688
+3 2713 2298 2714
+3 2299 2298 2713
+3 2298 2712 2714
+3 2714 2712 2696
+3 2714 2688 2713
+3 2688 2714 2696
+3 2716 1708 2715
+3 1708 2669 2715
+3 2715 2669 1720
+3 2715 1720 1719
+3 1009 2715 1719
+3 2342 2716 2715
+3 1009 2342 2715
+3 2056 2053 2717
+3 2718 2053 2050
+3 2718 2050 2049
+3 2718 2049 2719
+3 2049 1707 2719
+3 2719 1707 1708
+3 2053 2721 2720
+3 2718 2721 2053
+3 2721 2718 2719
+3 2721 1708 2720
+3 2720 1708 2716
+3 2719 1708 2721
+3 2722 2723 2717
+3 2717 2053 2722
+3 2720 2722 2053
+3 2722 2716 2723
+3 2722 2720 2716
+3 2725 2351 2724
+3 2723 2725 2724
+3 2724 2351 2063
+3 2063 2056 2724
+3 2724 2056 2717
+3 2717 2723 2724
+3 2716 2725 2723
+3 2716 2342 2725
+3 2342 2343 2725
+3 2345 2725 2343
+3 2345 2351 2725
+3 2727 2654 2726
+3 958 2727 2726
+3 2726 2654 1766
+3 958 957 2727
+3 2655 2727 957
+3 2654 2727 2655
+3 2728 2356 958
+3 2728 958 2726
+3 2728 1766 2729
+3 2728 2726 1766
+3 2729 1766 2359
+3 2359 2358 2729
+3 2728 2729 2356
+3 2729 2358 2356
+3 2731 2527 2730
+3 779 2731 2730
+3 779 778 2731
+3 2731 778 2527
+3 2730 2527 1919
+3 1920 2730 1919
+3 1433 2733 2732
+3 2732 2403 780
+3 2732 780 782
+3 2732 782 1433
+3 779 2733 1433
+3 2733 779 2730
+3 2735 2732 2734
+3 2732 2733 2734
+3 2734 2733 2730
+3 1920 2734 2730
+3 2735 2403 2732
+3 2737 1923 2736
+3 1923 1105 2736
+3 2736 1105 2401
+3 2736 2401 2403
+3 2735 2736 2403
+3 2735 2737 2736
+3 2735 2734 2737
+3 2737 2734 1920
+3 2737 1920 1918
+3 2737 1918 1923
+3 2739 2407 2738
+3 2407 2410 2738
+3 2410 2414 2738
+3 2414 2412 2738
+3 2739 2738 2406
+3 2738 2412 2406
+3 2075 2739 2406
+3 2739 2075 2408
+3 2739 2408 2407
+3 1952 2741 2740
+3 1952 1951 2741
+3 2741 1951 1950
+3 2740 2741 2448
+3 1948 2741 1950
+3 1263 2741 1948
+3 2448 2444 2740
+3 2444 2445 2740
+3 2445 2442 2740
+3 2442 2441 2740
+3 2441 1952 2740
+3 2743 1262 2742
+3 2742 1262 1247
+3 291 2743 2742
+3 1247 291 2742
+3 291 1980 2743
+3 1980 2447 2743
+3 2743 2447 2448
+3 2743 2448 2741
+3 2741 1263 2743
+3 1262 2743 1263
+3 558 2745 2744
+3 558 560 2745
+3 2744 556 558
+3 2747 1963 2746
+3 2747 2746 559
+3 1963 1189 2746
+3 2747 559 1964
+3 1964 1963 2747
+3 559 2746 2748
+3 559 2748 560
+3 2749 2750 1249
+3 2749 1249 556
+3 2749 556 2744
+3 2750 2749 2751
+3 2749 2744 2751
+3 2752 2753 130
+3 58 2752 130
+3 565 2752 58
+3 2752 565 1249
+3 2750 2752 1249
+3 2752 2751 2753
+3 2750 2751 2752
+3 130 2753 878
+3 2751 2755 2754
+3 2753 2751 2754
+3 2751 2744 2755
+3 2757 2007 2756
+3 1352 2756 2007
+3 1352 1353 2756
+3 1353 1363 2756
+3 2756 1363 2757
+3 1363 2509 2757
+3 2510 2757 2509
+3 1361 2757 2510
+3 1361 2007 2757
+3 2758 2520 1595
+3 1428 2763 1429
+3 2762 2763 1428
+3 2762 2761 2763
+3 2763 2759 2764
+3 1429 2763 2091
+3 2763 2761 2759
+3 2766 2767 2765
+3 2767 2574 2089
+3 2765 2767 2079
+3 2089 2079 2767
+3 2091 2765 2079
+3 2763 2765 2091
+3 2763 2766 2765
+3 2769 2770 2768
+3 2368 2769 2768
+3 464 2769 2368
+3 2014 2769 464
+3 2772 2770 2771
+3 2772 2768 2770
+3 2771 2774 2773
+3 2774 2770 2775
+3 2770 2774 2771
+3 2769 2775 2770
+3 2769 2014 2775
+3 2776 2777 1624
+3 2774 2775 2777
+3 2775 2014 2777
+3 2014 1624 2777
+3 2776 1624 2018
+3 2011 2779 2778
+3 2366 2779 2011
+3 2366 2368 2779
+3 2368 2768 2779
+3 2778 2779 2780
+3 2780 2779 2768
+3 2778 2009 2008
+3 2008 2011 2778
+3 2782 2783 2781
+3 2782 2781 2012
+3 2012 1369 2782
+3 2782 1369 2009
+3 2782 2009 2778
+3 2780 2783 2782
+3 2780 2782 2778
+3 2785 2781 2784
+3 2784 2781 2783
+3 2783 2780 2784
+3 2784 2780 2768
+3 2785 2784 2773
+3 2784 2768 2772
+3 2784 2772 2771
+3 2784 2771 2773
+3 2026 2787 2786
+3 2025 2787 2026
+3 1373 2787 2025
+3 2787 2013 2786
+3 2013 2787 1373
+3 2013 2012 2786
+3 2012 2781 2786
+3 2789 2785 2788
+3 2786 2789 2026
+3 2781 2789 2786
+3 2789 2781 2785
+3 2773 2788 2785
+3 2790 2774 2777
+3 2776 2790 2777
+3 2791 2021 2026
+3 2791 2026 2789
+3 2791 2789 2788
+3 2773 2790 2791
+3 2773 2774 2790
+3 2788 2773 2791
+3 2021 2792 2650
+3 2021 2791 2792
+3 2790 2792 2791
+3 2792 2776 2793
+3 2792 2790 2776
+3 2793 2776 2018
+3 2652 2793 2018
+3 2795 2796 2794
+3 2796 2176 2794
+3 2794 2176 2175
+3 2177 2794 2175
+3 2795 2794 2177
+3 2797 1588 2180
+3 2797 2180 2179
+3 2797 2179 2176
+3 2796 2797 2176
+3 2797 2798 1588
+3 2795 2797 2796
+3 2648 1588 2798
+3 2795 2800 2799
+3 2799 2800 2652
+3 2649 2799 2652
+3 2799 2649 2648
+3 2648 2798 2799
+3 2797 2799 2798
+3 2797 2795 2799
+3 2801 2802 2650
+3 2792 2801 2650
+3 2793 2801 2792
+3 2652 2802 2801
+3 2793 2652 2801
+3 2800 2802 2652
+3 2800 2795 2802
+3 2795 2177 2802
+3 2802 2177 2650
+3 2274 2804 2803
+3 2804 2274 2299
+3 2299 2713 2804
+3 2804 2713 2662
+3 2662 2660 2804
+3 2272 2803 2804
+3 2660 2272 2804
+3 2269 2803 2272
+3 2269 2274 2803
+3 2806 2807 2805
+3 2808 2807 2806
+3 2809 2810 756
+3 2810 757 756
+3 755 2809 756
+3 2809 755 700
+3 2557 2809 700
+3 757 2810 2811
+3 2810 2809 2811
+3 2811 2809 2812
+3 2812 2809 2557
+3 2812 2557 2805
+3 2812 2805 2807
+3 2808 2812 2807
+3 2806 2812 2808
+3 2814 2556 2813
+3 2814 2813 2806
+3 2813 2811 2812
+3 2813 2812 2806
+3 2814 2806 2805
+3 2805 2557 2814
+3 2814 2557 2556
+3 2815 2816 758
+3 2815 758 757
+3 2815 757 2811
+3 2815 2811 2813
+3 2817 2816 2815
+3 2817 2815 2813
+3 2556 2817 2813
+3 2817 2556 2569
+3 2573 2818 2817
+3 2573 2817 2569
+3 2819 2820 2766
+3 2820 2819 2760
+3 2819 2766 2763
+3 2763 2764 2819
+3 2764 2759 2819
+3 2760 2819 2759
+3 2821 2822 2820
+3 2823 2822 2821
+3 2820 2760 2821
+3 2825 2824 758
+3 2824 759 758
+3 758 2816 2825
+3 2826 2827 2825
+3 2826 2825 2816
+3 2825 2827 2824
+3 2829 2830 2828
+3 2829 2828 2826
+3 2829 2826 2816
+3 2829 2816 2817
+3 2818 2829 2817
+3 2822 2823 2830
+3 2823 2828 2830
+3 2766 2832 2831
+3 2831 2574 2767
+3 2766 2831 2767
+3 2832 2766 2820
+3 2820 2822 2832
+3 2822 2830 2832
+3 2832 2830 2829
+3 2818 2832 2829
+3 2832 2573 2831
+3 2831 2573 2574
+3 2832 2818 2573

+ 818 - 0
examples/icp/models/cat1.off

@@ -0,0 +1,818 @@
+OFF
+285 530 0
+-0.048000 -0.009000 -0.086000
+-0.045000 0.002000 -0.092000
+-0.045000 -0.001000 -0.085000
+-0.044000 0.038000 0.047000
+-0.043000 0.042000 0.043000
+-0.043000 -0.024000 -0.049000
+-0.042000 0.035000 0.044000
+-0.042000 -0.013000 -0.042000
+-0.042000 0.038000 0.041000
+-0.042000 -0.022000 -0.080000
+-0.042000 -0.027000 -0.067000
+-0.042000 0.042000 0.050000
+-0.042000 0.045000 0.042000
+-0.041000 0.044000 0.047000
+-0.041000 0.043000 0.037000
+-0.040000 -0.024000 -0.037000
+-0.040000 0.031000 0.041000
+-0.040000 0.036000 0.051000
+-0.040000 0.038000 0.053000
+-0.040000 0.034000 0.050000
+-0.040000 0.034000 0.037000
+-0.039000 -0.013000 -0.079000
+-0.039000 0.049000 0.042000
+-0.038000 -0.006000 -0.064000
+-0.038000 -0.002000 -0.045000
+-0.038000 0.039000 0.056000
+-0.038000 0.038000 0.034000
+-0.038000 0.010000 -0.090000
+-0.038000 0.053000 0.058000
+-0.037000 0.048000 0.036000
+-0.037000 0.052000 0.046000
+-0.037000 0.039000 0.062000
+-0.037000 0.009000 -0.083000
+-0.036000 -0.047000 -0.055000
+-0.036000 0.053000 0.044000
+-0.036000 0.032000 0.036000
+-0.036000 0.035000 0.057000
+-0.036000 0.046000 0.055000
+-0.036000 0.052000 0.064000
+-0.036000 0.052000 0.052000
+-0.035000 0.026000 0.060000
+-0.035000 0.028000 0.049000
+-0.035000 0.058000 0.062000
+-0.034000 -0.006000 -0.027000
+-0.034000 0.027000 0.066000
+-0.034000 0.029000 0.054000
+-0.034000 0.054000 0.070000
+-0.034000 0.060000 0.058000
+-0.033000 0.042000 0.075000
+-0.033000 0.048000 0.073000
+-0.033000 0.061000 0.065000
+-0.033000 0.011000 -0.097000
+-0.032000 -0.027000 -0.028000
+-0.032000 0.003000 -0.037000
+-0.032000 0.026000 0.043000
+-0.032000 0.027000 0.072000
+-0.031000 0.022000 0.067000
+-0.031000 0.035000 0.075000
+-0.030000 0.015000 -0.082000
+-0.030000 -0.042000 -0.036000
+-0.030000 0.019000 -0.089000
+-0.029000 0.005000 -0.055000
+-0.028000 0.019000 0.060000
+-0.028000 0.057000 0.038000
+-0.028000 0.064000 0.048000
+-0.028000 0.002000 -0.076000
+-0.028000 0.029000 -0.091000
+-0.027000 0.019000 0.050000
+-0.027000 0.051000 0.034000
+-0.027000 0.019000 -0.097000
+-0.026000 0.030000 0.034000
+-0.026000 0.022000 -0.082000
+-0.026000 0.031000 -0.012000
+-0.025000 -0.008000 -0.021000
+-0.025000 -0.002000 -0.023000
+-0.025000 0.031000 -0.084000
+-0.025000 0.043000 0.082000
+-0.025000 0.003000 -0.028000
+-0.025000 0.047000 0.032000
+-0.024000 -0.016000 -0.021000
+-0.024000 0.033000 -0.031000
+-0.023000 0.055000 0.081000
+-0.023000 0.007000 -0.035000
+-0.023000 0.069000 0.055000
+-0.023000 0.031000 0.082000
+-0.022000 0.018000 -0.023000
+-0.022000 0.027000 -0.098000
+-0.022000 -0.055000 -0.041000
+-0.022000 0.019000 -0.011000
+-0.021000 0.059000 0.087000
+-0.021000 0.069000 0.067000
+-0.021000 0.053000 -0.096000
+-0.021000 -0.035000 -0.027000
+-0.021000 0.008000 -0.004000
+-0.021000 0.013000 -0.010000
+-0.021000 0.016000 -0.016000
+-0.020000 0.026000 0.088000
+-0.020000 0.052000 -0.092000
+-0.020000 0.009000 -0.057000
+-0.020000 0.063000 0.091000
+-0.019000 -0.045000 -0.032000
+-0.019000 0.038000 0.030000
+-0.018000 0.035000 -0.085000
+-0.018000 -0.002000 0.005000
+-0.018000 0.023000 0.093000
+-0.018000 0.045000 0.003000
+-0.018000 -0.012000 -0.002000
+-0.018000 0.008000 -0.075000
+-0.018000 0.067000 0.094000
+-0.018000 0.031000 -0.077000
+-0.018000 0.038000 0.086000
+-0.017000 0.028000 0.033000
+-0.017000 0.063000 0.039000
+-0.017000 0.037000 0.018000
+-0.017000 0.047000 -0.014000
+-0.016000 0.044000 -0.084000
+-0.016000 0.049000 0.086000
+-0.016000 0.069000 0.049000
+-0.016000 0.072000 0.095000
+-0.016000 0.033000 -0.097000
+-0.015000 0.017000 0.097000
+-0.015000 0.019000 0.022000
+-0.015000 0.014000 0.060000
+-0.015000 0.017000 0.048000
+-0.015000 0.064000 0.080000
+-0.015000 0.015000 0.074000
+-0.015000 0.023000 0.082000
+-0.015000 0.025000 0.028000
+-0.015000 0.075000 0.090000
+-0.014000 0.053000 0.032000
+-0.014000 0.076000 0.083000
+-0.013000 -0.027000 -0.006000
+-0.013000 -0.001000 0.015000
+-0.013000 0.045000 -0.033000
+-0.013000 0.047000 0.026000
+-0.013000 0.076000 0.076000
+-0.013000 0.011000 0.082000
+-0.013000 0.052000 -0.001000
+-0.013000 0.058000 -0.097000
+-0.013000 0.063000 0.093000
+-0.013000 0.057000 -0.091000
+-0.012000 0.074000 0.068000
+-0.012000 0.044000 -0.047000
+-0.012000 0.022000 -0.072000
+-0.012000 0.011000 0.097000
+-0.011000 0.010000 0.090000
+-0.011000 0.018000 0.099000
+-0.011000 0.048000 -0.082000
+-0.011000 -0.059000 -0.032000
+-0.011000 0.023000 0.097000
+-0.010000 0.033000 0.090000
+-0.010000 0.061000 0.037000
+-0.009000 0.044000 0.088000
+-0.009000 0.010000 0.083000
+-0.009000 0.072000 0.089000
+-0.009000 0.054000 0.088000
+-0.008000 0.067000 0.092000
+-0.008000 0.011000 0.031000
+-0.008000 0.017000 0.043000
+-0.007000 0.012000 0.093000
+-0.007000 0.015000 0.037000
+-0.006000 0.014000 0.073000
+-0.006000 0.073000 0.076000
+-0.005000 0.020000 0.094000
+-0.005000 -0.053000 -0.018000
+-0.003000 0.015000 0.088000
+-0.002000 0.058000 0.021000
+-0.002000 0.057000 -0.012000
+-0.002000 0.070000 0.080000
+-0.002000 0.064000 0.085000
+-0.001000 0.060000 0.030000
+-0.001000 -0.034000 0.008000
+-0.001000 0.069000 0.051000
+-0.001000 0.055000 -0.093000
+-0.001000 0.056000 -0.096000
+0.000000 0.027000 0.087000
+0.001000 0.019000 0.081000
+0.001000 0.047000 -0.083000
+0.001000 0.046000 -0.032000
+0.002000 -0.020000 0.022000
+0.002000 0.014000 0.051000
+0.003000 0.044000 -0.048000
+0.004000 -0.006000 0.032000
+0.004000 0.012000 0.046000
+0.005000 0.006000 0.040000
+0.005000 0.044000 0.086000
+0.005000 -0.058000 -0.018000
+0.007000 0.065000 0.040000
+0.007000 0.069000 0.069000
+0.007000 0.063000 0.008000
+0.008000 0.018000 0.066000
+0.008000 0.062000 0.080000
+0.008000 -0.048000 -0.003000
+0.009000 0.034000 0.084000
+0.010000 0.025000 0.078000
+0.010000 0.060000 -0.092000
+0.010000 0.060000 -0.097000
+0.011000 -0.036000 0.011000
+0.012000 0.052000 -0.082000
+0.013000 0.064000 0.031000
+0.013000 -0.022000 0.024000
+0.014000 0.014000 0.052000
+0.015000 0.060000 0.073000
+0.015000 0.009000 0.045000
+0.015000 0.020000 0.062000
+0.015000 0.054000 -0.045000
+0.015000 -0.007000 0.035000
+0.016000 0.031000 -0.095000
+0.017000 0.059000 -0.028000
+0.017000 0.063000 -0.011000
+0.017000 -0.042000 0.003000
+0.017000 0.051000 -0.083000
+0.018000 0.028000 -0.078000
+0.018000 0.044000 0.078000
+0.018000 0.057000 -0.097000
+0.019000 0.020000 -0.084000
+0.019000 0.056000 -0.094000
+0.020000 0.058000 0.065000
+0.020000 -0.029000 0.017000
+0.020000 0.039000 -0.095000
+0.020000 0.064000 0.019000
+0.022000 0.012000 -0.075000
+0.022000 0.027000 0.066000
+0.022000 -0.047000 -0.007000
+0.022000 0.047000 -0.083000
+0.023000 0.051000 -0.093000
+0.024000 0.043000 0.071000
+0.025000 0.057000 0.053000
+0.026000 -0.034000 0.007000
+0.026000 0.024000 0.057000
+0.027000 0.038000 -0.084000
+0.028000 -0.020000 0.019000
+0.028000 0.012000 -0.060000
+0.028000 0.009000 -0.068000
+0.029000 -0.004000 0.030000
+0.029000 0.042000 0.062000
+0.029000 0.047000 -0.059000
+0.029000 0.064000 0.004000
+0.029000 0.027000 -0.052000
+0.029000 0.037000 -0.072000
+0.030000 0.016000 0.045000
+0.030000 0.005000 -0.076000
+0.031000 0.057000 0.042000
+0.032000 0.004000 -0.073000
+0.032000 0.051000 -0.043000
+0.033000 0.036000 -0.060000
+0.035000 0.042000 0.051000
+0.035000 0.010000 -0.048000
+0.035000 0.060000 -0.010000
+0.035000 0.004000 -0.066000
+0.036000 0.007000 -0.056000
+0.036000 0.054000 -0.029000
+0.036000 0.055000 0.033000
+0.038000 -0.026000 -0.005000
+0.038000 -0.006000 -0.077000
+0.038000 0.031000 0.045000
+0.038000 0.041000 0.043000
+0.038000 0.023000 -0.031000
+0.039000 0.025000 0.039000
+0.039000 -0.030000 -0.018000
+0.040000 -0.012000 0.008000
+0.040000 0.016000 0.032000
+0.040000 0.004000 0.022000
+0.040000 0.037000 -0.042000
+0.041000 0.005000 -0.035000
+0.042000 0.053000 0.018000
+0.042000 -0.006000 -0.068000
+0.043000 -0.013000 -0.020000
+0.043000 0.038000 0.032000
+0.043000 -0.005000 -0.025000
+0.043000 0.027000 -0.019000
+0.044000 0.001000 -0.019000
+0.044000 0.040000 -0.029000
+0.044000 0.051000 0.008000
+0.044000 0.003000 -0.044000
+0.045000 0.001000 -0.007000
+0.045000 0.026000 0.019000
+0.045000 -0.002000 -0.056000
+0.045000 0.016000 0.008000
+0.045000 0.047000 -0.010000
+0.046000 -0.037000 -0.030000
+0.046000 0.032000 -0.001000
+0.046000 0.034000 0.011000
+0.049000 -0.026000 -0.029000
+0.050000 -0.011000 -0.033000
+
+3 110 150 152
+3 110 76 84
+3 152 76 110
+3 116 76 152
+3 81 76 116
+3 81 116 155
+3 116 152 155
+3 152 150 185
+3 84 96 150
+3 96 104 150
+3 104 149 150
+3 104 146 149
+3 104 120 146
+3 149 175 150
+3 149 163 175
+3 149 146 163
+3 146 144 163
+3 146 120 144
+3 163 165 175
+3 163 159 165
+3 144 159 163
+3 144 145 159
+3 145 153 159
+3 153 165 159
+3 165 153 176
+3 153 161 176
+3 153 136 161
+3 136 153 145
+3 136 125 161
+3 125 136 126
+3 145 126 136
+3 144 126 145
+3 120 126 144
+3 120 104 126
+3 104 96 126
+3 96 84 126
+3 150 175 185
+3 175 194 193
+3 125 122 161
+3 56 62 125
+3 125 55 56
+3 126 55 125
+3 57 55 84
+3 165 176 175
+3 194 175 176
+3 48 57 76
+3 48 76 49
+3 81 49 76
+3 46 49 81
+3 46 81 50
+3 124 50 81
+3 90 50 124
+3 90 124 141
+3 124 135 141
+3 124 130 135
+3 124 128 130
+3 124 118 128
+3 108 118 124
+3 124 99 108
+3 124 89 99
+3 81 89 124
+3 81 155 89
+3 99 89 155
+3 99 155 139
+3 156 139 155
+3 118 139 156
+3 118 108 139
+3 156 155 169
+3 154 118 156
+3 128 118 154
+3 128 154 130
+3 162 130 154
+3 135 130 162
+3 135 162 141
+3 168 169 191
+3 168 154 156
+3 168 156 169
+3 154 168 162
+3 169 185 191
+3 169 155 185
+3 31 57 48
+3 31 55 57
+3 31 44 55
+3 31 36 44
+3 31 25 36
+3 25 31 37
+3 31 38 37
+3 38 31 49
+3 31 48 49
+3 46 38 49
+3 38 46 50
+3 42 38 50
+3 42 50 47
+3 64 47 50
+3 64 50 83
+3 50 90 83
+3 141 83 90
+3 28 42 47
+3 28 47 39
+3 30 39 47
+3 30 47 34
+3 64 34 47
+3 28 37 38
+3 18 25 37
+3 37 11 18
+3 13 11 37
+3 13 37 30
+3 39 30 37
+3 37 28 39
+3 44 56 55
+3 56 44 62
+3 44 40 62
+3 44 36 40
+3 42 28 38
+3 99 139 108
+3 62 122 125
+3 62 67 122
+3 62 45 67
+3 62 40 45
+3 36 45 40
+3 36 41 45
+3 36 19 41
+3 25 18 36
+3 3 6 19
+3 6 3 8
+3 3 4 8
+3 4 3 13
+3 3 11 13
+3 11 3 18
+3 41 67 45
+3 41 54 67
+3 41 16 54
+3 16 41 19
+3 16 35 54
+3 16 20 35
+3 16 8 20
+3 16 6 8
+3 19 6 16
+3 67 123 122
+3 67 111 123
+3 67 54 111
+3 158 122 123
+3 123 111 158
+3 111 54 70
+3 70 101 111
+3 70 35 101
+3 35 70 54
+3 111 160 158
+3 111 127 160
+3 111 113 127
+3 12 4 13
+3 12 13 22
+3 13 30 22
+3 34 22 30
+3 8 26 20
+3 8 14 26
+3 8 12 14
+3 8 4 12
+3 29 12 22
+3 22 34 29
+3 12 29 14
+3 26 14 29
+3 26 29 68
+3 29 34 68
+3 35 20 26
+3 35 26 101
+3 26 78 101
+3 26 68 78
+3 101 134 113
+3 101 129 134
+3 101 78 129
+3 129 166 134
+3 166 129 170
+3 129 151 170
+3 129 112 151
+3 68 112 129
+3 78 68 129
+3 63 34 64
+3 34 63 68
+3 63 112 68
+3 63 64 112
+3 117 64 83
+3 117 83 141
+3 112 64 117
+3 112 172 151
+3 112 117 172
+3 172 117 141
+3 141 162 172
+3 162 188 172
+3 185 213 191
+3 185 193 213
+3 213 194 222
+3 213 193 194
+3 194 204 222
+3 194 176 204
+3 176 190 204
+3 176 161 190
+3 190 180 204
+3 190 161 180
+3 161 122 180
+3 180 201 204
+3 180 183 201
+3 180 160 183
+3 180 158 160
+3 122 158 180
+3 204 201 229
+3 204 229 222
+3 121 160 127
+3 121 157 160
+3 121 132 157
+3 121 93 103
+3 127 113 121
+3 113 72 121
+3 105 72 113
+3 105 113 166
+3 72 88 121
+3 88 95 121
+3 88 85 95
+3 88 72 85
+3 95 94 121
+3 94 93 121
+3 121 103 132
+3 113 134 166
+3 72 105 114
+3 137 105 166
+3 166 199 220
+3 170 187 199
+3 199 166 170
+3 167 166 189
+3 166 220 189
+3 209 189 220
+3 209 220 237
+3 209 167 189
+3 178 167 209
+3 170 172 187
+3 85 80 109
+3 72 80 85
+3 72 114 80
+3 133 80 114
+3 114 167 178
+3 208 178 209
+3 205 178 208
+3 181 178 205
+3 142 178 181
+3 142 181 177
+3 205 177 181
+3 114 178 133
+3 142 133 178
+3 142 80 133
+3 115 80 142
+3 115 142 147
+3 142 177 147
+3 97 115 140
+3 115 147 140
+3 177 205 198
+3 211 198 205
+3 211 205 224
+3 205 236 224
+3 230 224 236
+3 211 224 225
+3 236 244 263
+3 236 205 244
+3 244 251 263
+3 244 205 251
+3 205 208 251
+3 208 248 251
+3 248 279 251
+3 272 251 279
+3 279 270 272
+3 251 272 263
+3 208 209 248
+3 209 237 248
+3 109 80 115
+3 174 140 173
+3 138 91 140
+3 174 138 140
+3 172 188 187
+3 227 187 217
+3 242 187 227
+3 187 242 199
+3 252 199 242
+3 220 199 252
+3 220 252 265
+3 220 265 237
+3 273 237 265
+3 248 237 273
+3 248 273 279
+3 257 272 270
+3 257 263 272
+3 257 238 263
+3 157 184 160
+3 183 160 184
+3 183 184 201
+3 184 203 201
+3 157 132 184
+3 132 182 184
+3 182 203 184
+3 203 182 206
+3 106 179 182
+3 106 182 132
+3 132 103 106
+3 106 73 79
+3 74 73 106
+3 74 106 103
+3 74 103 93
+3 74 93 77
+3 94 82 93
+3 95 82 94
+3 77 93 82
+3 82 95 143
+3 75 102 119
+3 66 119 86
+3 66 86 69
+3 66 60 75
+3 97 91 102
+3 75 143 109
+3 66 75 119
+3 73 43 79
+3 74 43 73
+3 53 43 74
+3 53 74 77
+3 53 77 82
+3 61 53 82
+3 61 82 98
+3 82 143 98
+3 107 98 143
+3 61 98 107
+3 61 107 65
+3 71 58 107
+3 71 107 75
+3 143 75 107
+3 75 60 71
+3 60 58 71
+3 27 58 60
+3 27 32 58
+3 27 2 32
+3 1 2 27
+3 51 27 60
+3 60 66 69
+3 69 51 60
+3 58 65 107
+3 58 32 65
+3 32 2 65
+3 2 21 65
+3 0 21 2
+3 23 61 65
+3 23 24 61
+3 24 53 61
+3 24 43 53
+3 10 7 24
+3 10 24 23
+3 24 7 43
+3 7 15 43
+3 7 5 15
+3 21 23 65
+3 21 10 23
+3 21 9 10
+3 10 5 7
+3 33 5 10
+3 43 15 52
+3 15 59 52
+3 15 33 59
+3 15 5 33
+3 43 52 79
+3 52 92 79
+3 52 59 92
+3 106 131 179
+3 106 79 131
+3 79 92 131
+3 92 164 131
+3 92 100 164
+3 131 171 179
+3 131 164 171
+3 59 100 92
+3 59 87 100
+3 59 33 87
+3 100 148 164
+3 100 87 148
+3 192 164 186
+3 171 164 192
+3 171 192 197
+3 200 171 197
+3 179 171 200
+3 179 206 182
+3 179 200 206
+3 170 151 172
+3 85 109 143
+3 85 143 95
+3 105 137 114
+3 114 137 167
+3 137 166 167
+3 110 84 150
+3 76 57 84
+3 225 214 216
+3 214 225 219
+3 217 226 235
+3 227 217 235
+3 227 235 246
+3 227 246 242
+3 256 242 246
+3 252 242 256
+3 252 256 268
+3 213 222 226
+3 217 187 188
+3 168 191 188
+3 162 168 188
+3 188 202 217
+3 217 202 226
+3 226 202 213
+3 202 188 191
+3 252 268 265
+3 282 265 268
+3 273 265 282
+3 273 282 281
+3 273 281 279
+3 270 279 281
+3 239 230 236
+3 177 140 147
+3 238 212 239
+3 236 245 239
+3 245 236 263
+3 238 245 263
+3 238 239 245
+3 230 219 225
+3 225 224 230
+3 212 230 239
+3 212 207 230
+3 207 219 230
+3 211 225 216
+3 140 91 97
+3 173 140 177
+3 196 174 195
+3 173 195 174
+3 195 173 177
+3 195 177 198
+3 195 198 211
+3 195 211 216
+3 195 216 214
+3 195 214 196
+3 192 223 210
+3 228 210 223
+3 197 210 228
+3 197 192 210
+3 197 228 218
+3 231 218 228
+3 200 218 231
+3 200 197 218
+3 200 231 206
+3 234 206 231
+3 240 206 234
+3 203 206 240
+3 203 240 229
+3 229 201 203
+3 229 240 246
+3 240 255 246
+3 255 240 258
+3 222 229 226
+3 235 226 229
+3 235 229 246
+3 240 261 258
+3 261 240 262
+3 240 234 262
+3 234 231 262
+3 231 260 262
+3 231 253 260
+3 231 228 253
+3 228 223 253
+3 152 185 155
+3 185 175 193
+3 84 55 126
+3 202 191 213
+3 101 113 111
+3 17 19 36
+3 17 3 19
+3 18 17 36
+3 18 3 17
+3 256 246 255
+3 256 258 268
+3 256 255 258
+3 268 258 276
+3 268 276 282
+3 276 281 282
+3 276 278 281
+3 276 262 278
+3 276 261 262
+3 258 261 276
+3 275 270 278
+3 278 262 275
+3 262 260 275
+3 271 270 275
+3 275 267 271
+3 260 267 275
+3 260 253 267
+3 257 270 271
+3 257 271 264
+3 269 264 271
+3 271 267 269
+3 253 259 267
+3 267 284 269
+3 267 283 284
+3 267 259 283
+3 284 264 269
+3 232 238 257
+3 232 257 247
+3 264 247 257
+3 221 212 238
+3 221 238 232
+3 278 270 281
+3 259 280 283
+3 115 97 102
+3 115 102 109
+3 75 109 102
+3 91 119 102
+3 274 264 284
+3 250 232 247
+3 247 264 250
+3 274 250 264
+3 277 250 274
+3 249 250 277
+3 233 221 232
+3 233 250 249
+3 233 232 250
+3 249 221 233
+3 243 221 249
+3 241 221 243
+3 215 221 241
+3 215 212 221
+3 266 243 249
+3 266 249 277
+3 254 243 266

+ 0 - 0
examples/icp/models/cat2.off


Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff