6 * \date 20 decembre 2009
12 #include "constantes.h"
15 * \fn void tic(struct timeval* temps, char* texte)
16 * \brief Initialise le compteur de temps
19 * \param[in] texte texte a afficher
22 void tic(struct timeval* temps, char* texte)
24 gettimeofday(temps, NULL);
27 printf("%s\n", texte) ;
31 * \fn double toc(struct timeval start, char* texte)
32 * \brief Calcule le temps ecoule
34 * \param[in] start temps de debut du chrono
35 * \param[in] texte texte a afficher
37 * \return le temps ecoule entre tic et toc
39 double toc(struct timeval start, char* texte)
44 gettimeofday(&end, NULL);
46 elapsed = (double)(end.tv_sec-start.tv_sec)
47 + 0.000001*(double)(end.tv_usec-start.tv_usec);
49 printf("%s : %f\n", texte, elapsed) ;
56 * \fn void min_max_int1d(int *val_min, int *val_max, int *vect, int dim)
57 * \brief determine le min et max d'un vecteur de int
62 * \param[in] dim dimension du vecteur
65 void min_max_int1d(int *val_min, int *val_max, int *vect, int dim)
74 if (vect[n] > max) max = vect[n];
75 if (vect[n] < min) min = vect[n];
86 * \fn inline int test_inf(double arg1, double arg2)
88 * \brief test (arg1 < arg2) inferieur a avec pourcentage minimum
95 inline int test_inf(double arg1, double arg2)
98 return arg1 < (arg2*COEF_DECROI) ;
100 return arg1 < (arg2*INV_COEF_DECROI) ;
106 * \fn int calcul_px_autour_noeud(int ni, int nj, int pas,
107 * int idim_m1, int jdim_m1,
108 * int *liste_pixel_move)
110 * \brief determine les positions de test autout d'un noeud
112 * \param[in] ni coordonnee i
113 * \param[in] nj coordonnee j
114 * \param[in] pas ecartement par rapport au centre
115 * \param[in] idim_m1 dimension de l'image sur l'axe i (-1)
116 * \param[in] jdim_m1 dimension de l'image sur l'axe j (-1)
117 * \param[out] liste_pixel_move liste des coordonnees [i,j,i,j,...]
119 * return le nombre de coordonnees (*2)
121 uint32 calcul_px_autour_noeud(uint32 ni, uint32 nj, int pas,
122 uint32 idim_m1, uint32 jdim_m1,
123 uint32 *liste_pixel_move)
127 liste_pixel_move[ind++] = min(ni + pas, idim_m1) ;
128 liste_pixel_move[ind++] = nj ;
130 liste_pixel_move[ind++] = min(ni + pas, idim_m1) ;
131 liste_pixel_move[ind++] = min(nj + pas, jdim_m1) ;
133 liste_pixel_move[ind++] = ni ;
134 liste_pixel_move[ind++] = min(nj + pas, jdim_m1) ;
136 liste_pixel_move[ind++] = max(ni - pas, 0) ;
137 liste_pixel_move[ind++] = min(nj + pas, jdim_m1) ;
139 liste_pixel_move[ind++] = max(ni - pas, 0) ;
140 liste_pixel_move[ind++] = nj ;
142 liste_pixel_move[ind++] = max(ni - pas, 0) ;
143 liste_pixel_move[ind++] = max(nj - pas, 0) ;
145 liste_pixel_move[ind++] = ni ;
146 liste_pixel_move[ind++] = max(nj - pas, 0) ;
148 liste_pixel_move[ind++] = min(ni + pas, idim_m1) ;
149 liste_pixel_move[ind++] = max(nj - pas, 0) ;
157 * \fn inline int sign_diff_ou_egal_zero(int val1, int val2)
159 * \brief fonction qui test si les arguments sont de signes differents ou nuls
165 * \return le test 0/1
168 inline int sign_diff_ou_egal_zero(int val1, int val2)
172 if (val2 > 0) return 0 ;
178 if (val2 < 0) return 0 ;
182 return 1 ;/* val1 == 0 */
186 * \fn inline int sign_diff_strict(int val1, int val2)
188 * \brief fonction qui test si les arguments sont de signes differents strictement
194 * \return le test 0/1
197 inline int sign_diff_strict(int val1, int val2)
201 if (val2 >= 0) return 0 ;
207 if (val2 <= 0) return 0 ;
211 return 0 ;/* val1 == 0 */
217 * \fn inline int sinus_triangle(int Ai, int Aj, int Bi, int Bj, int Ci, int Cj)
219 * \brief calcul le "sinus" de l'angle du triangle ABC
222 * \param[in] Ai les coordonnees
229 * \return le sinus non normalise
231 * Cette fonction est utile pour determiner si un triangle ABC
232 * est donne dans l'ordre trigo.
233 * Signe > 0: sens trigo,
234 * signe < 0: sens antitrigo
237 inline int sinus_triangle(int Ai, int Aj, int Bi, int Bj, int Ci, int Cj)
239 return (((Bi-Ai)*(Cj-Aj)) - ((Ci-Ai)*(Bj-Aj))) ;
244 * \fn void recopie_vecteur(int *in, int *out, int dim)
246 * \brief recopie le vecteur out vers in
249 * \param[in] in vecteur d'entree
250 * \param[out] out vecteur recopier
251 * \param[in] dim longueur du vecteur
253 void recopie_vecteur(int *in, int *out, int dim)
256 for (n=0; n<dim; n++) out[n] = in[n] ;