Esempio n. 1
0
/*----------------------------------------------------------------------------*/
int gauss_frame(my1IFrame *src, my1IFrame *dst, float sigma, float *over)
{
	my1Kernel kernel;
	/* computing MY 2D gaussian smoothing kernel */
	int loop = 0, loop2, index = 0;
	float temp = 1.0, corner;
	float mult, value;
	while(temp>THRESH)
	{
		temp = fgaussian2d(loop,loop,sigma);
		corner = temp;
		loop++;
	}
	value = 1.0/corner;

	int windowsize = (loop*2)-1;
	int count = windowsize/2;
	int length = windowsize*windowsize;
	float *pcoeff = (float*) malloc(length*sizeof(float));
	if(pcoeff==0x0)
		return -1;
	for(loop=0;loop<windowsize;loop++)
	{
		for(loop2=0;loop2<windowsize;loop2++)
		{
			if(over)
				mult = value * (int)fgaussian2d(loop-count, loop2-count, sigma);
			else
				mult = fgaussian2d(loop-count, loop2-count, sigma);
			pcoeff[index++] = mult;
		}
	}
	if(over) *over = value;

	if(createkernel(&kernel,windowsize)==0x0)
	{
		free(pcoeff);
		return -1;
	}
	setkernel(&kernel, pcoeff);
	kernel.orig_x = count;
	kernel.orig_y = count;
	free(pcoeff);

	correlate_frame(src, dst, &kernel);
	freekernel(&kernel);

	return 0;
}
Esempio n. 2
0
/*----------------------------------------------------------------------------*/
int laplace_frame(my1IFrame *src, my1IFrame *dst)
{
	float coeff[] = { 0.0,-1.0,0.0, -1.0,4.0,-1.0, 0.0,-1.0,0.0 };
	my1Kernel kernel;

	if(createkernel(&kernel,3)==0x0)
		return -1;

	setkernel(&kernel,coeff);
	kernel.orig_x = 1;
	kernel.orig_y = 1;

	correlate_frame(src,dst,&kernel);
	freekernel(&kernel);

	return 0;
}
Esempio n. 3
0
int calc_potential(int argc,void *argv[])
{
  int i,j;
  float r,r_x,r_y,r_z;
  float phi_ij= 0.0;

  double epsilon, h, h_inv;
  int ii;
  double u, wp, ff;

  if(argc!=4)
    {
      fprintf(stderr,"\n\nwrong number of arguments ! (found %d) \n\n",argc);
      exit(0);
    }


  /*******************************************/


  N=*(int *)argv[0];
  
  Pos =(float *)argv[1];
  Mass=(float *)argv[2];


  Potential= (float *)argv[3];

  
  printf("N=%d\n",N);



  setkernel();

  allocate();

  extract();


  for(i=1;i<=N;i++)
    {
      if((i%200)==0)
        printf("...%d\n",i);
      
      for(j=1;j<=N;j++)
	{
/*	  
if((i<10) && (j<10)) { printf("i= %d (%g,%g,%g - m=%g) j=%d (%g,%g,%g - m=%g)\n",i,P[i]->Pos[0],P[i]->Pos[1],P[i]->Pos[2],Mass[i],j,P[j]->Pos[0],P[j]->Pos[1],P[j]->Pos[2],Mass[j]); }
*/
	  r_x= P[i]->Pos[0] - P[j]->Pos[0];
	  r_y= P[i]->Pos[1] - P[j]->Pos[1];
	  r_z= P[i]->Pos[2] - P[j]->Pos[2];

	  r= sqrt(r_x*r_x + r_y*r_y + r_z*r_z);

/*	  epsilon= dmax(Smoothing[i],Smoothing[j]);   */
	  epsilon= 0.1;

	  /* these need to be edited based upon the specific snapshot
	   * looking at.  I should change this to pass the smoothing
	   * lengths, but late */
	  if((i>500) && (i<=1500)) { epsilon= 0.4; }
	  if((j>500) && (j<=1500)) { epsilon= 0.4; }
  	  h = 2.8*epsilon;
	  h_inv=1/h;

	  if(r>0.0)
	    {
		  u=r*h_inv;
/*
if((i>400) && (i<410) && (j>400) && (j<450)) { printf("i= %d  j=%d  r=%g  ep=%g  m_i=%g  m_j%g\n",i,j,r,epsilon,Mass[i],Mass[j]); }
*/

	          if(u>=1)
	            {
	              phi_ij = -1.0*Mass[j]/r;
	            }
	          else
	            {
	              ii = (int)(u*KERN_LEN); ff=(u-knlrad[ii])*KERN_LEN;
	              wp=knlpot[ii]+(knlpot[ii+1]-knlpot[ii])*ff;
/*
printf("it's in here: i,j=%d,%d  wp=%g, h_inv=%g,  u=%g,  r=%g\n",i,j,wp,h_inv,u,r);
*/

	              phi_ij = +1.0 * Mass[j]*h_inv*wp;
	            }
	    }
	  else
		phi_ij= 0.0;


	/* this doesn't have the offset of 1, hence we subtract 1 */
	  Potential[i-1] += phi_ij;

	}
    } 


 
  free_memory();
  

  printf("Done with potential calculation.\n");
  return 0;
}