geodesique.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. /*************************************/
  2. /* Auteur : Rémi Synave */
  3. /* Date de création : 25/01/08 */
  4. /* Date de modification : 15/03/15 */
  5. /* Version : 0.4 */
  6. /*************************************/
  7. /***************************************************************************/
  8. /* This file is part of a2ri. */
  9. /* */
  10. /* a2ri is free software: you can redistribute it and/or modify it */
  11. /* under the terms of the GNU Lesser General Public License as published */
  12. /* by the Free Software Foundation, either version 3 of the License, or */
  13. /* (at your option) any later version. */
  14. /* */
  15. /* a2ri is distributed in the hope that it will be useful, */
  16. /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
  17. /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
  18. /* GNU Lesser General Public License for more details. */
  19. /* */
  20. /* You should have received a copy of the GNU Lesser General Public */
  21. /* License along with a2ri. */
  22. /* If not, see <http://www.gnu.org/licenses/>. */
  23. /***************************************************************************/
  24. #ifndef GEODESIQUE__H
  25. #define GEODESIQUE__H
  26. #include <stdio.h>
  27. #include <stdlib.h>
  28. #include "util.h"
  29. #include "vertex.h"
  30. #include "edge.h"
  31. #include "face.h"
  32. #include "point.h"
  33. #include "model.h"
  34. #include "geometry.h"
  35. #include "hashtable.h"
  36. #include "graph.h"
  37. #include "subdivision.h"
  38. #include "topology.h"
  39. #define A2RI_GEODESIQUE_CHEMIN_INTROUVABLE 0
  40. #define A2RI_GEODESIQUE_POINTS_ALIGNES 1
  41. #define A2RI_GEODESIQUE_OK 2
  42. /**
  43. Calcul du chemin le plus court entre deux sommets du modele
  44. @param m le modèle
  45. @param ve_dep sommet de départ
  46. @param ve_fin sommet d'arrivée
  47. @param list liste des sommets parcourus
  48. @param size taille du tableau contenant les sommets parcourus
  49. @return la longueur du chemin
  50. **/
  51. double a2ri_vf_dijkstra (
  52. const vf_model * const m,
  53. int ve_dep,
  54. int ve_fin,
  55. int **list,
  56. int *size);
  57. /**
  58. Calcul d'un chemin entre deux sommets du modele
  59. @param m le modèle
  60. @param ve_dep sommet de départ
  61. @param ve_fin sommet d'arrivée
  62. @param list liste des sommets parcourus
  63. @param size taille du tableau contenant les sommets parcourus
  64. @return la longueur du chemin
  65. **/
  66. double a2ri_vf_A_star (
  67. const vf_model * const m,
  68. int ve_dep,
  69. int ve_fin,
  70. int **list,
  71. int *size);
  72. /**
  73. Calcul du chemin le plus court entre deux sommets du modele
  74. @param m le modèle
  75. @param ve_dep sommet de départ
  76. @param ve_fin sommet d'arrivée
  77. @param list liste des sommets parcourus
  78. @param size taille du tableau contenant les sommets parcourus
  79. @return la longueur du chemin
  80. **/
  81. double a2ri_vf_approche (
  82. const vf_model * const m,
  83. int ve_dep,
  84. int ve_fin,
  85. int **list,
  86. int *size);
  87. /**
  88. Calcul du chemin le plus court entre deux sommets du modele
  89. @param m le modèle
  90. @param ve_dep sommet de départ
  91. @param ve_fin sommet d'arrivée
  92. @param list liste des sommets parcourus
  93. @param size taille du tableau contenant les sommets parcourus
  94. @return la longueur du chemin
  95. **/
  96. double a2ri_vef_dijkstra (
  97. const vef_model * const m,
  98. int ve_dep,
  99. int ve_fin,
  100. int **list,
  101. int *size);
  102. /**
  103. Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
  104. @param m le modèle
  105. @param ve_dep sommet de départ
  106. @param ve_fin sommet d'arrivée
  107. @param list liste des sommets parcourus
  108. @param size taille du tableau contenant les sommets parcourus
  109. @param length longueur totale parcouru
  110. @return 1 si un chemin a été créé et trouvé, 0 sinon
  111. **/
  112. int a2ri_vf_geodesic_path_approche_plan_moyen (
  113. vf_model * m,
  114. int ve_dep,
  115. int ve_fin,
  116. int **list,
  117. int *size,
  118. double *length,
  119. int nbsubdiv);
  120. /**
  121. Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
  122. @param m le modèle
  123. @param ve_dep sommet de départ
  124. @param ve_fin sommet d'arrivée
  125. @param list liste des sommets parcourus
  126. @param size taille du tableau contenant les sommets parcourus
  127. @param length longueur totale parcouru
  128. @return 1 si un chemin a été créé et trouvé, 0 sinon
  129. **/
  130. int a2ri_vf_geodesic_path_approche_plan_minmax (
  131. vf_model * m,
  132. int ve_dep,
  133. int ve_fin,
  134. int **list,
  135. int *size,
  136. double *length,
  137. int nbsubdiv);
  138. /**
  139. Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
  140. @param m le modèle
  141. @param ve_dep sommet de départ
  142. @param ve_fin sommet d'arrivée
  143. @param list liste des sommets parcourus
  144. @param size taille du tableau contenant les sommets parcourus
  145. @param length longueur totale parcouru
  146. @return 1 si un chemin a été créé et trouvé, 0 sinon
  147. **/
  148. int a2ri_vf_geodesic_path_approche_plan_vecteur (
  149. vf_model * m,
  150. int ve_dep,
  151. int ve_fin,
  152. int **list,
  153. int *size,
  154. double *length,
  155. int nbsubdiv);
  156. /**
  157. Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
  158. @param m le modèle
  159. @param ve_dep sommet de départ
  160. @param ve_fin sommet d'arrivée
  161. @param list liste des sommets parcourus
  162. @param size taille du tableau contenant les sommets parcourus
  163. @param length longueur totale parcouru
  164. @return 1 si un chemin a été créé et trouvé, 0 sinon
  165. **/
  166. int a2ri_vf_geodesic_path_approche_plan_intersection (
  167. vf_model * m,
  168. int ve_dep,
  169. int ve_fin,
  170. int **list,
  171. int *size,
  172. double *length,
  173. int nbsubdiv);
  174. /**
  175. Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
  176. @param m le modèle
  177. @param ve_dep sommet de départ
  178. @param ve_fin sommet d'arrivée
  179. @param list liste des sommets parcourus
  180. @param size taille du tableau contenant les sommets parcourus
  181. @param length longueur totale parcouru
  182. @return 1 si un chemin a été créé et trouvé, 0 sinon
  183. **/
  184. int a2ri_vf_geodesic_path_A_star_plan_moyen (
  185. vf_model * m,
  186. int ve_dep,
  187. int ve_fin,
  188. int **list,
  189. int *size,
  190. double *length,
  191. int nbsubdiv);
  192. /**
  193. Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
  194. @param m le modèle
  195. @param ve_dep sommet de départ
  196. @param ve_fin sommet d'arrivée
  197. @param list liste des sommets parcourus
  198. @param size taille du tableau contenant les sommets parcourus
  199. @param length longueur totale parcouru
  200. @return 1 si un chemin a été créé et trouvé, 0 sinon
  201. **/
  202. int a2ri_vf_geodesic_path_A_star_plan_minmax (
  203. vf_model * m,
  204. int ve_dep,
  205. int ve_fin,
  206. int **list,
  207. int *size,
  208. double *length,
  209. int nbsubdiv);
  210. /**
  211. Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
  212. @param m le modèle
  213. @param ve_dep sommet de départ
  214. @param ve_fin sommet d'arrivée
  215. @param list liste des sommets parcourus
  216. @param size taille du tableau contenant les sommets parcourus
  217. @param length longueur totale parcouru
  218. @return 1 si un chemin a été créé et trouvé, 0 sinon
  219. **/
  220. int a2ri_vf_geodesic_path_A_star_plan_vecteur (
  221. vf_model * m,
  222. int ve_dep,
  223. int ve_fin,
  224. int **list,
  225. int *size,
  226. double *length,
  227. int nbsubdiv);
  228. /**
  229. Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
  230. @param m le modèle
  231. @param ve_dep sommet de départ
  232. @param ve_fin sommet d'arrivée
  233. @param list liste des sommets parcourus
  234. @param size taille du tableau contenant les sommets parcourus
  235. @param length longueur totale parcouru
  236. @return 1 si un chemin a été créé et trouvé, 0 sinon
  237. **/
  238. int a2ri_vf_geodesic_path_A_star_plan_intersection (
  239. vf_model * m,
  240. int ve_dep,
  241. int ve_fin,
  242. int **list,
  243. int *size,
  244. double *length,
  245. int nbsubdiv);
  246. /**
  247. Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
  248. @param m le modèle
  249. @param ve_dep sommet de départ
  250. @param ve_fin sommet d'arrivée
  251. @param list liste des sommets parcourus
  252. @param size taille du tableau contenant les sommets parcourus
  253. @param length longueur totale parcouru
  254. @return 1 si un chemin a été créé et trouvé, 0 sinon
  255. **/
  256. int a2ri_vf_geodesic_path_dijkstra_plan_minmax (
  257. vf_model * m,
  258. int ve_dep,
  259. int ve_fin,
  260. int **list,
  261. int *size,
  262. double *length,
  263. int nbsubdiv);
  264. /**
  265. Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
  266. @param m le modèle
  267. @param ve_dep sommet de départ
  268. @param ve_fin sommet d'arrivée
  269. @param list liste des sommets parcourus
  270. @param size taille du tableau contenant les sommets parcourus
  271. @param length longueur totale parcouru
  272. @return 1 si un chemin a été créé et trouvé, 0 sinon
  273. **/
  274. int a2ri_vf_geodesic_path_dijkstra_plan_vecteur (
  275. vf_model * m,
  276. int ve_dep,
  277. int ve_fin,
  278. int **list,
  279. int *size,
  280. double *length,
  281. int nbsubdiv);
  282. /**
  283. Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
  284. @param m le modèle
  285. @param ve_dep sommet de départ
  286. @param ve_fin sommet d'arrivée
  287. @param list liste des sommets parcourus
  288. @param size taille du tableau contenant les sommets parcourus
  289. @param length longueur totale parcouru
  290. @return 1 si un chemin a été créé et trouvé, 0 sinon
  291. **/
  292. int a2ri_vf_geodesic_path_dijkstra_plan_intersection (
  293. vf_model * m,
  294. int ve_dep,
  295. int ve_fin,
  296. int **list,
  297. int *size,
  298. double *length,
  299. int nbsubdiv);
  300. /**
  301. Calcul le chemin géodésique entre deux sommets. Le maillage sera subdivisé et le chemin entre des deux sommets retournés
  302. @param m le modèle
  303. @param ve_dep sommet de départ
  304. @param ve_fin sommet d'arrivée
  305. @param list liste des sommets parcourus
  306. @param size taille du tableau contenant les sommets parcourus
  307. @param length longueur totale parcouru
  308. @return 1 si un chemin a été créé et trouvé, 0 sinon
  309. **/
  310. int a2ri_vf_geodesic_path_dijkstra_plan_moyen (
  311. vf_model * m,
  312. int ve_dep,
  313. int ve_fin,
  314. int **list,
  315. int *size,
  316. double *length,
  317. int nbsubdiv);
  318. #endif