Ejemplo n.º 1
0
void test_cint(void)
{
    real L = 32;
    std::vector<real> angles;
    std::vector<Vector> pos;
    Angdict angdict;
    //Posdict posdict;

    Vector a, b, c, d;
    a.x = 1.; a.y = 2.;
    b.x = 2.; b.y = 2.;
    c.x = 2.; c.y = 0.;
    d.x = 4.; d.y = 4.;

    angles = {0., PI/4., -PI/4., 0.};
    pos = {a, b, c, d};

    angdict[0] = angles;
    //posdict[0] = pos;

    Pi pi(angdict);

    /*pi:
    Vector(0., 0.)
    Vector(-0.70710678118, 0.)
    Vector(0.70710678118, 0.)
    Vector(0., 0.)
    */

    std::vector<real> ni(4);
    real nc;
    MATRIX n(4, 4);
    n.Zero();

    /* topological */

    calculate_n_topological(n, pos, L, 2);
    create_ni(n, ni);
    nc = average(ni);
    assert_almost_equal(nc, real(2));
    assert_almost_equal(Cint(0, pi, nc, n), real(-0.125));

    /* Metric */

    calculate_n_metric(n, pos, L, 2);
    create_ni(n, ni);
    nc = average(ni);
    assert_almost_equal(nc, real(1));
    assert_almost_equal(Cint(0, pi, nc, n), real(-0.25));

    /* Voronoi */

    calculate_n_voronoi(n, pos, L);
    create_ni(n, ni);
    nc = average(ni);
    assert_almost_equal(nc, real(3));
    assert_almost_equal(Cint(0, pi, nc, n), real(-1./12.));
}
Ejemplo n.º 2
0
void Process(int s[],char x)
{
	static int flag=0,tempnum = 0;
	if(isdigit(x))
	{
		if(flag==2)
		{
			if(Cint(x)==1)
			{
				n= n-4;
				flag =4;
				tempnum =0;
			}
			else 
			{
				s[n-5]=s[n-5]*Cint(x);
				s[n++]= Cint(x)-1;
				flag = 4;
				tempnum = 0;
			}
		}
		else
		{
			tempnum= tempnum*10+Cint(x);
			flag = 0;
		}
	}
	else if(x=='x')
	{
		if(tempnum!=0)
			s[n++]=tempnum;
		else 
			s[n++] = 1;
		s[n++]= -1;
		s[n++] = (int )x;
		tempnum =0;
		flag =1;
	}
	else if(x=='^')
	{
		s[n++]=-1;
		s[n++]=(int)x;
		flag = 2;
	}
	else if(x=='+'||x=='-'||x=='*'||x=='/')
	{
		if(flag==4)
		{
			s[n++]=-1;
			s[n++]= (int)x;
		}
		else if(flag==1)
		{
			n-=2;
			s[n++]=-1;
			s[n++]= (int)x;
		}
		tempnum = 0;
		flag =3;
	}
	else if(x=='#')
	{
		if(flag!=4)
		{
			n=n-1;
			s[n++]=-1;
			s[n]=(int)x;
		}
		else if(flag==1)
		{
		n=n-2;
		s[n++]=-2;
		}
		else 
			s[n++]=-2;
	}
}