overlap.h 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /*************************************/
  2. /* Auteur : Rémi Synave */
  3. /* Date de création : 01/03/07 */
  4. /* Date de modification : 15/03/15 */
  5. /* Version : 0.4 */
  6. /*************************************/
  7. /*************************************/
  8. /* Auteur : Romain Leguay */
  9. /* Nguyen Haiduong */
  10. /* Solange Houeto */
  11. /* Marianne Fichoux */
  12. /* Date de modification : 06/06/09 */
  13. /* Version : 0.2 */
  14. /*************************************/
  15. /***************************************************************************/
  16. /* This file is part of a2ri. */
  17. /* */
  18. /* a2ri is free software: you can redistribute it and/or modify it */
  19. /* under the terms of the GNU Lesser General Public License as published */
  20. /* by the Free Software Foundation, either version 3 of the License, or */
  21. /* (at your option) any later version. */
  22. /* */
  23. /* a2ri is distributed in the hope that it will be useful, */
  24. /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
  25. /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
  26. /* GNU Lesser General Public License for more details. */
  27. /* */
  28. /* You should have received a copy of the GNU Lesser General Public */
  29. /* License along with a2ri. */
  30. /* If not, see <http://www.gnu.org/licenses/>. */
  31. /***************************************************************************/
  32. #ifndef OVERLAP__H
  33. #define OVERLAP__H
  34. #include <stdio.h>
  35. #include <stdlib.h>
  36. #include <pthread.h>
  37. #include "model.h"
  38. #include "boundingbox.h"
  39. #include "point.h"
  40. #include "util.h"
  41. /**
  42. Test de l'intersection d'une AABB avec une liste d'AABB
  43. @param min coin inférieur de la AABB
  44. @param max coin supérieur de la AABB
  45. @param listmin liste des coins inférieurs des AABB
  46. @param listmax liste des coins supérieurs des AABB
  47. @param size taille de la liste des AABB
  48. @return 1 si intersection, 0 sinon
  49. **/
  50. int intersection_axis_aligned_bounding_box_with_axis_aligned_bounding_box_list (
  51. const point3d * const min,
  52. const point3d * const max,
  53. const point3d * const listmin,
  54. const point3d * const listmax,
  55. int size);
  56. /**
  57. Test de l'instesection d'une bounding ball avec une liste de bounding ball
  58. @param cx coordonnée x du centre de la bounding ball
  59. @param cy coordonnée y du centre de la bounding ball
  60. @param cz coordonnée z du centre de la bounding ball
  61. @param rayon rayon de la bounding ball
  62. @param listx liste des coordonnées x des centres des bounding ball
  63. @param listy liste des coordonnées y des centres des bounding ball
  64. @param listz liste des coordonnées z des centres des bounding ball
  65. @param rayon liste des rayons des bounding ball
  66. @param nbelt taille de la liste
  67. @param alpha
  68. **/
  69. int intersection_bounding_ball_with_bounding_ball_list (
  70. const point3d * const c,
  71. double rayon,
  72. const point3d * const listcentre,
  73. const double * const listrayon,
  74. int nbelt,
  75. double alpha);
  76. /**
  77. Calcule le taux de recouvrement en utilisant les bounding ball de ritter
  78. @param base modèle de base
  79. @param m modèle dont on veux trouver le taux de recouvrement avec le modèle de base
  80. @param sensibility sensibilité du taux de recouvrement
  81. @return le taux de recouvrement trouvé
  82. **/
  83. double a2ri_vf_bounding_ball_ritter_compute_overlap (
  84. const vf_model * const base,
  85. const vf_model * const m,
  86. double sensibility);
  87. /**
  88. Calcule le taux de recouvrement en utilisant les bounding ball minimales
  89. @param base modèle de base
  90. @param m modèle dont on veux trouver le taux de recouvrement avec le modèle de base
  91. @param sensibility sensibilité du taux de recouvrement
  92. @return le taux de recouvrement trouvé
  93. **/
  94. //Remarque : les maillages devraient etre qualifiés de const mais impossible a cause de l'utilisation de pthread
  95. double a2ri_vf_bounding_ball_minimale_compute_overlap (
  96. vf_model * base,
  97. vf_model * m,
  98. double sensibility);
  99. /**
  100. Calcule le taux de recouvrement en utilisant les axis aligned bounding box
  101. @param base modèle de base
  102. @param m modèle dont on veux trouver le taux de recouvrement avec le modèle de base
  103. @return le taux de recouvrement trouvé
  104. **/
  105. double a2ri_vf_axis_aligned_bounding_box_compute_overlap (
  106. const vf_model * const base,
  107. const vf_model * const m);
  108. /**
  109. Calcule la liste des faces du modèle m s'intersectant avec le modèle base en utilisant les bounding ball de ritter.
  110. @param base modèle servant de base
  111. @param m modèle dont on cherche les faces s'intersectant avec le modèle de base
  112. @param list liste des faces s'intersectant
  113. @param size taille de la liste
  114. @param alpha variable alpha servant lors du test d'intesection
  115. @return aucun
  116. **/
  117. void a2ri_vf_bounding_ball_ritter_find_face_overlapping (
  118. const vf_model * const base,
  119. const vf_model * const m,
  120. int **list,
  121. int *size,
  122. double alpha);
  123. /**
  124. Calcule la liste des faces du modèle m s'intersectant avec le modèle base en utilisant les bounding ball de ritter.
  125. @param base modèle servant de base
  126. @param m modèle dont on cherche les faces s'intersectant avec le modèle de base
  127. @param list liste des faces s'intersectant
  128. @param size taille de la liste
  129. @param alpha variable alpha servant lors du test d'intesection
  130. @return aucun
  131. **/
  132. void a2ri_vf_bounding_ball_minimale_find_face_overlapping (
  133. const vf_model * const base,
  134. const vf_model * const m,
  135. int **list,
  136. int *size,
  137. double alpha);
  138. /**
  139. Calcule la liste des faces du modèle m s'intersectant avec le modèle base en utilisant les AABB
  140. @param base modèle servant de base
  141. @param m modèle dont on cherche les faces s'intersectant avec le modèle de base
  142. @param list liste des faces s'intersectant
  143. @param size taille de la liste
  144. @return aucun
  145. **/
  146. void a2ri_vf_axis_aligned_bounding_box_find_face_overlapping (
  147. const vf_model * const base,
  148. const vf_model * const m,
  149. int **listface,
  150. int *size);
  151. #endif