Exemplo n.º 1
0
Arquivo: pf.c Projeto: jxv/pf
PfTri _pf_tri(v2f radii, bool line, PfCorner hypotenuse) {
    const float radians = tri_angle(&radii, hypotenuse);
    return (PfTri) {
        .radii = radii,
        .line = line,
        .hypotenuse = hypotenuse,
        .radians = radians,
        .m = pf_tri_slope(&radii, hypotenuse),
        .proj = projection_vector(radians),
        .normal = tri_normal(&radii, hypotenuse),
        .sin = sinf(radians),
        .cos = cosf(radians),
    };
}

PfGroup _pf_platform() {
    return (PfGroup) {
        .tag = PF_GROUP_PLATFORM,
        .platform = (PfPlatform) {
            .allow = 0,
            .convey = _v2f(0,0),
            .left = NULL,
            .right = NULL,
        },
    };
}

PfBody _pf_body() {
    return (PfBody) {
        .mode = PF_MODE_DYNAMIC,
        .shape = (PfShape) {
                .tag = PF_SHAPE_CIRCLE,
                .radius = 0
            },
        .pos = _v2f(0,0),
        .group.object.parent = NULL,
        .group.object.check_parent = false,
        .dpos = _v2f(0,0),
        .in = { 
            .impulse = fillv2f(0),
            .decay = fillv2f(0.5),
            .cap = fillv2f(1000),
        },
        .ex = {
            .impulse = fillv2f(0),
            .decay = fillv2f(0.3),
            .cap = fillv2f(1000),
        },
        .gravity = {
Exemplo n.º 2
0
void generate_basis()
{
	int i=0;int j=0;int k=0;int l=0; double norm=0; double u1,u2; int temp_int;
	double standard_basis[DIM][DIM]; double temp_basis[DIM][DIM];double temp_vector[DIM];double coefficients[DIM];

     double *temp_;

	 srand((unsigned int)time(NULL));
	 temp_=(double *) malloc(sizeof(double)*DIM);
	for(i=0;i<DIM;i++)
	{
	  coefficients[i]=(double)rand()/(M_PI *100);
	  temp_vector[i]=0;
	  temp_[i]=0;
	}

	for(i=0;i<DIM;i++)
	{
	   for(j=0;j<DIM;j++)
	   {
	      if(i==j)
		  {
		    standard_basis[i][j]=1;
			temp_basis[i][j]=0;
		  }
		  else
		  {
		    standard_basis[i][j]=0;
			temp_basis[i][j]=0;
		  }


	   }


	}

	if(DIM==2)
	{
	u1= (double)rand()/(M_PI *100);
	temp_int=u1;
	u1=u1-temp_int;
	basis[0][0]=u1;
	u2=1-u1*u1;
	u2=sqrtf(u2);
	basis[0][1]=u2;


	basis[1][0]=-u2;

	basis[1][1]=u1;


	}
	else{
	for(i=0;i<DIM;i++)
	{
		for(k=0;k<DIM;k++)
		{

			for(j=0;j<DIM;j++)
			{
				if(i==j)
				{
					continue;
				}
				else
				{
					temp_vector[k]= temp_vector[k]+standard_basis[j][k]*coefficients[j];

				}


			}
		}



		for(l=0;l<DIM;l++)
		{
			temp_basis[i][l]=temp_vector[l];
			temp_vector[l]=0;
		}


	}

	for(k=0;k<DIM;k++)
	basis[0][k]=temp_basis[0][k];

	for(k=1;k<DIM;k++)
	{
	  for(j=0;j<k;j++)
	  {
	    temp_=sum_of_vectors(temp_, projection_vector(basis[j],temp_basis[k]));
	  }


	  for(i=0;i<DIM;i++)
	  {
	   basis[k][i]=temp_basis[k][i]-temp_[i] ;

	  }

	  for(l=0;l<DIM;l++)
		  temp_[l]=0;

	}


	for(i=0;i<DIM;i++)
	{
		coefficients[i]=0;
	  for(j=0;j<DIM;j++)
	  {
	     coefficients[i]=coefficients[i]+ basis[i][j] * basis[i][j];

	  }
	    coefficients[i] =sqrtf(coefficients[i]);
	}

	for(i=0;i<DIM;i++)
	{
	  for(j=0;j<DIM;j++)
	  {
	    basis[i][j] = basis[i][j]/coefficients[i];
	  }
	}

	}


	  printf("\nORTHONORMAL BASIS: \n");

	for(i=0;i<DIM;i++)
	{
	  for(j=0;j<DIM;j++)
	  {
	    printf("%.4f ",basis[i][j]);

	  }
	  printf("\n");
	}
	  printf("\n");

}