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
66 void min_max_int1d(int *val_min, int *val_max, int *vect, int dim)
75 if (vect[n] > max) max = vect[n];
76 if (vect[n] < min) min = vect[n];
83 void min_max_ushort1d(int *val_min, int *val_max, unsigned short *vect, int dim)
86 unsigned short min, max ;
93 if (vect[n] > max) max = vect[n];
94 if (vect[n] < min) min = vect[n];
105 * \fn inline int test_inf(double arg1, double arg2)
107 * \brief test (arg1 < arg2) inferieur a avec pourcentage minimum
114 inline int test_inf(double arg1, double arg2)
117 return arg1 < (arg2*COEF_DECROI) ;
119 return arg1 < (arg2*INV_COEF_DECROI) ;
125 * \fn int calcul_px_autour_noeud(int ni, int nj, int pas,
126 * int idim_m1, int jdim_m1,
127 * int *liste_pixel_move)
129 * \brief determine les positions de test autout d'un noeud
131 * \param[in] ni coordonnee i
132 * \param[in] nj coordonnee j
133 * \param[in] pas ecartement par rapport au centre
134 * \param[in] idim_m1 dimension de l'image sur l'axe i (-1)
135 * \param[in] jdim_m1 dimension de l'image sur l'axe j (-1)
136 * \param[out] liste_pixel_move liste des coordonnees [i,j,i,j,...]
138 * return le nombre de coordonnees (*2)
140 uint32 calcul_px_autour_noeud(uint32 ni, uint32 nj, int pas,
141 uint32 idim_m1, uint32 jdim_m1,
142 uint32 *liste_pixel_move)
146 liste_pixel_move[ind++] = min(ni + pas, idim_m1) ;
147 liste_pixel_move[ind++] = nj ;
149 liste_pixel_move[ind++] = min(ni + pas, idim_m1) ;
150 liste_pixel_move[ind++] = min(nj + pas, jdim_m1) ;
152 liste_pixel_move[ind++] = ni ;
153 liste_pixel_move[ind++] = min(nj + pas, jdim_m1) ;
155 liste_pixel_move[ind++] = max(ni - pas, 0) ;
156 liste_pixel_move[ind++] = min(nj + pas, jdim_m1) ;
158 liste_pixel_move[ind++] = max(ni - pas, 0) ;
159 liste_pixel_move[ind++] = nj ;
161 liste_pixel_move[ind++] = max(ni - pas, 0) ;
162 liste_pixel_move[ind++] = max(nj - pas, 0) ;
164 liste_pixel_move[ind++] = ni ;
165 liste_pixel_move[ind++] = max(nj - pas, 0) ;
167 liste_pixel_move[ind++] = min(ni + pas, idim_m1) ;
168 liste_pixel_move[ind++] = max(nj - pas, 0) ;
176 * \fn inline int sign_diff_ou_egal_zero(int val1, int val2)
178 * \brief fonction qui test si les arguments sont de signes differents ou nuls
184 * \return le test 0/1
187 inline int sign_diff_ou_egal_zero(int val1, int val2)
191 if (val2 > 0) return 0 ;
197 if (val2 < 0) return 0 ;
201 return 1 ;/* val1 == 0 */
205 * \fn inline int sign_diff_strict(int val1, int val2)
207 * \brief fonction qui test si les arguments sont de signes differents strictement
213 * \return le test 0/1
216 inline int sign_diff_strict(int val1, int val2)
220 if (val2 >= 0) return 0 ;
226 if (val2 <= 0) return 0 ;
230 return 0 ;/* val1 == 0 */
236 * \fn inline int sinus_triangle(int Ai, int Aj, int Bi, int Bj, int Ci, int Cj)
238 * \brief calcul le "sinus" de l'angle du triangle ABC
241 * \param[in] Ai les coordonnees
248 * \return le sinus non normalise
250 * Cette fonction est utile pour determiner si un triangle ABC
251 * est donne dans l'ordre trigo.
252 * Signe > 0: sens trigo,
253 * signe < 0: sens antitrigo
256 inline int sinus_triangle(int Ai, int Aj, int Bi, int Bj, int Ci, int Cj)
258 return (((Bi-Ai)*(Cj-Aj)) - ((Ci-Ai)*(Bj-Aj))) ;
263 * \fn void recopie_vecteur(int *in, int *out, int dim)
265 * \brief recopie le vecteur out vers in
268 * \param[in] in vecteur d'entree
269 * \param[out] out vecteur recopier
270 * \param[in] dim longueur du vecteur
272 void recopie_vecteur(int *in, int *out, int dim)
275 for (n=0; n<dim; n++) out[n] = in[n] ;