boundingbox.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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. /* 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 BOUNDING_BOX__H
  25. #define BOUNDING_BOX__H
  26. #include <stdio.h>
  27. #include <stdlib.h>
  28. #include <math.h>
  29. #include <gsl/gsl_math.h>
  30. #include <gsl/gsl_eigen.h>
  31. #include "util.h"
  32. #include "model.h"
  33. #include "point.h"
  34. #include "matrix.h"
  35. /**
  36. Calcul des boites englobantes (parallélépipèdes) des faces de la liste
  37. @param m le modèle
  38. @param faces tableau contenant les numéros des faces pour lesquels on veut les boites englobantes
  39. @param nbfaces taille du tableau
  40. @param ptmin pointeur sur le tableau contenant les points (xmin,ymin,zmin) des boites englobantes
  41. @param ptmax pointeur sur le tableau contenant les points (xmax,ymax,zmax) des boites englobantes
  42. **/
  43. void a2ri_vf_axis_aligned_bounding_box (
  44. const vf_model * const m,
  45. const int * const faces,
  46. int nbfaces,
  47. point3d ** ptmin,
  48. point3d ** ptmax);
  49. /**
  50. Calcul des sphères englobantes des faces de la liste en utilisant les fastball de Ritter
  51. @param m le modèle
  52. @param faces tableau contenant les numéros des faces pour lesquels on veut les sphères englobantes
  53. @param nbfaces taille du tableau
  54. @param listcentre pointeur sur le tableau de point3d contenant les centres de sphères englobantes
  55. @param listradius pointeur sur le tableau contenant les rayons des sphères englobantes
  56. **/
  57. void a2ri_vf_bounding_ball_ritter (
  58. const vf_model * const m,
  59. const int * const faces,
  60. int nbfaces,
  61. point3d ** listcentre,
  62. double ** listradius);
  63. /**
  64. Calcul des sphères englobantes des faces de la liste
  65. @param m le modèle
  66. @param faces tableau contenant les numéros des faces pour lesquels on veut les sphères englobantes
  67. @param nbfaces taille du tableau
  68. @param listcentre pointeur sur le tableau de point3d contenant les centres de sphères englobantes
  69. @param listradius pointeur sur le tableau contenant les rayons des sphères englobantes
  70. **/
  71. void a2ri_vf_bounding_ball_minimale (
  72. const vf_model * const m,
  73. const int * const faces,
  74. int nbfaces,
  75. point3d ** listcentre,
  76. double ** listradius);
  77. /**
  78. Calcul l'oriented bounding box du maillage
  79. @param m le modèle
  80. @param newbasex pointeur sur le vecteur "X" de la nouvelle base dans laquelle l'oriented bounding box est représenté
  81. @param newbasey pointeur sur le vecteur "Y" de la nouvelle base dans laquelle l'oriented bounding box est représenté
  82. @param newbasez pointeur sur le vecteur "Z" de la nouvelle base dans laquelle l'oriented bounding box est représenté
  83. @param ptmin pointeur sur le point3d contenant le coin inférieur de l'oriented bounding box
  84. @param ptmax pointeur sur le point3d contenant le coin supérieur de l'oriented bounding box
  85. **/
  86. void a2ri_vf_oriented_bounding_box (
  87. const vf_model * const m,
  88. vector3d * newbasex,
  89. vector3d * newbasey,
  90. vector3d * newbasez,
  91. point3d * ptmin,
  92. point3d * ptmax);
  93. /**
  94. Calcul des sphères englobantes des faces de la liste
  95. @param m le modèle
  96. @param faces tableau contenant les numéros des faces pour lesquels on veut les sphères englobantes
  97. @param nbfaces taille du tableau
  98. @param listcentre pointeur sur le tableau de point3d contenant les centres de sphères englobantes
  99. @param listradius pointeur sur le tableau contenant les rayons des sphères englobantes
  100. **/
  101. void a2ri_vef_bounding_ball_minimale (
  102. const vef_model * const m,
  103. const int * const faces,
  104. int nbfaces,
  105. point3d ** listcentre,
  106. double ** listradius);
  107. /**
  108. Calcul des sphères englobantes des faces de la liste
  109. @param m le modèle
  110. @param faces tableau contenant les numéros des faces pour lesquels on veut les sphères englobantes
  111. @param nbfaces taille du tableau
  112. @param listcentre pointeur sur le tableau de point3d contenant les centres de sphères englobantes
  113. @param listradius pointeur sur le tableau contenant les rayons des sphères englobantes
  114. **/
  115. void point3d_bounding_ball_minimale (
  116. const point3d * const faces,
  117. int nbfaces,
  118. point3d ** listcentre,
  119. double ** listradius);
  120. #endif