コード例 #1
0
ファイル: trace.c プロジェクト: 1lynx/fdf
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++;
	}
}
コード例 #2
0
ファイル: main.c プロジェクト: Marrylup/42_Piscine_July2015
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);
}
コード例 #3
0
ファイル: haarfeat.c プロジェクト: deltova/recofacial
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;
}
コード例 #4
0
ファイル: main.cpp プロジェクト: Strade288/42
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;
}
コード例 #5
0
ファイル: Mymalloc.c プロジェクト: roussieau/Mymalloc
// 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
}
コード例 #6
0
ファイル: gere.c プロジェクト: FlorianDewulf/wolf3D
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);
}
コード例 #7
0
ファイル: fenprincipale.cpp プロジェクト: sepiropht/caltopo
        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 ();
                 }
           }
コード例 #8
0
ファイル: Mymalloc.c プロジェクト: roussieau/Mymalloc
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;
}
コード例 #9
0
ファイル: forest.c プロジェクト: codeliuer/learn-code
int 
cmp(const void *data1, const void *data2)
{
    const char *str1 = *(const char **)&data1;
    const char *str2 = *(const char **)&data2;
    
    return calcul(data1, data2);
}
コード例 #10
0
ファイル: ex13.c プロジェクト: EspritLab/EspritLab
int main(int argc, char **argv)
{
  int h=0;
  saisie(&h);
  calcul(h);


 return 0;
}
コード例 #11
0
ファイル: base1.c プロジェクト: Khagrom/Workspace
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;
}
コード例 #12
0
ファイル: ennemi.cpp プロジェクト: libcg/TowerDefense
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;
}
コード例 #13
0
ファイル: ennemi.cpp プロジェクト: libcg/TowerDefense
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;
        }
    }
}
コード例 #14
0
ファイル: gere.c プロジェクト: FlorianDewulf/wolf3D
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);
}
コード例 #15
0
ファイル: tp41.c プロジェクト: ulricheza/Isima
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);
}
コード例 #16
0
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);
}
コード例 #17
0
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);
}
コード例 #18
0
ファイル: Pile.cpp プロジェクト: CrowPg/Calkraft
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);
        }
    }
}
コード例 #19
0
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;
}
コード例 #20
0
ファイル: menu.c プロジェクト: corentin-R/ISEN_oxymetre
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());
}
コード例 #21
0
ファイル: menu.c プロジェクト: corentin-R/ISEN_oxymetre
//------------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);

}
コード例 #22
0
ファイル: tp5.c プロジェクト: MiLk/NF16-TP5
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);
}
コード例 #23
0
ファイル: affich_fonction.c プロジェクト: ulricheza/Isima
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);
} 
コード例 #24
0
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;
}