point.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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 POINT__H
  25. #define POINT__H
  26. #include <stdio.h>
  27. #include <math.h>
  28. #include "util.h"
  29. /**
  30. Structure point2d
  31. */
  32. typedef struct
  33. {
  34. double x,
  35. y;
  36. int att_int;
  37. double att_double;
  38. } point2d;
  39. /**
  40. Structure point3d
  41. */
  42. typedef struct
  43. {
  44. double x,
  45. y,
  46. z;
  47. int att_int;
  48. double att_double;
  49. } point3d,
  50. *pt_point3d;
  51. /**
  52. Initialisation d'un point2d (x,y)
  53. @param p pointeur sur un point2d
  54. @param x
  55. @param y
  56. @return aucun
  57. */
  58. void point2d_init (
  59. point2d * p,
  60. double x,
  61. double y);
  62. /**
  63. Initialisation d'un point3d (x,y,z)
  64. @param p pointeur sur un point3d
  65. @param x
  66. @param y
  67. @param z
  68. @return aucun
  69. */
  70. void point3d_init (
  71. point3d * p,
  72. double x,
  73. double y,
  74. double z);
  75. /**
  76. Affichage d'un point2d
  77. @param p le point
  78. @return aucun
  79. **/
  80. void point2d_display (
  81. const point2d * const p);
  82. /**
  83. Affichage d'un point3d
  84. @param p le point
  85. @return aucun
  86. **/
  87. void point3d_display (
  88. const point3d * const p);
  89. /**
  90. Teste l'égalité de 2 points. Retourne vrai si les composantes sont égales deux à deux.
  91. @param p1 premier point
  92. @param p2 second point
  93. @return 1 si p1==p2, 0 sinon
  94. */
  95. int point3d_equal (
  96. const point3d * const p1,
  97. const point3d * const p2);
  98. /**
  99. Retourne la position de la valeur tosearch, -1 sinon
  100. @param list tableau de point3d
  101. @param size taille du tableau
  102. @param tosearch point3d à chercher
  103. @return position de la première occurence, -1 s'il n'apparait pas dans le tableau
  104. */
  105. int list_point3d_contains (
  106. const point3d * const list,
  107. int size,
  108. const point3d * const tosearch);
  109. /**
  110. Clone la liste
  111. @param list la liste à cloner
  112. @param size taille de la liste
  113. @param list_clone liste clonée
  114. @return 1 si la liste est bien clonée, 0 sinon
  115. **/
  116. int list_point3d_clone (
  117. const point3d * const list,
  118. int size,
  119. point3d ** list_clone);
  120. /**
  121. Ajoute le point3d toadd en fin de liste
  122. @param list pointeur sur le premier élément du tableau
  123. @param size pointeur sur la taille du tableau
  124. @param toadd point3d à ajouter
  125. @param add_type WITH_REDUNDANCE ou WITHOUT_REDUNDANCE <BR> avec redondance : ajout simple <BR> sans redondance : ajout si la valeur n'apparait pas dans la liste
  126. @return 1 si succès, 0 sinon
  127. */
  128. int list_point3d_add (
  129. point3d ** list,
  130. int *size,
  131. const point3d * const toadd,
  132. int add_type);
  133. /**
  134. Enlève le point3d à la position index
  135. @param list pointeur sur le premier élément du tableau
  136. @param size pointeur sur la taille du tableau
  137. @param index position du réel à supprimer
  138. @return 1 si succès, 0 sinon
  139. */
  140. int list_point3d_remove (
  141. point3d ** list,
  142. int *size,
  143. int index);
  144. /**
  145. Mélange la liste de point3d
  146. @param list tableau de point3d
  147. @param size taille du tableau
  148. @return aucun
  149. */
  150. void list_point3d_mix (
  151. point3d * list,
  152. int size);
  153. /**
  154. Affichage de la liste de point3d
  155. @param list tableau de point3d
  156. @param size taille du tableau
  157. @return aucun
  158. */
  159. void list_point3d_display (
  160. const point3d * const list,
  161. int size);
  162. /**
  163. Calcul le centre de gravite d'un ensemble de point
  164. @param data liste de point3d
  165. @param nbpoint nombre de point
  166. @return le centre de gravité
  167. */
  168. point3d *center_of_mass (
  169. const point3d * const data,
  170. int nbpoint);
  171. #endif