void tirer (float px, float py, int canonx, int canony, int tx[][PRECISIONcailloux], int ty[][PRECISIONcailloux], int tableauutile, double *degre, struct DONJON *donjon) { int vitesse = VITESSE; float y, x; int difx = 0, dify = 0, i = 0, bissectrice = 0; int octant = calculoctant(px, py, canonx, canony, &difx, &dify); float ecart = 0, ecartinverse = 0; x = canonx; y = canony; *degre = atan2(dify, difx); *degre *= 57.296; ecart = *degre/90; ecartinverse = 1-ecart; bissectrice = *degre -45; if (bissectrice < 0) { bissectrice = bissectrice*-1; } bissectrice = bissectrice *2.5; for (i = 0; i < PRECISIONcailloux-bissectrice ; i++) { if (octant == 1) { x += ecartinverse*vitesse; y -= ecart*vitesse; } else if (octant == 2) { x += ecartinverse*vitesse; y += ecart*vitesse; } else if (octant == 3) { x -= ecartinverse*vitesse; y += ecart*vitesse; } else { x -= ecartinverse*vitesse; y -= ecart*vitesse; } tx[tableauutile][i] = arrondi(x)- donjon->map.pict.pos.x; ty[tableauutile][i] = arrondi(y)- donjon->map.pict.pos.y; } for(i = PRECISIONcailloux-bissectrice; i < PRECISIONcailloux ; i++) { tx[tableauutile][i] = tx[tableauutile][PRECISIONcailloux-1-bissectrice]; ty[tableauutile][i] = ty[tableauutile][PRECISIONcailloux-1-bissectrice]; } }
void teste_somme( int bits, double c1, int e1, double c2, int e2 ) { int exact, approx, erreur ; exact = arrondi(c1*e1+c2*e2) ; approx = multiplie(bits,c1,e1) + multiplie(bits,c2,e2) ; erreur = arrondi(1000*double(exact-approx)/exact) ; if (erreur<0) { erreur = -erreur ; } std::cout <<std::right<<std::setw(2)<<bits<<" bits : " <<std::left<<exact<<" ~ "<<approx <<" ("<<erreur<<"/1000)"<<std::endl ; }
void teste_approxime( int bits, double valeur ) { Coef coef ; coef.approxime(bits,valeur) ; double approximation = coef.approximation() ; int erreur = arrondi(100*(valeur-approximation)/valeur) ; if (erreur<0) { erreur = -erreur ; } std::cout <<std::right<<std::setw(2)<<bits<<" bits : " <<std::left<<valeur<<" ~ "<<std::setw(8)<<arrondi(approximation,6) <<" ("<<erreur<<"/100)" <<" ("<<coef.numerateur()<<"/2^"<<coef.exposant()<<")" <<std::endl ; }
void teste_somme( int bits, double c1, int e1, double c2, int e2 ) { Coef coef1, coef2 ; coef1.approxime(bits,c1) ; coef2.approxime(bits,c2) ; int approx = coef1.multiplie(e1) + coef2.multiplie(e2) ; int exact = arrondi(c1*e1+c2*e2) ; int erreur = arrondi(1000*double(exact-approx)/exact) ; if (erreur<0) { erreur = -erreur ; } std::cout <<std::right<<std::setw(2)<<bits<<" bits : " <<std::left<<exact<<" ~ "<<approx <<" ("<<erreur<<"/1000)"<<std::endl ; }
void teste_approxime( int bits, double valeur ) { Coef coef ; int erreur ; approxime(bits,valeur,coef) ; double approximation = double(coef.numerateur_)/fois_puissance_de_deux(1,coef.exposant_) ; erreur = arrondi(100*(valeur-approximation)/valeur) ; if (erreur<0) { erreur = -erreur ; } std::cout <<std::right<<std::setw(2)<<bits<<" bits : " <<std::left<<valeur<<" ~ "<<std::setw(8)<<arrondi(approximation,6) <<" ("<<erreur<<"/100)" <<" ("<<coef.numerateur_<<"/2^"<<coef.exposant_<<")" <<std::endl ; }
static int32_t orientation(double mx1, double my1, double mx2, double my2, double mxy2, int32_t n) { double Mx2, My2, Mxy2, delta; double lambda1; double x, y, a; int32_t sign, theta; /* moments centres d'ordre 2 (variances et covariances) */ Mx2 = mx2 - mx1 * mx1 / n; My2 = my2 - my1 * my1 / n; Mxy2 = mxy2 - mx1 * my1 / n; /* calcul des valeurs propres de la matrice des covariances */ delta = (Mx2 - My2) * (Mx2 - My2) + 4 * Mxy2 * Mxy2; lambda1 = (Mx2 + My2 + sqrt(delta)) / 2.0; #ifdef DEBUGORIEN printf("Mx2 = %g ; My2 = %g ; Mxy2 = %g ; lambda1 = %g\n", Mx2, My2, Mxy2, lambda1); #endif if (mcabs(lambda1 - Mx2) < EPSILON) return 0; a = Mxy2 / (lambda1 - Mx2); if (a < 0) sign = -1; else sign = 1; a = a * a; x = sqrt(a / (1 + a)); y = sign * sqrt(1 / (1 + a)); #ifdef DEBUGORIEN printf("x = %g ; y = %g ; atan2(y,x) = %g\n", x, y, atan2(y,x)); #endif theta = arrondi( (atan2(y,x) / M_PI) * 180.0 ); if (theta < 0) return theta + 180; else return theta; } /* orientation() */
void teste( int bits, double valeur ) { Coef c(bits) ; c = valeur ; erreur(bits,valeur,arrondi(c,6)) ; std::cout<<" ("<<c<<")"<<std::endl ; }
void teste( int bits, double valeur ) { Coef c(bits) ; c.approxime(valeur) ; erreur(bits,valeur,arrondi(c.approximation(),6)) ; std::cout<<" ("<<c.numerateur()<<"/2^"<<c.exposant()<<")"<<std::endl ; }
void operator=( double valeur ) { numerateur_ = exposant_ = 0 ; if (valeur==0) { return ; } double min = (entier_max(bits_)+0.5)/2 ; while (valeur<min) { exposant_ += 1 ; valeur *= 2 ; } numerateur_ = arrondi(valeur) ; }
void teste( int bits, double valeur ) { Coef c(bits) ; c.approxime(valeur) ; erreur(bits,valeur,arrondi(c.approximation(),6)) ; std::cout<<" (" ; affiche(c) ; std::cout<<")"<<std::endl ; }
void teste( int bits, double c1, int e1, double c2, int e2 ) { int exact = arrondi(c1*e1+c2*e2) ; Coef coef1(bits), coef2(bits) ; coef1.approxime(c1) ; coef2.approxime(c2) ; int approx = coef1.multiplie(e1) + coef2.multiplie(e2) ; erreur(bits,exact,approx) ; std::cout<<std::endl ; }
void teste( int bits, double c1, int e1, double c2, int e2 ) { int exact = arrondi(c1*e1+c2*e2) ; Coef coef1(bits), coef2(bits) ; coef1 = c1 ; coef2 = c2 ; int approx = coef1*e1 + coef2*e2 ; erreur(bits,exact,approx) ; std::cout<<std::endl ; }
void teste( double c1, int e1, double c2, int e2 ) { c1_.approxime(c1) ; c2_.approxime(c2) ; int exact, approx ; exact = arrondi(c1*e1+c2*e2) ; approx = c1_.multiplie(e1) + c2_.multiplie(e2) ; erreur(c1_.lit_bits(),exact,approx) ; std::cout<<std::endl ; }
void erreur( int bits, double exact, double approx ) { if (exact==0) { echec(1,"division par 0") ; } int erreur = arrondi(resolution_*(exact-approx)/exact) ; if (erreur<0) { erreur = -erreur ; } std::cout <<std::right<<std::setw(2)<<bits<<" bits : " <<std::left<<exact<<" ~ "<<approx <<" ("<<erreur<<"/"<<resolution_<<")" ; }
virtual void execute( int bits ) { Coef<U> c(bits) ; for ( int i=0 ; i<nb_ ; ++i ) { c = num_[i] ; exact_[i] = num_[i] ; approx_[i] = arrondi(c,6) ; } erreur(bits) ; }
virtual void execute( int bits ) { Coef<U> coef1(bits), coef2(bits) ; for ( int i=0 ; i<nb_ ; ++i ) { coef1 = num_[i] ; coef2 = (1-num_[i]) ; exact_[i] = 200. ; approx_[i] = arrondi(coef1*U(exact_[i]) + coef2*U(exact_[i]),3) ; } erreur(bits) ; }
void approxime( int bits, double valeur, Coef & coef ) { coef.numerateur_ = coef.exposant_ = 0 ; if (valeur==0) { return ; } double min = (entier_max(bits)+0.5)/2 ; while (valeur<min) { coef.exposant_ = coef.exposant_ + 1 ; valeur = valeur * 2 ; } coef.numerateur_ = arrondi(valeur) ; }
void approxime( int bits, double valeur, int & numerateur, int & exposant ) { numerateur = exposant = 0 ; if (valeur==0) { return ; } double min = (entier_max(bits)+0.5)/2 ; while (valeur<min) { exposant = exposant + 1 ; valeur = valeur * 2 ; } numerateur = arrondi(valeur) ; }
// transformation d'un double en Coef void approxime( double valeur ) { numerateur_ = exposant_ = 0 ; if (valeur==0) { return ; } double min = (entier_max(bits_)+0.5)/2 ; while (valeur<min) { exposant_ = exposant_ + 1 ; valeur = valeur * 2 ; } numerateur_ = arrondi(valeur) ; }
void teste_approxime( int bits, double valeur ) { int numerateur, exposant, erreur ; approxime(bits,valeur,numerateur,exposant) ; double approximation = double(numerateur)/fois_puissance_de_deux(1,exposant) ; erreur = arrondi(100*(valeur-approximation)/valeur) ; if (erreur<0) { erreur = -erreur ; } std::cout << bits << " bits : " << valeur << " ~ " << std::setw(8) << approximation <<" ("<<erreur<<"/100)" <<" ("<<numerateur<<"/2^"<<exposant<<")" <<std::endl ; }
void erreur( int bits ) { double exacts {}, approxs {}, erreurs {} ; for ( int i=0 ; i<nb_ ; ++i ) { exacts += exact_[i] ; approxs += approx_[i] ; erreurs += fabs(exact_[i]-approx_[i])/exact_[i] ; } exacts /= nb_ ; approxs /= nb_ ; erreurs /= nb_ ; erreurs *= resolution_ ; std::cout <<bits<<" bits : " <<std::left<<exacts<<" ~ "<<std::setw(width_)<<approxs <<" ("<<arrondi(erreurs)<<"/"<<resolution_<<")" <<std::endl ; }
int main() { int bits ; std::cout<<std::endl ; for ( bits = 2 ; bits <= 8 ; bits = bits + 2 ) { teste_approxime(bits,0.65) ; } std::cout<<std::endl ; for ( bits = 2 ; bits <= 8 ; bits = bits + 2 ) { teste_approxime(bits,0.35) ; } std::cout<<std::endl ; for ( bits = 1 ; bits <= 8 ; bits = bits + 1 ) { int exact = arrondi(0.65*3515+0.35*4832) ; int approx = multiplie(bits,0.65,3515) + multiplie(bits,0.35,4832) ; std::cout << bits << " bits : 0.65*3515+0.35*4832 = " << exact << " ~ " << approx << std::endl ; } std::cout<<std::endl ; return 0 ; }
int main(int argc, char** argv) { Reel tableau_notes[NMAX]; chaine tableau_noms[NMAX] = {"Christian", "Clement", "Gauthier", "Julien", "Lois", "Mathias", "Maximilien", "Messen", "Romain", "Samuel", "Xavier", "Yohan","Fabio","Jean","Luc"}; int choix_eleve,i,choix_menu,choix_arrondi,ecart[NMAX],ecartmin,nom_proche; double note_eleve = 0.00; double somme_notes = 0.00; double moyenne_notes = 0.00; double ecart_type = 0.00; double somme_diff_carrees = 0.00; char nom_eleve[NMAX]; srand(time(NULL)); //Initialisation tableau de notes for(i=0;i<NMAX;i++) { tableau_notes[i] = (rand()/(double)RAND_MAX) * (20-0) + 0;//Aléatoire compris entre 0 et 20 } //Menu printf("Nom prog : Gestions d'etudiants\n\n"); printf("Menu :\n\n"); printf("1-Afficher les noms et les notes\n"); printf("2-Modifier la note d'un eleve\n"); printf("3-Modifier le nom d'un eleve\n"); printf("4-Afficher la moyenne et l'ecart-type de la classe\n"); printf("5-Afficher les notes arrondies\n"); printf("6-Algo Wagner-Fischer\n"); printf("0-Quitter l'application\n"); scanf("%d",&choix_menu); //Traitement menu while(choix_menu >= 1 && choix_menu <= 6) { switch(choix_menu) { case 1 : //Affichage noms + notes for(i=0;i<NMAX;i++) { printf("%d - Nom : %s Note : %lf \n",i,tableau_noms[i],tableau_notes[i]); } do { printf("Menu :\n\n"); printf("1-Afficher les noms et les notes\n"); printf("2-Modifier la note d'un eleve\n"); printf("3-Modifier le nom d'un eleve\n"); printf("4-Afficher la moyenne et l'ecart-type de la classe\n"); printf("5-Afficher les notes arrondies\n"); printf("6-Algo Wagner-Fischer\n"); printf("0-Quitter l'application\n"); scanf("%d",&choix_menu); }while(choix_menu < 0 || choix_menu > 6); break; case 2 : //Modification note do { for(i=0;i<NMAX;i++) { printf("%d - Nom : %s \n",i,tableau_noms[i]); } printf("Veuillez entrer le numero de l'eleve choisi\n"); scanf("%d",&choix_eleve); }while(choix_eleve < 0 || choix_eleve > 14); do { printf("Veuillez entrer la note de l'eleve %d :\n",choix_eleve); scanf("%lf",¬e_eleve); }while(note_eleve < 0 || note_eleve > 20); tableau_notes[choix_eleve] = note_eleve; do { printf("Menu :\n\n"); printf("1-Afficher les noms et les notes\n"); printf("2-Modifier la note d'un eleve\n"); printf("3-Modifier le nom d'un eleve\n"); printf("4-Afficher la moyenne et l'ecart-type de la classe\n"); printf("5-Afficher les notes arrondies\n"); printf("6-Algo Wagner-Fischer\n"); printf("0-Quitter l'application\n"); scanf("%d",&choix_menu); }while(choix_menu < 0 || choix_menu > 6); break; case 3 : //Modification nom do { for(i=0;i<NMAX;i++) { printf("%d - Nom : %s \n",i,tableau_noms[i]); } printf("Veuillez entrer le numero de l'eleve choisi\n"); scanf("%d",&choix_eleve); }while(choix_eleve < 0 || choix_eleve > 14); printf("Veuillez entrer le nouveau nom de l'eleve %d\n",choix_eleve); scanf("%s",tableau_noms[choix_eleve]); do { printf("Menu :\n\n"); printf("1-Afficher les noms et les notes\n"); printf("2-Modifier la note d'un eleve\n"); printf("3-Modifier le nom d'un eleve\n"); printf("4-Afficher la moyenne et l'ecart-type de la classe\n"); printf("5-Afficher les notes arrondies\n"); printf("6-Algo Wagner-Fischer\n"); printf("0-Quitter l'application\n"); scanf("%d",&choix_menu); }while(choix_menu < 0 || choix_menu > 6); break; case 4 : //Affichage moyenne + ecart-type //Moyenne for(i=0;i<NMAX;i++) { somme_notes += tableau_notes[i]; } moyenne_notes = somme_notes/NMAX; printf("Moyenne de la classe : %lf\n",moyenne_notes); //Ecart-type for(i=0;i<NMAX;i++) { somme_diff_carrees += ((tableau_notes[i] - moyenne_notes) * (tableau_notes[i] - moyenne_notes)); //Somme_diff : note - moyenne } ecart_type = sqrt((somme_diff_carrees/NMAX)); //Racine carré de la somme de diff_carre / NMAX printf("Ecart-type de la classe : %lf\n",ecart_type); //Menu do { printf("Menu :\n\n"); printf("1-Afficher les noms et les notes\n"); printf("2-Modifier la note d'un eleve\n"); printf("3-Modifier le nom d'un eleve\n"); printf("4-Afficher la moyenne et l'ecart-type de la classe\n"); printf("5-Afficher les notes arrondies\n"); printf("6-Algo Wagner-Fischer\n"); printf("0-Quitter l'application\n"); scanf("%d",&choix_menu); }while(choix_menu < 0 || choix_menu > 6); break; case 5 : //Arrondis des notes do { printf("Quel arrondi souhaitez-vous ?\n"); printf("1 - au point\n"); printf("2 - au demi-point\n"); printf("3 - au quart de point\n"); scanf("%d",&choix_arrondi); }while(choix_arrondi < 1 || choix_arrondi > 3); do { for(i=0;i<NMAX;i++) { printf("%d - Nom : %s \n",i,tableau_noms[i]); } printf("Veuillez entrer le numero de l'eleve choisi\n"); scanf("%d",&choix_eleve); }while(choix_eleve < 0 || choix_eleve > 14); switch(choix_arrondi) { case 1 : //Arrondi à l'entier de tableau_notes[choix_eleve] printf( "%d \n",(int)arrondi(tableau_notes[choix_eleve],1)); break; case 2 : //Arrondi au demi point de tableau_notes[choix_eleve] printf( "%5.2lf \n",(double)arrondi((int)tableau_notes[choix_eleve],2)); break; case 3 : //Arrondi au quart de point de tableau_notes[choix_eleve] printf( "%5.2lf \n",(double)arrondi((int)tableau_notes[choix_eleve],4)); break; } do { printf("Menu :\n\n"); printf("1-Afficher les noms et les notes\n"); printf("2-Modifier la note d'un eleve\n"); printf("3-Modifier le nom d'un eleve\n"); printf("4-Afficher la moyenne et l'ecart-type de la classe\n"); printf("5-Afficher les notes arrondies\n"); printf("6-Algo Wagner-Fischer\n"); printf("0-Quitter l'application\n"); scanf("%d",&choix_menu); }while(choix_menu < 0 || choix_menu > 6); break; case 6 : for(i=0;i<NMAX;i++) { printf("%d - Nom : %s \n",i,tableau_noms[i]); } printf("Veuillez taper un nom \n"); scanf("%s",nom_eleve); for(i=0; i<NMAX; i++) { int a, b ,x; int n = strlen(nom_eleve); int m = strlen(tableau_noms[i]); int m1, m2, m3, min; int tableau[n+1][m+1]; tableau[0][0] = 0; for(a=1;a<=n;a++) { tableau[a][0] = tableau[a-1][0] + 1; } for(b=1; b<=m ;b++) { tableau[0][b] = tableau[0][b-1] + 1; } for(a=1;a<=n;a++) { for(b=1;b<=m;b++) { if(nom_eleve[b-1] == tableau_noms[i][a-1]) { x = 0; } else { x = 1; } m1 = tableau[a-1][b-1] + x; m2 = tableau[a-1][b] + 1; m3 = tableau[a][b-1] + 1; min = m1; if(m2 < m1) { min = m2; } if(m3 < min) { min = m3; } tableau[a][b] = min; } } ecart[i] = tableau[n][m]; } //Recherche du plus proche ecartmin = ecart[0]; nom_proche = 0; for(i=1;i<NMAX;i++) { if(ecart[i] < ecartmin) { ecartmin = ecart[i]; nom_proche = i; } } //Affichage printf("Le nom le plus proche de %s est : %s \n",nom_eleve,tableau_noms[nom_proche]); do { printf("Menu :\n\n"); printf("1-Afficher les noms et les notes\n"); printf("2-Modifier la note d'un eleve\n"); printf("3-Modifier le nom d'un eleve\n"); printf("4-Afficher la moyenne et l'ecart-type de la classe\n"); printf("5-Afficher les notes arrondies\n"); printf("6-Algo Wagner-Fischer\n"); printf("0-Quitter l'application\n"); scanf("%d",&choix_menu); }while(choix_menu < 0 || choix_menu > 6); break; } } return 0; }
/* ==================================== */ int32_t lbarycentre(struct xvimage * image1, int32_t connex) /* ==================================== */ { int32_t i, j; uint8_t *F; int32_t rs, cs, N; struct xvimage *label; int32_t *LABEL; /* pour les labels des composantes connexes */ int32_t nblabels; double *bxx; /* pour les tables de barycentres par composantes */ double *byy; int32_t *surf; int32_t lab; if (depth(image1) != 1) { fprintf(stderr, "lbarycentre: cette version ne traite pas les images volumiques\n"); return 0; } if ((connex != 4) && (connex != 8)) { fprintf(stderr, "lbarycentre: mauvaise connexite (%d)\n", connex); return 0; } rs = image1->row_size; cs = image1->col_size; N = rs * cs; F = UCHARDATA(image1); label = allocimage(NULL, rs, cs, 1, VFF_TYP_4_BYTE); LABEL = SLONGDATA(label); if (! llabelextrema(image1, connex, LABMAX, label, &nblabels)) { fprintf(stderr, "lbarycentre: llabelextrema failed\n"); return 0; } bxx = (double *)calloc(1,nblabels * sizeof(double)); byy = (double *)calloc(1,nblabels * sizeof(double)); surf = (int32_t *)calloc(1,nblabels * sizeof(int32_t)); if ((bxx == NULL) || (byy == NULL) || (surf == NULL)) { fprintf(stderr, "lbarycentre: malloc failed\n"); return 0; } /* ---------------------------------------------------------- */ /* calcul des isobarycentres par composante */ /* ---------------------------------------------------------- */ for (i = 0; i < nblabels; i++) { bxx[i] = 0.0; byy[i] = 0.0; surf[i] = 0; } for (j = 0; j < cs; j++) for (i = 0; i < rs; i++) { lab = LABEL[j * rs + i] - 1; /* les valeurs des labels sont entre 1 et nblabels */ if (F[j * rs + i] != 0) { surf[lab] += 1; bxx[lab] += (double)i; byy[lab] += (double)j; } else surf[lab] = -1; /* marque la composante "fond" */ } #ifdef DEBUG printf("%d\n", nblabels-1); #endif for (i = 0; i < nblabels-1; i++) if (surf[i] != -1) { bxx[i] = bxx[i] / surf[i]; byy[i] = byy[i] / surf[i]; #ifdef DEBUG printf("%g %g\n", bxx[i], byy[i]); #endif } /* ---------------------------------------------------------- */ /* marque l'emplacement approximatif des barycentres dans l'image */ /* ---------------------------------------------------------- */ for (j = 0; j < N; j++) F[j] = 0; for (i = 0; i < nblabels-1; i++) if (surf[i] != -1) { F[(int32_t)(arrondi(byy[i])) * rs + arrondi(bxx[i])] = NDG_MAX; } freeimage(label); /* free(bxx); free(byy); free(surf); */ return 1; } /* lbarycentre() */
/* ==================================== */ int32_t lbarycentrelab(struct xvimage * imagelab) /* ==================================== */ { int32_t i, j; int32_t *F; int32_t rs, cs, N; int32_t nblabels; double *bxx; /* pour les tables de barycentres par composantes */ double *byy; int32_t *surf; int32_t lab; if (depth(imagelab) != 1) { fprintf(stderr, "lbarycentre: cette version ne traite pas les images volumiques\n"); return 0; } if (datatype(imagelab) != VFF_TYP_4_BYTE) { fprintf(stderr, "lbarycentrelab: l'image doit etre de type int32_t\n"); return 0; } rs = imagelab->row_size; cs = imagelab->col_size; N = rs * cs; F = SLONGDATA(imagelab); nblabels = 0; for (j = 0; j < N; j++) if (F[j] > nblabels ) nblabels = F[j]; bxx = (double *)calloc(1,nblabels * sizeof(double)); byy = (double *)calloc(1,nblabels * sizeof(double)); surf = (int32_t *)calloc(1,nblabels * sizeof(int32_t)); if ((bxx == NULL) || (byy == NULL) || (surf == NULL)) { fprintf(stderr, "lbarycentre: malloc failed\n"); return 0; } /* ---------------------------------------------------------- */ /* calcul des isobarycentres par region (sauf fond) */ /* ---------------------------------------------------------- */ for (i = 0; i < nblabels; i++) { bxx[i] = 0.0; byy[i] = 0.0; surf[i] = 0; } for (j = 0; j < cs; j++) for (i = 0; i < rs; i++) { if (F[j * rs + i] != 0) { lab = F[j * rs + i] - 1; /* les valeurs des labels sont entre 1 et nblabels */ surf[lab] += 1; bxx[lab] += (double)i; byy[lab] += (double)j; } } #ifdef DEBUG printf("%d\n", nblabels); #endif for (i = 0; i < nblabels; i++) { bxx[i] = bxx[i] / surf[i]; byy[i] = byy[i] / surf[i]; #ifdef DEBUG printf("%g %g\n", bxx[i], byy[i]); #endif } /* ---------------------------------------------------------- */ /* marque l'emplacement approximatif des barycentres dans l'image */ /* ---------------------------------------------------------- */ for (j = 0; j < N; j++) F[j] = 0; for (i = 0; i < nblabels; i++) F[(int32_t)(arrondi(byy[i])) * rs + arrondi(bxx[i])] = NDG_MAX; free(bxx); free(byy); free(surf); return 1; } /* lbarycentrelab() */