Example #1
0
/*
 * Test 1
 * */
void provaCalcS(){
	printf("halloo, probando probando!!\n");

	vector pc = zerov(2);
	vector pcPrimes = zerov(2);
	matrix S = zerom(2, 3);
	pc.v[0] = 50; pc.v[1] = 200;
	//Test in matlab
	//S = [ 0 0.0003495 0.002; 0.0018 0.0338 0.0207];
	S.m[0][0] = 0; S.m[0][1] = 0.0003495; S.m[0][2] = 0.002;
	S.m[1][0] = 0.0018; S.m[1][1] = 0.0338; S.m[1][2] = 0.0207;
	int numPrimes = (int)(pc.v[pc.x - 1] / pc.v[0]);
	intvector numsPrimesReason = primes(numPrimes);

	int i, j;

	for(i = 0; i < numsPrimesReason.x; ++i){
		printf("i: %d\n", numsPrimesReason.v[i]);
		int primeNum = numsPrimesReason.v[i];
		for(j = 0; j < pcPrimes.x; ++j){
			pcPrimes.v[j] = pc.v[j] * primeNum;
		}
		printf("\nArray pcPrimes:\n");
		printv(pcPrimes);

		matrix SnInterp = interp1Mat(pc, pcPrimes, S, 0);
		printf("\nResult S\n");
		printm(SnInterp);
	}

}
Example #2
0
/*
 * Test 2
 * Esta dando diferente el valor yN[0] = 0.012, cuando en matlab da yN[0] = 0.01
.0 * */
void interpVectorTest(){
	vector xO = zerov(2);
	xO.v[0] = 50; xO.v[1] = 200;
	vector yO = zerov(2);
	yO.v[0] = 0; yO.v[1] = 0.0018;
	vector xN = zerov(2);
	xN.v[0] = 150; xN.v[1] = 600;
	vector yN = zerov(2);
	interp1(xO, yO, xN, yN.v);
	printf("yN:\n");
	printv(yN);
	double yNcurr = interp(xO.v, yO.v, 150, 0);
	printf("Numero interpolado yNCurr: %f", yNcurr);

}
Example #3
0
double* new_zero_vector(unsigned int n)
{
  double *v;
  v = new_vector(n);
  zerov(v, n);
  return v;
}
Example #4
0
    static void BuildCurves(float3* points, int count, bool isClosed,
        std::vector<BezierCurve>* out)
    {
        assert(count > 1);

        float3 cp[4];
        if(count == 2)
        {
            cp[0] = points[0];
            cp[3] = points[1];
            cp[1] = cp[0] + 0.3333f * (cp[3] - cp[0]);
            cp[2] = cp[0] + 0.6666f * (cp[3] - cp[0]);
            out->push_back(BezierCurve(cp));
        }
        else
        {
            float3 zerov(0.0f,0.0f,0.0f);
            std::vector<float3> tangents(count,zerov);            
            CalcPointTangents(points,&tangents[0],count,isClosed);
            for (int i = 1; i < count; i++)
            {
                float3 chord = points[i] - points[i - 1];
                float segLen = length(chord) * 0.3333f;                
                cp[0] = points[i - 1];
                cp[3] = points[i];

                float3 tangent1 = tangents[i - 1];
                if (dot(chord, tangent1) < 0)
                    tangent1 = -tangent1;
                cp[1] = cp[0] + (tangent1 * segLen);


                float3 tangent2 = tangents[i];
                if (dot(-chord, tangent2) < 0)
                    tangent2 = -tangent2;
                cp[2] = cp[3] + (tangent2 * segLen);
               
                BezierCurve curve(cp);
                out->push_back(curve);
            }

            // Calculate last curve if is closed
            if (isClosed)
            {           
                float3 lastcp1 = cp[1];
                float3 lastcp2 = cp[2];
                
                cp[0] = points[count - 1];
                cp[3] = points[0];
                
                BezierCurve lastCurve = out->back();
                float tanLen = length(cp[3] - cp[0]) * 0.3333f;
               
                float3 v = normalize(lastCurve.GetControlPoint(2) - cp[0]);                
                cp[1] = cp[0] - (v * tanLen);

                BezierCurve firstCurve = out->front();

                v = normalize(firstCurve.GetControlPoint(1) - cp[3]);
                cp[2] = cp[3] - (v * tanLen);
              
                BezierCurve curve(cp);
                out->push_back(curve);
            }
        }
    }