void print_map(t_info *s) { t_point p1; t_point p2; while (s->y < s->x_lines) { while (s->x < s->y_lines) { p1 = calcul(s->x, s->y, s->tab[s->y][s->x], s); s->x++; init_color(s, s->tab[s->y][s->x]); if (s->x < s->y_lines) { p2 = calcul(s->x, s->y, s->tab[s->y][s->x], s); print_trace(p1, p2, s); } if (s->y < s->x_lines - 1) { p2 = calcul(s->x - 1, s->y + 1, s->tab[s->y + 1][s->x - 1], s); print_trace(p1, p2, s); } } s->x = 0; s->y++; } }
int get_total(int *tab_nbr, int *tab_op, int count[]) { int i; int total; i = 0; while (i < count[1]) { if (rank(tab_op[i]) == 2) { tab_nbr[i] = calcul(tab_nbr[i], tab_nbr[i + 1], tab_op[i]); tab_nbr[i + 1] = 0; tab_op[i] = fuck_the_police('+'); } i++; } total = tab_nbr[0]; i = 0; while (i < count[1]) { total = calcul(total, tab_nbr[i + 1], tab_op[i]); i++; } return (total); }
int haar_feat(int width, int heigh, int II[width][heigh], struct vector* vect_val_feat, size_t size_FD, size_t x, size_t y) { int nb_feat = 0; int width_rec, height_rec, add_width, add_height; for(int type_feat=1; type_feat <= 5; type_feat++) // numéro de la feature { type_advance(&width_rec, &height_rec, &add_width, &add_height, type_feat); for(int w = width_rec; w<(int)size_FD; w++) // largeur de la feature { for(int h = height_rec; h<(int)size_FD; h++) // hauteur de la feature { for(int pos_featx=0; (pos_featx+ w - (int)x) < (int)size_FD; pos_featx++) // position de la feature dans le carré en x { for(int pos_featy=0; (pos_featy + h - (int)y) <(int)size_FD; pos_featy++) // position de la feature dans le carré en y { int result = calcul(width, heigh, II, type_feat, pos_featx,pos_featy, w, h); vector_push_back(vect_val_feat, result); nb_feat++; } } } } } return nb_feat; }
int main (void) {/* Exemple illustratif */ char a[] = "2 *3+8*2*4-8*4*2+8*(-9)*(-7)-8*(-10)*5-9*(-7)*(-9)*11+(-2)*3+5555"; printf ("%s =\n%d\n", a, calcul (a)); return 0; }
// Alloue un block de taille "size" dans le heap et renvoi son adresse // Lors du premier appel, il initialise la taille du heap de la taille donnée en paramètre // Si le heap est trop petit, la methode renvoi NULL. void *mymalloc(size_t size) { size = calcul(size); // On verifie qu'on est bien sur un multiple de 32 bits if(first == NULL) { //Lors du premier appel, on initialise le heap first = (header *)sbrk(size); end_heap = sbrk(0); first->size = size+4; first->zero = 0; first->alloc = 0; return (void *) first; } //Navigation dans le heap header *nav = first; int count = 0; header *start = NULL; while((size_t *)nav < end_heap) { if(count == 0) start = nav; if(nav->alloc == 1) count = 0; else { count += nav->size; if(count >= size) { insert(start, count, size); return (void *) start + 4; } } nav += nav->size / 4; // On déplace nav sur le header suivant } return NULL;// Echec de l'allocation }
int gere_mouse(int button, int x, int y, t_mlx **p) { int i; int j; t_mlx *tmp; i = (int) ((x - WINX_RAY) / (200 / my_strlen((*p)->tab[0]))); j = (int) ((y - WINY_RAY) / (200 / my_strlen((*p)->tab[0]))); if (button == 1 && i < (my_strlen((*p)->tab[0]) - 1) && j < (my_strlen((*p)->tab[0]) - 2) && i > 0 && j > 0) { if ((*p)->tab[j][i] == '1') (*p)->tab[j][i] = '0'; else if ((*p)->tab[j][i] == '0') (*p)->tab[j][i] = '1'; tmp = (*p); tmp = put_sol_and_sky(tmp); calcul(&tmp); cadre(&tmp); map(&tmp); viseur(&tmp); weapon(&tmp); pos_map(&tmp); (*p) = tmp; mlx_put_image_to_window(tmp->mlx_ptr, tmp->win_ptr, tmp->img, 0, 0); } return (0); }
void FenPrincipale::initCalc(QString ref) { QSqlQuery query; query.prepare ("SELECT numeroStation FROM mesures WHERE matricule = ?"); query.addBindValue(ref); query.exec(); QString stationSta; while (query.next()) { stationSta = query.value(0).toString(); if(stationDepart==stationSta) { referenceStationdebut.append(ref); } if(stationArrivee==stationSta) { referenceStationfin.append(ref); } // if(!(stationArrivee==stationSta) && !(stationDepart==stationSta) ) // { // tex.append(" cette référence "+ref+" n' est pas visée pas vos station"); // } } if(!referenceStationdebut.empty() && !referenceStationfin.empty()) { tex.append("nombre de référence suffisante pour le calcul"); calcul (); } }
void *mycalloc(size_t size) { size = calcul(size); // On verifie qu'on est bien sur un multiple de 32 bits size_t *ptr = (size_t *) mymalloc(size); if(ptr == NULL) return NULL; *ptr = 0; return ptr; }
int cmp(const void *data1, const void *data2) { const char *str1 = *(const char **)&data1; const char *str2 = *(const char **)&data2; return calcul(data1, data2); }
int main(int argc, char **argv) { int h=0; saisie(&h); calcul(h); return 0; }
int main() { double x; printf("Entrer une valeur pour le reel x : "); scanf("%lg%*c", &x); /* &x signifie adresse de x */ printf("calcul( %.1f ) = %.1f\n", x, calcul(x)); /* utilisation de la fonction calcul(x)*/ return 0; }
Ennemi::Ennemi(std::vector<QPoint>* unChemin, int unType, QObject *parent) : QObject(parent), sonChemin(unChemin), sonType(unType), sonEtapeChemin(0), sonDegat(0), aSupprimer(false) { saPosition = QPointF((*sonChemin)[0].x()*TAILLE_ENNEMI + (WIDTH-32*TAILLE_GRILLE)/2, (*sonChemin)[0].y()*TAILLE_ENNEMI); sonIncrement = QPointF(); type(); calcul((*sonChemin)[1]); sonPas = 0; }
void Ennemi::deplace() { saPosition += sonIncrement; sonPas++; if (sonPas == sonNombrePas) { if (sonEtapeChemin+2 < sonChemin->size()) { calcul((*sonChemin)[++sonEtapeChemin + 1]); sonPas = 0; } else { sonIncrement = QPointF(0, 0); aSupprimer = true; } } }
int gere_key(int keycode, t_mlx **s) { int i; t_mlx *tmp; i = 0; tmp = (*s); reduckey(keycode, &tmp); reduckeytwo(keycode, &tmp); tmp = put_sol_and_sky(tmp); calcul(&tmp); cadre(&tmp); map(&tmp); viseur(&tmp); weapon(&tmp); pos_map(&tmp); (*s) = tmp; mlx_put_image_to_window(tmp->mlx_ptr, tmp->win_ptr, tmp->img, 0, 0); return (0); }
int main(int argc,char * argv[]) { int res; char chaine[10]; double a,b,delta; scanf("%s",chaine); res = identification(chaine); /*seulement si la fonction est reconnue*/ if(res!=-1) { printf("intervalle min\n"); scanf("%lf",&a); printf("intervalle max\n"); scanf("%lf",&b); printf("delta\n"); scanf("%lf",&delta); calcul(a,b,delta,res); } else printf("erreur lors de la saisie de la fonction \n"); return(EXIT_SUCCESS); }
int my_get_nbr(char *str) { int i; int lenght; int nb; int menos; menos = 1; nb = 0; i = 0; lenght = 0; while (str[i] == '+' || str[i] == '-') { if (str[i] == '-') menos = menos * -1; i = i + 1; } lenght = i; nb = calcul(i, lenght, str, nb); return (nb * menos); }
void gaussjordan(double **a, int n) { // CREAREA MATRICEI int i, j, k, m= 2*n; double **b=(double **) malloc(n * sizeof(double*)); for (i=0; i<n; i++) b[i]=(double *) malloc(m * sizeof(double)); for (i=0; i<n; i++) { for (k=0; k<n; k++) b[i][k]=a[i][k]; for (j=n; j<m; j++) if (i+n==j) b[i][j]=1; else b[i][j]=0; } for (i=0; i<n; i++) calcul(b, n, i); afisare(b, n); }
void Pile::parsage(QString s) { QStringList list = s.split(" "); foreach (const QString &val, list) { if(val != "+" && val != "-" && val != "*" && val != "/" && val != " ") { //Complexe if(val.contains('$')) { std::cout << "\n"<< val.toStdString() << " C'est un complexe"; double a = val.mid(0, val.indexOf('$')).toDouble(); double b = val.mid(val.indexOf(('$'))+1).toDouble(); push(new Complexe(a, b)); } //Rationnel else if(val.contains('/')) { std::cout << "\n"<< val.toStdString() << " C'est un rationnel"; double a = val.mid(0, val.indexOf('/')).toDouble(); double b = val.mid(val.indexOf(('/'))+1).toDouble(); push(new Rationnel(a, b)); } //Reel else if(val.contains('.')) { std::cout << "\n"<< val.toStdString() << " C'est un reel"; push(new Reel(val.toDouble())); } //Entier else { std::cout << "\n"<< val.toStdString() << " C'est un entier"; push(new Entier(val.toInt())); } } else { calcul(val); } } }
int a_DrawGLScene(GLfloat globtime) { if (init) {a_InitGL();init=false;} a_time=2.0+globtime*.01; // MOTION if (a_time<10.0f) { a_zeta=25.0f*cos((3.1415f/2.0f)*(1+a_time/10.0f)); a_xrot=-45.0f*cos((3.1415f/2.0f)*(1+a_time/10.0f)); } else { a_xrot=45.0f-30.0f*sin((a_time-10.0f)/20.0f)*sin((a_time-10.0f)/20.0f); a_zrot=360.0f*sin((a_time-10.0f)/50.0f)*sin((a_time-10.0f)/50.0f); a_zeta=-25.0f+5.0f*sin((a_time-10.0f)/10.0f)*sin((a_time-10.0f)/10.0f); } if (a_time>90.0f) a_zeta=-20.0f+10.0f*(1.0f-cos((a_time-90.0f)*3.1415f/10.0f)); if (a_zeta>-2.5f) a_zeta=-2.5f; a_factor=(a_xrot/.5+20)/50.0f; if (a_mod>0.5f) a_mod=1.0-.03f*(a_time-a_gets); else a_mod=.5-0.015f*(a_time-a_gets); if (a_mod<0.0f) a_mod=0.0f; glDisable(GL_TEXTURE_2D); glLoadIdentity(); glTranslatef(0,0,-5); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); if (a_zeta>-20.0f) glColor4f(0,0,0,-(a_zeta+20.0f)/40.0f+.25f); else glColor4f(0,0,0,.25f); glDisable(GL_LIGHTING); glEnable(GL_BLEND); a_drawquad(6); if (first)//a_time<3.01f) { glDisable(GL_BLEND); glColor4ub(255,255,255,255); a_drawquad(6); glEnable(GL_BLEND); first=false; } if (a_time>95.0f) { glColor4f(1.0f,1.0f,1.0f,(a_time-95.0f)/1.5f); a_drawquad(6); } glEnable(GL_TEXTURE_2D); glBlendFunc(GL_SRC_ALPHA,GL_ONE); glEnable(GL_LIGHTING); glLoadIdentity(); if (a_time>30.0) glTranslatef(0.0f,1.5f,a_zeta); else glTranslatef(0.0f,.5+.5f*(1.0-cos((a_time-2.0f)*3.1415f/28.0f)),a_zeta); glRotatef(-90+2*a_xrot,1.0f,0.0f,0.0f); glRotatef(a_yrot,0.0f,1.0f,0.0f); glRotatef(a_zrot,0.0f,0.0f,1.0f); for (int a_xx=0; a_xx<size; a_xx++) for (int a_yy=0; a_yy<size; a_yy++) { double raggio; double value; double arg; if (quantos>0.0f) { raggio=.5*sqrt((double)((a_points[a_xx][a_yy][0]-a_points[size/2][size/2][0])*(a_points[a_xx][a_yy][0]-a_points[size/2][size/2][0]) +(a_points[a_xx][a_yy][1]-a_points[size/2][size/2][1])*(a_points[a_xx][a_yy][1]-a_points[size/2][size/2][1]))); arg=2.5*raggio-quantos*2+30; if ((arg<-2*6.28)||(arg>4*6.28)) value=0; else value=.05*sin(arg)*sin(arg)*exp(arg/7); a_points[a_xx][a_yy][2]=value; } if (quantos>10) { raggio=.5*sqrt((double)((a_points[a_xx][a_yy][0]-a_points[48][48][0])*(a_points[a_xx][a_yy][0]-a_points[48][48][0]) +(a_points[a_xx][a_yy][1]-a_points[48][48][1])*(a_points[a_xx][a_yy][1]-a_points[48][48][1]))); arg=2.5*raggio-(quantos-10)*3+30; if ((arg<-2*6.28)||(arg>4*6.28)) value=0; else value=.025*sin(arg)*sin(arg)*exp(arg/7); a_points[a_xx][a_yy][2]+=value; } if (quantos>24) { raggio=.5*sqrt((double)((a_points[a_xx][a_yy][0]-a_points[50][22][0])*(a_points[a_xx][a_yy][0]-a_points[50][22][0]) +(a_points[a_xx][a_yy][1]-a_points[50][22][1])*(a_points[a_xx][a_yy][1]-a_points[50][22][1]))); arg=3.0*raggio-(quantos-24)*4+30; if ((arg<-2*6.28)||(arg>4*6.28)) value=0; else value=.02*sin(arg)*sin(arg)*exp(arg/7); a_points[a_xx][a_yy][2]+=value; } if (quantos>32) { raggio=.5*sqrt((double)((a_points[a_xx][a_yy][0]-a_points[32][32][0])*(a_points[a_xx][a_yy][0]-a_points[32][32][0]) +(a_points[a_xx][a_yy][1]-a_points[32][32][1])*(a_points[a_xx][a_yy][1]-a_points[32][32][1]))); arg=2.5*raggio-(quantos-32)*3+30; if ((arg<0*6.28)||(arg>4*6.28)) value=0; else value=.035*sin(arg)*sin(arg)*exp(arg/7); a_points[a_xx][a_yy][2]+=value; } calcul(a_xx,a_yy); } if (a_time>34.0f) quantos=2.0+(a_time-34.0)/1.5f; a_Text[1].Use(); glMaterialfv(GL_FRONT,GL_DIFFUSE,a_diffuse); glMaterialfv(GL_FRONT,GL_AMBIENT,a_ambient); glMaterialfv(GL_FRONT,GL_SPECULAR,a_specular); glMaterialf(GL_FRONT,GL_SHININESS,10.0f); // glPushMatrix(); // what for? //glDisable(GL_LIGHTING); glScalef(-1,-1,1); glColor4f(1,1,1,1); // glPushMatrix(); // what for? glTranslatef(-12.8,12.8,0); glNormal3f(0,0,1); for (int cc=0; cc<1; cc++) { if ((cc%2)==0) { glScalef(1,-1,1); glFrontFace(GL_CCW); } else { glScalef(-1,1,1); glFrontFace(GL_CW); } glBegin(GL_QUADS); for( a_x = 0; a_x < size-1; a_x++ ) { if (1)//a_x%2==0) { for( a_y = 0; a_y < size-1; a_y++ ) { glTexCoord2fv(newcoord[a_x][a_y]); //glNormal3f(-norm[a_x][a_y][0],-norm[a_x][a_y][1],-norm[a_x][a_y][2]); glVertex3fv( a_points[a_x][a_y]); glTexCoord2fv(newcoord[a_x][a_y+1]); //glNormal3f(-norm[a_x][a_y+1][0],-norm[a_x][a_y+1][1],-norm[a_x][a_y+1][2]); glVertex3fv( a_points[a_x][a_y+1]); glTexCoord2fv(newcoord[a_x+1][a_y+1]); //glNormal3f(-norm[a_x+1][a_y+1][0],-norm[a_x+1][a_y+1][1],-norm[a_x+1][a_y+1][2]); glVertex3fv( a_points[a_x+1][a_y+1]); glTexCoord2fv(newcoord[a_x+1][a_y]); //glNormal3f(-norm[a_x+1][a_y][0],-norm[a_x+1][a_y][1],-norm[a_x+1][a_y][2]); glVertex3fv( a_points[a_x+1][a_y]); } } else { for(a_y=size-2;a_y>=0;a_y--) { glTexCoord2fv(newcoord[a_x][a_y]); glVertex3fv( a_points[a_x][a_y]); glTexCoord2fv(newcoord[a_x][a_y+1]); glVertex3fv( a_points[a_x][a_y+1]); glTexCoord2fv(newcoord[a_x+1][a_y+1]); glVertex3fv( a_points[a_x+1][a_y+1]); glTexCoord2fv(newcoord[a_x+1][a_y]); glVertex3fv( a_points[a_x+1][a_y]); } } } glEnd(); } // glPushMatrix(); // what for? glDisable(GL_DEPTH_TEST); // glPopMatrix(); // what for? glDisable(GL_LIGHTING); a_Text[4].Use(); a_counter=a_time*10.0f; for (int p=0; p<a_num; p++) { GLfloat time; time=a_time*500-2.0-parts[p].time;//******************************************************** glPushMatrix(); glTranslatef(parts[p].a_x,parts[p].a_y,parts[p].z); glRotatef(-a_zrot,0,0,1); glRotatef(90-2.0f*a_xrot,1,0,0); glRotatef(parts[p].angle-135,0,0,1); glTranslatef(parts[p].a_mod,0,0); if (a_time<20.0f) glColor4ub(parts[p].r,parts[p].g,parts[p].b,(unsigned char)((parts[p].a-(int)((GLfloat)time/8.0f))*(a_time-6.0)/14.0)); else glColor4ub(parts[p].r,parts[p].g,parts[p].b,(unsigned char)(parts[p].a-(int)((GLfloat)time/8.0f))); if (a_time>6.0) a_drawquad(1.125f-.75*p/a_num); parts[p].a_mod=parts[p].speed*time/35.0f; parts[p].speed=parts[p].speedlim-time/2500000.0f; if (parts[p].speed<0.005f) parts[p].speed=0.005f; if (parts[p].a-(int)((GLfloat)time/8.0f)<3) { parts[p].a_x=10.0f*sin(a_counter*4.0f*3.14f/360.0f); parts[p].a_y=0.0f+10.0f*sin(a_counter*2*3.14/360.0); parts[p].z=a_Sinus[2]=3.0f-2.5f*cos(a_counter*8.0f*3.14f/360.0f); parts[p].r=128+rand()%128; parts[p].g=128+rand()%128; parts[p].b=128+rand()%128; parts[p].a=rand()%255; parts[p].a_mod=0.0f; parts[p].speedlim=.005+.0001*((GLfloat)(rand()%1000)); parts[p].speed=parts[p].speedlim; parts[p].time=(int)(a_time*500-2);//********************************* } glPopMatrix(); } glPushMatrix(); a_Sinus[0]=10.0f*sin(a_counter*4.0f*3.14f/360.0f); a_Sinus[1]=0.0f+10.0f*sin(a_counter*2*3.14/360.0); a_Sinus[2]=3.0f-2.5f*cos(a_counter*8.0f*3.14f/360.0f); glTranslatef(a_Sinus[0],a_Sinus[1],a_Sinus[2]); glRotatef(-a_zrot,0,0,1); glRotatef(90-2*a_xrot,1,0,0); glColor4ub(255,128,255,255); glColor4ub(128,192,255,255); glRotatef(2*a_counter,0,0,1); a_LightPosition[0]=0;//a_Sinus[0];//10.0f*sin(a_counter*4.0f*3.14f/360.0f); a_LightPosition[1]=0;//a_Sinus[1];//0.0f+10.0f*sin(a_counter*2*3.14/360.0); a_LightPosition[2]=0;//a_Sinus[2];//3.0f-2.5f*cos(a_counter*8.0f*3.14f/360.0f); glEnable(GL_LIGHTING); glLightfv(GL_LIGHT1,GL_POSITION,a_LightPosition); glDisable(GL_LIGHTING); a_Text[2].Use(); a_drawquad(1.0f+sin(a_counter*12.0f*3.1415f/360.0)+3.1415f/2.0f); a_Text[3].Use(); a_drawquad(3.0f+2*sin(a_counter*6.0f*3.1415f/360.0)); glPopMatrix(); /* a_LightPosition[0]=10.0f*sin(a_counter*4.0f*3.14f/360.0f); a_LightPosition[1]=0.0f+10.0f*sin(a_counter*2*3.14/360.0); a_LightPosition[2]=3.0f-2.5f*cos(a_counter*8.0f*3.14f/360.0f); // glTranslatef(a_LightPosition[0],a_LightPosition[1],a_LightPosition[2]); glEnable(GL_LIGHTING); glLightfv(GL_LIGHT1,GL_POSITION,a_LightPosition); */ // a_time=2.0f+(1)/500.0f;//************************************ if (a_time>96.0f) { //****************************** FINISH //a_Clean(); return false; } glutSwapBuffers(); return true; }
void testCalcul() { FILE* fichier = fopen("record_test_calcul.dat", "r"); FILE* fichier_resultat = fopen("record_test_calcul_resultat.dat", "w+"); if( fichier == NULL) { printf("Impossible d'ouvrir le fichier record_test_calcul.dat car il n'existe pas\n"); } else { int *tab=NULL; struct tab4 oxy; struct pointeurs *AC_R=malloc(4*sizeof(int)+4*sizeof(float)); struct pointeurs *AC_IR=malloc(4*sizeof(int)+4*sizeof(float)); AC_R->compteurPrecedent; AC_R->compteur=0; AC_R->passageZero=0; AC_R->ena_compteur=0; AC_R->maximum=0; AC_R->minimum=0; AC_R->maximum_prec=0; AC_R->minimum_prec=0; AC_IR->compteurPrecedent=0; AC_IR->compteur=0; AC_IR->passageZero=0; AC_IR->ena_compteur=0; AC_IR->maximum=0; AC_IR->minimum=0; AC_IR->maximum_prec=0; AC_IR->minimum_prec=0; while(fscanf(fichier, "%f,%f,%f,%f", &oxy.ACr_actuel, &oxy.DCr, &oxy.ACir_actuel, &oxy.DCir) != EOF) { Sleep(2); printf("Valeurs lues=%f,%f,%f,%f\n", oxy.ACr_actuel, oxy.DCr, oxy.ACir_actuel, oxy.DCir); tab=calcul(oxy,AC_R,AC_IR); oxy.ACr_prec=oxy.ACr_actuel; oxy.ACir_prec=oxy.ACir_actuel; printf("spo2=%d, bpm=%d\n",tab[0],tab[1]); fprintf(fichier_resultat,"spo2=%d, bpm=%d\n\n",tab[0],tab[1]); } } printf("Appuyer sur une touche pour revenir au menu\n"); getch(); fclose(fichier); fclose(fichier_resultat); system("cls"); topMenu(menu()); }
//------------main---------------------------------------------------------------------------------------------------------- void programmeEntier() { int n=0; int fin=0; int mode=choixMode(); struct maillon *adressACr_brut= NULL; struct maillon *adressACir_brut= NULL; float *ac_fir=calloc(2,sizeof(float)); float *ac_fir_iir=calloc(2,sizeof(float)); float *ac_fir_prec=calloc(2,sizeof(float)); float *ac_fir_iir_prec=calloc(2,sizeof(float)); struct tab4 oxy; struct pointeurs *AC_R=malloc(4*sizeof(int)+4*sizeof(float)); struct pointeurs *AC_IR=malloc(4*sizeof(int)+4*sizeof(float)); AC_R->compteurPrecedent; AC_R->compteur=0; AC_R->passageZero=0; AC_R->ena_compteur=0; AC_R->maximum=0; AC_R->minimum=0; AC_R->maximum_prec=0; AC_R->minimum_prec=0; AC_IR->compteurPrecedent=0; AC_IR->compteur=0; AC_IR->passageZero=0; AC_IR->ena_compteur=0; AC_IR->maximum=0; AC_IR->minimum=0; AC_IR->maximum_prec=0; AC_IR->minimum_prec=0; float *dataBrut; //char *data_precedent=calloc(21, sizeof(char)); FILE* fichier; FILE* fichier_c = fopen("test_c.dat", "w+"); FILE* fichier_f1 = fopen("test_f1.dat", "w+"); FILE* fichier_f2 = fopen("test_f2.dat", "w+"); if(mode==1) { fichier = fopen("record1.dat", "r"); } else if(mode ==2) { flux=FT_Open; } remove(".verrouData");//on supprime le fichier verroudata pour que l'interface graphique puisse lire le fichier data.txt while(fin != 1) { printf("%d\n",n); // dataBrut = Lecture(fichier , mode); fprintf (fichier_c,"%d,%d,%d,%d\n\n",(int)dataBrut[0],(int)dataBrut[1],(int)dataBrut[2],(int)dataBrut[3]); if ((int)dataBrut[1]==9999) { fin =1; } // printf(" %f,%f,%f,%f\n", dataBrut[0],dataBrut[1],dataBrut[2],dataBrut[3]); adressACr_brut=insertMaillon(dataBrut[0],adressACr_brut,51);// a corriger 51 et pas 50 !!!! adressACir_brut=insertMaillon(dataBrut[2],adressACir_brut,51); ac_fir = FlitreFIR(adressACr_brut,adressACir_brut); fprintf (fichier_f1,"%d,%d,%d,%d\n\n",(int)ac_fir[0],(int)dataBrut[1],(int)ac_fir[1],(int)dataBrut[3]); ac_fir_iir = FlitreIIR(ac_fir,ac_fir_prec, ac_fir_iir_prec); fprintf (fichier_f2,"%d,%d,%d,%d\n\n",(int) ac_fir_iir [0],(int)dataBrut[1],(int) ac_fir_iir[1],(int)dataBrut[3]); ac_fir_iir_prec = ac_fir_iir ; ac_fir_prec = ac_fir; // printf(" %f\t %f\n",ac_fir_iir[0],ac_fir_iir[1]); oxy.DCr=dataBrut[1]; oxy.DCir=dataBrut[3]; oxy.ACir_actuel=ac_fir_iir[1]; oxy.ACr_actuel=ac_fir_iir[0]; affichage(calcul(oxy,AC_R,AC_IR)); oxy.ACr_prec=oxy.ACr_actuel; oxy.ACir_prec=oxy.ACir_actuel; // Sleep(2); n++; } printf(" Fini! \n Appuyer sur une touche pour revenir au menu\n"); getch(); system("cls"); topMenu(menu()); if(mode==1) { fclose(fichier); } fclose(fichier_c); fclose(fichier_f1); fclose(fichier_f2); //libération de la mémoire des pointeurs free(adressACir_brut); free(adressACr_brut); free(ac_fir); free(ac_fir_iir); free(ac_fir_prec); free(ac_fir_iir_prec); free(AC_R); free(AC_IR); }
int main(int argc, char** argv) { int n = 0, m = 0, i = 0, taille = 0; char v; NodePtr tab[50], node; do { printf("1- Saisir une expression\n2- Selectionner une expression\n"); scanf("%d", &n); switch (n) { case 1: if (taille < 50) { getchar(); node = saisie_expression(); if(node != NULL) { taille++; tab[taille]= node; affiche_expression(tab[taille]); } printf("\n\n"); } else printf("Erreur. Trop d'expressions ont ete saisies.\n"); break; case 2: if (taille > 0) { for (i = 1; i <= taille; i++) { printf("%d- ", i); affiche_expression(tab[i]); printf("\n"); } scanf("%d", &n); printf("\nFonctions a executer :\n" "1- Affichage pre-ordre\n" "2- Affichage in-ordre\n" "3- Affichage post-ordre\n" "4- Duplication\n" "5- Calcul\n" "6- Developpement\n" "7- Derivation\n" "8- Affichage\n" ); scanf("%d", &m); switch (m) { case 1: pre_ordre(tab[n]); printf("\n\n"); break; case 2: in_ordre(tab[n]); printf("\n\n"); break; case 3: post_ordre(tab[n]); printf("\n\n"); break; case 4: taille++; tab[taille] = clone(tab[n]); printf("Nouvelle expression generee.\n\n"); break; case 5: calcul(tab[n]); printf("\nResultat :\n"); affiche_expression(tab[n]); printf("\n\n"); break; case 6: developpement(tab[n]); printf("\nResultat :\n"); affiche_expression(tab[n]); printf("\n\n"); break; case 7: printf("\nSaisir la variable de derivation\n"); getchar(); scanf("%c", &v); derivation(tab[n], v); printf("\nResultat :\n"); affiche_expression(tab[n]); printf("\n\n"); break; case 8: affiche_expression(tab[n]); printf("\n\n"); break; } } else printf("Aucune expression n'a ete saisie.\n"); break; } } while (n > 0); for (i = 1; i <= taille; i++) liberer_noeud(tab[i]); return (EXIT_SUCCESS); }
int main (int argc, char * argv[]) { char expr[50]; double xmax,ymax; int x,y; int tab[400] = {0}; int choix; /*partie pour l'evaluation de la fonction*/ printf("-------------------------------\n"); printf("1°) lignes \n"); printf("2°) points \n"); printf("-------------------------------\n"); scanf("%d",&choix); getc(stdin); printf("Veuillez rentrer les tailles max de votre fenetre xmax,ymax \n"); scanf("%lf %lf",&xmax,&ymax); getc(stdin); printf("Veuillez rentrer l'expression desire\n"); fgets(expr,49,stdin); calcul(expr,xmax,ymax,tab); dpy = XOpenDisplay(0); if(!dpy) { printf("souci à l'ouverture de la fenetre \n"); exit(EXIT_FAILURE); } ecran = DefaultScreen(dpy); root = DefaultRootWindow(dpy); /* ------- Recup. couleur de l'avant plan et arriere plan ------------ */ bpx = BlackPixel(dpy,ecran); wpx = WhitePixel(dpy,ecran); /* ------- Creation de la fenetre: Epaiss 6 pixels, L 400 H 400 ------ */ win = XCreateSimpleWindow(dpy,root,0,0,400,400,6,wpx,bpx); XStoreName(dpy,win,"TP 7: Graphisme 3D sous X-Windows"); /* ------- Definition des evenements qui les concernent -------------- */ XSelectInput(dpy,win,ButtonPressMask | ButtonReleaseMask | Button1MotionMask | KeyPressMask | ExposureMask ); /*---------------------------------------------------------------------*/ XMapWindow(dpy,win); /* ------- Creation des contextes standards -------------------------- */ gcv.foreground = wpx; /* Contexte standard */ gcv.background = bpx; gcv.line_width = 1; gcv.function = GXcopy; gcmask = GCForeground | GCBackground | GCLineWidth | GCFunction; gcontext = XCreateGC(dpy,win,gcmask,&gcv); /* ------------------------------------------------------------------- */ while(!sortie) { XNextEvent(dpy,&ev); switch(ev.type) { case Expose : affich(expr,tab,choix); break; case KeyPress : sortie = 1; break; } } XCloseDisplay(dpy); return(EXIT_SUCCESS); }
int calculate_method::PWI_Compute(string input,string output,PWIConstTable *PWIconst) { int S0Index; //PWI read DicomInfo PWIinfo; cout<<"after sort"<<endl; getDcm *PWIcommon=new getDcm(input); //读取PWI原始信息 for(int i = 0 ;i < PWIconst->PSetNum ; i++) { for(int j = 0 ; j < PWIconst->PSliceNum ;j++) { PWIinfo.getInfo((PWIcommon->dir+"IM"+itos(i)+"-"+itos(j)).c_str()); PWIArray[TWO_D(i,j,PWIconst->PSliceNum)] = PWIinfo; } } PWIArray[TWO_D(0,0,PWIconst->PSetNum)].dataset->findAndGetUint16(DcmTagKey(0x0028,0x0010),PWIcommon->height); //读取图片高度 PWIArray[TWO_D(0,0,PWIconst->PSetNum)].dataset->findAndGetUint16(DcmTagKey(0x0028,0x0011),PWIcommon->width); //读取图片宽度 DicomInfo *s0 = new DicomInfo[PWIconst->PSliceNum]; for(int i = 0; i < PWIconst->PSliceNum; ++i) { s0[i].allocMemory( PWIcommon->height * PWIcommon->width); } S0Index = PWIconst->STDNum-1; //获取S0值 for(int i = 0;i < PWIconst->PSliceNum ; ++i) { for(int j = 0;j < PWIcommon->height; ++j) { for(int k = 0;k < PWIcommon->width;++k) { s0[i].PixelData[TWO_D(j,k,PWIcommon->width)] = PWIArray[TWO_D(S0Index,i,PWIconst->PSliceNum)].PixelData[TWO_D(j,k,PWIcommon->width)]; } } } //获取s0的均值 int signalnum,s0Sum = 0; _signal avg=0; for(int i = 0;i < PWIconst->PSliceNum ; ++i ) { signalnum=0; s0Sum = 0; for(int j = 0;j < PWIcommon->height; ++j) { for(int k = 0 ; k < PWIcommon->width; ++k) { if(s0[i].PixelData[TWO_D(j,k,PWIcommon->width)] != 0) { s0Sum += PWIArray[TWO_D(S0Index,i,PWIconst->PSliceNum)].PixelData[TWO_D(j,k,PWIcommon->width)]; signalnum++; } } } avg = ((_signal)s0Sum)/signalnum * 0.5; //过滤掉小于50%的点 mask ADC 600-2100!!!!! for(int k = 0;k < PWIcommon->height; ++k) { for(int l = 0;l < PWIcommon->width; ++l) { if(s0[i].PixelData[TWO_D(k,l,PWIcommon->width)]<avg) { s0[i].PixelData[TWO_D(k,l,PWIcommon->width)] = 0 ; } } } } //计算R2 for(int i = 0;i < PWIconst->PSetNum ; ++i) { for(int j = 0;j < PWIconst->PSliceNum; ++j) { for(int k = 0;k < PWIcommon->height; ++k) { for(int l = 0;l < PWIcommon->width; ++l) { //判断是否为过滤掉的点 if(s0[j].PixelData[TWO_D(k,l,PWIcommon->width)] != 0 ) { if(PWIArray[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)]!=0) { PWIArray[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)]=R2(s0[j].PixelData[TWO_D(k,l,PWIcommon->width)],PWIArray[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)],PWIconst->TE); }else { //当St值为0时的处理方法 PWIArray[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)]=R2(s0[j].PixelData[TWO_D(k,l,PWIcommon->width)],1,PWIconst->TE);//测试第二个参数!!!! } } else { //将过滤掉的点置为0 PWIArray[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)] = 0; } } } } } //get Position of AIF for(int i = 0;i < PWIconst->PSetNum ; ++i)//分配内存 { for(int j = 0;j < PWIconst->PSliceNum; ++j) { PWICav[TWO_D(i,j,PWIconst->PSliceNum)].allocMemory(PWIcommon->height*PWIcommon->width);//分配空间 PWICt[TWO_D(i,j,PWIconst->PSliceNum)].allocMemory(PWIcommon->height*PWIcommon->width); PWIRt[TWO_D(i,j,PWIconst->PSliceNum)].allocMemory(PWIcommon->height*PWIcommon->width); PWICav[TWO_D(i,j,PWIconst->PSliceNum)].time=PWIArray[TWO_D(i,j,PWIconst->PSliceNum)].time; } } int MRtype =1;// PWIconst->TType;//MRI类型 1.5T 或者 3.0T for(int i = 0 ;i < PWIconst->PSetNum; ++i) { for(int j = 0;j < PWIconst->PSliceNum;++j) { for(int k = 0;k < PWIcommon->height;++k) { for(int l = 0;l < PWIcommon->width;++l) { PWICt[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)]= Ct(PWIArray[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)],MRtype,PWIconst->x[MRtype][0]); } } } } //AIF Selection //get avg of Area DicomInfo * AreaAndCt = new DicomInfo[ PWIconst->PSliceNum ]; for(int j = 0 ; j < PWIconst->PSliceNum ; ++j) { AreaAndCt[j].allocMemory(PWIcommon->height*PWIcommon->width); for(int i =0 ; i < PWIcommon->height*PWIcommon->width ; ++i) { AreaAndCt[j].PixelData[i] = 0; } } double temArea = 0; int AllCurve = 0; _signal Area; _signal SecondOrderThreshold; int AIFtestZ; int AIFtestX; int AIFtestY; double testC = 0; double temC = 0; vector<double> AreaSet; _signal * DsFirstOrder = new _signal [PWIconst->PSetNum]; _signal * DsSecondOrder = new _signal [PWIconst->PSetNum]; for(int j = 10;j < 20; ++j) { for(int k = 0;k < PWIcommon->height*2/3; ++k) { for(int l = 0;l < PWIcommon->width; ++l) { if(s0[j].PixelData[TWO_D(k,l,PWIcommon->width)]==0) { continue; } AllCurve++; for(int i = PWIconst->STDNum-1;i < PWIconst->PSetNum-1 ; ++i) { AreaAndCt[j].PixelData[TWO_D(k,l,PWIcommon->width)] += PWIArray[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)]+PWIArray[TWO_D(i+1,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)]; } AreaSet.push_back(AreaAndCt[j].PixelData[TWO_D(k,l,PWIcommon->width)]); } } } sort(AreaSet.begin(),AreaSet.end()); Area = AreaSet[(int)(AllCurve*0.9)]; AreaSet.clear(); //Ct daoshu AllCurve = 0; for(int j = 10;j < 20; ++j) { for(int k = 0;k < PWIcommon->height*2/3; ++k) { for(int l = 0;l < PWIcommon->width; ++l) { if(s0[j].PixelData[TWO_D(k,l,PWIcommon->width)]==0||AreaAndCt[j].PixelData[TWO_D(k,l,PWIcommon->width)]<Area) { AreaAndCt[j].PixelData[TWO_D(k,l,PWIcommon->width)] = 0; continue; } ++AllCurve; for(int i = PWIconst->STDNum-1; i< PWIconst->PSetNum ; ++i) { DsSecondOrder[i] = PWIArray[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)]; } for(int i = PWIconst->STDNum-1;i < PWIconst->PSetNum ; ++i) { if(i==PWIconst->STDNum-1) { DsFirstOrder[i] = (-3*DsSecondOrder[i] + 4 * DsSecondOrder[i+1] - DsSecondOrder[i+2]); }else if(i == PWIconst->PSetNum-1) { DsFirstOrder[i] = (DsSecondOrder[i-2] - 4 * DsSecondOrder[i-1] + 3 * DsSecondOrder[i]); }else { DsFirstOrder[i] = ( -1*DsSecondOrder[i-1]+DsSecondOrder[i+1]); } } for(int i = PWIconst->STDNum-1;i < PWIconst->PSetNum ; ++i) { if(i==PWIconst->STDNum-1) { DsSecondOrder[i] = (-3*DsFirstOrder[i] + 4 * DsFirstOrder[i+1] - DsFirstOrder[i+2]); }else if(i == PWIconst->PSetNum-1) { DsSecondOrder[i] = (DsFirstOrder[i-2] - 4 * DsFirstOrder[i-1] + 3 * DsFirstOrder[i]); }else { DsSecondOrder[i] = ( -1*DsFirstOrder[i-1]+DsFirstOrder[i+1]); } DsSecondOrder[i]=DsSecondOrder[i]*DsSecondOrder[i]; } _signal temSecondOrder = calcul(1.8,DsSecondOrder+PWIconst->STDNum-1,PWIconst->PSetNum-PWIconst->STDNum); AreaAndCt[j].PixelData[TWO_D(k,l,PWIcommon->width)] = temSecondOrder; AreaSet.push_back(temSecondOrder); } } } sort(AreaSet.begin(),AreaSet.end()); SecondOrderThreshold = AreaSet[(int)(AllCurve*0.75)]; AreaSet.clear(); for(int j = 10;j < 20; ++j) { for(int k = 0;k < PWIcommon->height*2/3; ++k) { for(int l = 0;l < PWIcommon->width; ++l) { if(AreaAndCt[j].PixelData[TWO_D(k,l,PWIcommon->width)]>SecondOrderThreshold) { AreaAndCt[j].PixelData[TWO_D(k,l,PWIcommon->width)] = 0; } } } } /**SecondOrder version**/ double avgTime,avgHeight,avgWidth; avgTime = 0; avgHeight = 0; avgWidth = 0; double minIndex = 0; double maxIndex = 0; double maxR2 = -100; for(int j = 10;j < 20; ++j) { for(int k = 0;k < PWIcommon->height*2/3; ++k) { for(int l = 0;l < PWIcommon->width; ++l) { minIndex = PWIconst->PSetNum-1; maxIndex = -1; maxR2 = -100; if(AreaAndCt[j].PixelData[TWO_D(k,l,PWIcommon->width)] == 0) { continue; } for(int i = PWIconst->STDNum-1; i< PWIconst->PSetNum ; ++i) { DsSecondOrder[i] = PWIArray[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)]; if(maxR2<DsSecondOrder[i]) maxR2 = DsSecondOrder[i]; } for(int i = PWIconst->STDNum-1;i < PWIconst->PSetNum ; ++i) { if(i==PWIconst->STDNum-1) { DsFirstOrder[i] = (-3*DsSecondOrder[i] + 4 * DsSecondOrder[i+1] - DsSecondOrder[i+2]); }else if(i == PWIconst->PSetNum-1) { DsFirstOrder[i] = (DsSecondOrder[i-2] - 4 * DsSecondOrder[i-1] + 3 * DsSecondOrder[i]); }else { DsFirstOrder[i] = ( -1*DsSecondOrder[i-1]+DsSecondOrder[i+1]); } } for(int i = PWIconst->STDNum+1;i < PWIconst->PSetNum ; ++i) { if(i==PWIconst->STDNum-1) { DsSecondOrder[i] = (-3*DsFirstOrder[i] + 4 * DsFirstOrder[i+1] - DsFirstOrder[i+2]); }else if(i == PWIconst->PSetNum-1) { DsSecondOrder[i] = (DsFirstOrder[i-2] - 4 * DsFirstOrder[i-1] + 3 * DsFirstOrder[i]); }else { DsSecondOrder[i] = ( -1*DsFirstOrder[i-1]+DsFirstOrder[i+1]); } } for(int i = PWIconst->STDNum+1;i < PWIconst->PSetNum ; ++i) { if(DsSecondOrder[i] >0.008) { if(i<minIndex) { minIndex = i; } if(i>maxIndex) { maxIndex =i; } } } if(maxIndex == -1) { maxIndex =PWIconst->PSetNum-1; } if(minIndex == PWIconst->PSetNum-1) { minIndex =0; maxIndex = PWIconst->PSetNum-1; } avgHeight += maxR2 * 100; avgTime += minIndex* 1.8; avgWidth += (maxIndex - minIndex)*1.8; } } } avgHeight/=AllCurve; avgWidth/=AllCurve; avgTime/=AllCurve; for(int j = 10;j < 20; ++j) { for(int k = 0;k < PWIcommon->height*2/3; ++k) { for(int l = 0;l < PWIcommon->width; ++l) { minIndex = PWIconst->PSetNum-1; maxIndex = -1; maxR2 = -100; if(AreaAndCt[j].PixelData[TWO_D(k,l,PWIcommon->width)] == 0) { continue; } for(int i = PWIconst->STDNum-1; i< PWIconst->PSetNum ; ++i) { DsSecondOrder[i] = PWIArray[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)]; if(maxR2<DsSecondOrder[i]) maxR2 = DsSecondOrder[i]; } for(int i = PWIconst->STDNum-1;i < PWIconst->PSetNum ; ++i) { if(i==PWIconst->STDNum-1) { DsFirstOrder[i] = (-3*DsSecondOrder[i] + 4 * DsSecondOrder[i+1] - DsSecondOrder[i+2]); }else if(i == PWIconst->PSetNum-1) { DsFirstOrder[i] = (DsSecondOrder[i-2] - 4 * DsSecondOrder[i-1] + 3 * DsSecondOrder[i]); }else { DsFirstOrder[i] = ( -1*DsSecondOrder[i-1]+DsSecondOrder[i+1]); } } for(int i = PWIconst->STDNum+1;i < PWIconst->PSetNum ; ++i) { if(i==PWIconst->STDNum-1) { DsSecondOrder[i] = (-3*DsFirstOrder[i] + 4 * DsFirstOrder[i+1] - DsFirstOrder[i+2]); }else if(i == PWIconst->PSetNum-1) { DsSecondOrder[i] = (DsFirstOrder[i-2] - 4 * DsFirstOrder[i-1] + 3 * DsFirstOrder[i]); }else { DsSecondOrder[i] = ( -1*DsFirstOrder[i-1]+DsFirstOrder[i+1]); } } for(int i = PWIconst->STDNum+1;i < PWIconst->PSetNum ; ++i) { if(DsSecondOrder[i] >0.008) { if(i<minIndex) { minIndex = i; } if(i>maxIndex) maxIndex =i; } } if(maxIndex == -1) { maxIndex =PWIconst->PSetNum-1; } if(minIndex == PWIconst->PSetNum-1) { minIndex =0; maxIndex = PWIconst->PSetNum-1; } if(minIndex == maxIndex) maxIndex = PWIconst->PSetNum-1; temC = PWIconst->ck1*(maxR2*100 - avgHeight) + PWIconst->ck2*(minIndex*1.8 - avgTime) + PWIconst->ck3 * ((maxIndex - minIndex)*1.8 - avgWidth); if(maxR2*100>avgHeight && minIndex*1.8<avgTime && (maxIndex - minIndex)*1.8<avgWidth) { if(temC > testC) { testC = temC; AIFtestZ = j; AIFtestX = l; AIFtestY = k; } } } } } delete [] AreaAndCt; delete [] DsFirstOrder; delete [] DsSecondOrder; int AIFz = AIFtestZ; int AIFy = AIFtestY; int AIFx = AIFtestX; /*AIF end*/ for(int i = 0 ;i < PWIconst->PSetNum; ++i) { for(int j = 0;j < PWIconst->PSliceNum;++j) { for(int k = 0;k < PWIcommon->height;++k) { for(int l = 0;l < PWIcommon->width;++l) { //获取Cav的值 PWICav[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)]=Cav(PWIArray[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)],MRtype,PWIconst->x[MRtype][1],PWIconst->x[MRtype][2]); } } } } Uint16 temPixel[128*128]; cout<<"Cav Ct OK"<<endl; //给FFT输入做赋值 fftw_plan p; //计算卷积 for(int i = 0 ;i < PWIconst->PSliceNum; ++i ) { for(int j = 0; j < PWIcommon->height;++j) { for(int k = 0;k < PWIcommon->width; ++k) { //zero padding!!!!!!!!!!!!!! 不是这样 for(int l = S0Index ; l < PWIconst->PSetNum;++l) { //15 52 44 TempInFFTCt[l-S0Index][0]=PWICt[TWO_D(l,i,PWIconst->PSliceNum)].PixelData[TWO_D(j,k,PWIcommon->width)]; TempInFFTCa[l-S0Index][0]=PWICav[TWO_D(l,AIFz,PWIconst->PSliceNum)].PixelData[TWO_D(AIFy,AIFx,PWIcommon->width)]; TempInFFTCt[l-S0Index][1] = 0; TempInFFTCa[l-S0Index][1] = 0; } for(int l = PWIconst->PSetNum-S0Index ; l < 2*(PWIconst->PSetNum-S0Index);++l) { TempInFFTCt[l][0] = 0; TempInFFTCa[l][0] = 0; TempInFFTCt[l][1] = 0; TempInFFTCa[l][1] = 0; } //计算FFT p=fftw_plan_dft_1d( PWIconst->PSetNum-S0Index ,TempInFFTCt ,TempOutFFTCt , FFTW_FORWARD, FFTW_ESTIMATE); fftw_execute(p); fftw_destroy_plan(p); p=fftw_plan_dft_1d(PWIconst->PSetNum-S0Index ,TempInFFTCa, TempOutFFTCa , FFTW_FORWARD, FFTW_ESTIMATE); fftw_execute(p); //理解out fftw_destroy_plan(p); //FFT(TempInFFTCt,TempOutFFTCt,FFTLayer); //FFT(TempInFFTCa,TempOutFFTCa,FFTLayer); _signal maxFFTCa=-99999; for(int l = 0 ; l < 2 * (PWIconst->PSetNum - S0Index); ++l) { int tempFFTCa = sqrt(TempOutFFTCa[l][0]*TempOutFFTCa[l][0]+TempOutFFTCa[l][1]*TempOutFFTCa[l][1]); if(maxFFTCa < tempFFTCa) maxFFTCa = tempFFTCa; } _signal TempN = maxFFTCa * PWIconst->pr/2; _signal TempG; for(int l = 0 ; l < 2 * (PWIconst->PSetNum - S0Index); ++l) { int tempFFTCa = sqrt(TempOutFFTCa[l][0]*TempOutFFTCa[l][0]+TempOutFFTCa[l][1]*TempOutFFTCa[l][1]); if(tempFFTCa > TempN && l != 0) { TempG=(tempFFTCa*tempFFTCa-TempN*TempN)/(tempFFTCa*tempFFTCa); }else if(l==0) { TempG=1; }else { TempG=0; } if(TempG!=0) { TempInIFFT[l][0]=TempG * Divide_Real(TempOutFFTCt[l],TempOutFFTCa[l]); TempInIFFT[l][1]=TempG * Divide_Img(TempOutFFTCt[l],TempOutFFTCa[l]); }else { TempInIFFT[l][0]=0; TempInIFFT[l][1]=0; } //cout<<TempInIFFT[l]<<endl; } //计算IFFT p=fftw_plan_dft_1d(PWIconst->PSetNum-S0Index,TempInIFFT,TempOutIFFT, FFTW_BACKWARD, FFTW_ESTIMATE); fftw_execute(p); fftw_destroy_plan(p); //求出Rt for(int l = 0 ; l < PWIconst->PSetNum-S0Index; ++l) { PWIRt[TWO_D(l,i,PWIconst->PSliceNum)].PixelData[TWO_D(j,k,PWIcommon->width)]=1/(PWIconst->PSetNum*1.8)*TempOutIFFT[l][0]; //cout<<PWIRt[TWO_D(i,l,PWIconst->PSliceNum)].PixelData[TWO_D(j,k,PWIcommon->width)]<<endl; } } } } //free fft //估算Kav int calVOF; int calAIF; _signal temVOF[62]; _signal temAIF[62]; calVOF = calcul(1800,temVOF,PWIconst->PSetNum); calAIF = calcul(1800,temAIF,PWIconst->PSetNum); cout<<"KAV: AIF:"<<calAIF<<" VOF:"<<calVOF<<endl; //计算CBV MTT for(int i = 0; i < PWIconst->PSliceNum; ++i) { PWICBV[i].allocMemory(PWIcommon->height*PWIcommon->width); PWIMTT[i].allocMemory(PWIcommon->height*PWIcommon->width); PWICBF[i].allocMemory(PWIcommon->height*PWIcommon->width); PWITmax[i].allocMemory(PWIcommon->height*PWIcommon->width); } _signal Integral_Ca=0; _signal Integral_Ct=0; _signal k0 = getK0(PWIconst->ro,PWIconst->HSV,PWIconst->HLV); int kav =1; for(int j = 0 ; j < PWIconst->PSliceNum; ++j) { for(int k = 0; k < PWIcommon->height; ++k) { for(int l = 0; l < PWIcommon->width; ++l) { _signal maxRt = -10000; _signal maxRtt = 0; for(int i = 0; i < PWIconst->PSetNum-S0Index; ++i) { tempCt[i]=PWICt[TWO_D(i+S0Index,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)]; tempCa[i]=PWICav[TWO_D(i+S0Index,AIFz,PWIconst->PSliceNum)].PixelData[TWO_D(AIFy,AIFx,PWIcommon->width)]; //求出rt达到最大值时的t值 /*if(j==SelectSlice&&k==index_x&&l==index_y) { cout<<PWIRt[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)]<<" "; }*/ //i<=(PWIconst->PSetNum-S0Index)/2+1 && if( i <= (PWIconst->PSetNum-S0Index)/2+1 && PWIRt[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)]>maxRt) { maxRt = PWIRt[TWO_D(i,j,PWIconst->PSliceNum)].PixelData[TWO_D(k,l,PWIcommon->width)]; maxRtt = i*1.8; } } Integral_Ca=calcul(1800,tempCa,PWIconst->PSetNum-S0Index); Integral_Ct=calcul(1800,tempCt,PWIconst->PSetNum-S0Index); //if(s0[j].PixelData[TWO_D(k,l,PWIcommon->width)] != 0)//是否在mask内 PWICBV[j].PixelData[TWO_D(k,l,PWIcommon->width)]=Integral_Ct/Integral_Ca*k0*kav; //else // PWICBV[j].PixelData[TWO_D(k,l,PWIcommon->width)] = 0; PWICBF[j].PixelData[TWO_D(k,l,PWIcommon->width)]= maxRt*k0*kav*60; PWIMTT[j].PixelData[TWO_D(k,l,PWIcommon->width)] = maxRtt; /*if(j==SelectSlice&&l==index_x&&k==index_y) { cout<<"MaxRt:"<<maxRt<<" PWICBF:"<<PWICBF[j].PixelData[TWO_D(k,l,PWIcommon->width)]<<" shu:"<<maxRt*k0*kav*60<<endl; }*/ } } string s_mtt_tem = output+"bmpMTT/"+itos(j)+"_MTT.bmp"; string s_tmax_tem = output+"bmpTmax/"+itos(j)+"_Tmax.bmp"; string s_cbf_tem = output+"bmpCBF/"+itos(j)+"_CBF.bmp"; string s_cbv_tem = output+"bmpCBV/"+itos(j)+"_CBV.bmp"; //计算MTT for(int i = 0 ; i < 128*128 ; ++i ) { PWITmax[j].PixelData[i] = 60*PWICBV[j].PixelData[i]/PWICBF[j].PixelData[i]; } //输出MTT for(int i = 0 ; i < 128*128 ; ++i ) { temPixel[i] = (Uint16)(PWITmax[j].PixelData[i]*10); } PWIinfo.fileformat.getDataset()->putAndInsertUint16Array(DCM_PixelData,temPixel,128*128); PWIinfo.fileformat.saveFile((output+"Tmax/MTT_"+itos(j)).c_str(),EXS_LittleEndianExplicit); //输出Tmax for(int i = 0 ; i < 128*128 ; ++i ) { temPixel[i] = (Uint16)(PWIMTT[j].PixelData[i]); } PWIinfo.fileformat.getDataset()->putAndInsertUint16Array(DCM_PixelData,temPixel,128*128); PWIinfo.fileformat.saveFile((output+"MTT/MTT_"+itos(j+1)).c_str(),EXS_LittleEndianExplicit); //输出CBF for(int i = 0 ; i < 128*128 ; ++i ) { temPixel[i] = (Uint16)(PWICBF[j].PixelData[i]*10); } PWIinfo.fileformat.getDataset()->putAndInsertUint16Array(DCM_PixelData,temPixel,128*128); PWIinfo.fileformat.saveFile((output+"CBF/CBF_"+itos(j)).c_str(),EXS_LittleEndianExplicit); //输出CBV for(int i = 0 ; i < 128*128 ; ++i ) { temPixel[i] = (Uint16)(PWICBV[j].PixelData[i]*100); } PWIinfo.fileformat.getDataset()->putAndInsertUint16Array(DCM_PixelData,temPixel,128*128); PWIinfo.fileformat.saveFile((output+"CBV/CBV_"+itos(j)).c_str(),EXS_LittleEndianExplicit); //write BMP for(int i = 0 ; i < 128*128 ; ++i ) { temPixel[i] = (Uint16)((PWICBV[j].PixelData[i]<=0?0:PWICBV[j].PixelData[i])*100); } toBmp(128,128,temPixel,s_cbv_tem.c_str(),0,500,s0[j].PixelData); for(int i = 0 ; i < 128*128 ; ++i ) { temPixel[i] = (Uint16)((PWICBF[j].PixelData[i]<=0?0:PWICBF[j].PixelData[i])*10); } toBmp(128,128,temPixel,s_cbf_tem.c_str(),0,400,s0[j].PixelData); for(int i = 0 ; i < 128*128 ; ++i ) { temPixel[i] = (Uint16)((PWIMTT[j].PixelData[i]<=0?0:PWIMTT[j].PixelData[i])*10); } toBmp(128,128,temPixel,s_tmax_tem.c_str(),0,120,s0[j].PixelData); for(int i = 0 ; i < 128*128 ; ++i ) { temPixel[i] = (Uint16)((PWITmax[j].PixelData[i]<=0?0:PWITmax[j].PixelData[i])*10); } toBmp(128,128,temPixel,s_mtt_tem.c_str(),0,160,s0[j].PixelData); } puts("PWI DONE"); return 0; }