Beispiel #1
0
	void drawCatmullRom(){
		glColor3f(0.0f, 1.0f, 0.0f);
		glBegin(GL_LINE_STRIP);
		for (int i = 0; i < size; i++)
		{
			for (float t = 0; t <= (points[i + 1].time - points[i].time); t += (points[i + 1].time - points[i].time) / 100)
			{
				glVertex2f(Hermite(i, t).x, Hermite(i, t).y);
			}
		}
		glEnd();
	}
 Vector f(float t){
     for(int i = 0; i < n; i++){
         if(ts[i] <= t && t <= ts[i+1]) return Hermite(cps[i], vs[i], ts[i],
                                                       cps[i+1],vs[i+1],ts[i+1],t);
     }
     return Vector(convertXToNorm(-2.0f),convertYToNorm(-2.0f));
 }
Beispiel #3
0
// Interpolates between two values using a cubic equation.
// value1: Source value.
// value2: Source value.
// amount: Weighting value.
// Return: Interpolated value.
float CMathHelper::SmoothStep(float value1, float value2, float amount)
{
	// It is expected that 0 < amount < 1
	// If amount < 0, return value1
	// If amount > 1, return value2
	float result = Clamp(amount, 0.0f, 1.0f);
	result = Hermite(value1, 0.0f, value2, 0.0f, result);

	return result;
}
Beispiel #4
0
void Call_Hermite ( int n, int m )
{
    POLY a[n][m], a1[n][m];
    POLY p[n][n], t[n][m];
    dcmplx deter, dcmplx_p[n][n], x;
    int k;

    printf("1 random matrix.\n");
    printf("2 input your own matrix.\n");
    printf("Please choose the test matrix:");
    scanf("%d", &k ); printf("%d\n\n", k );

    if(k==1) random_matrix ( n, m, a);
    if(k==2) read_matrix( n, m, a );
    printf("the original matrix generated :\n");
    print(n,m,a); 
    
    zero_matrix ( n, m, a1);
    I_matrix (  n, p);
    copy ( n, m, a, t);

    /* Eliminate_Col(n,m,a,p,0,0); */
    /* Eliminate_Row(n,m,a,q,0,0); */
    Hermite(n, m, a, p);

    printf("The hermite form of matrix a is :\n");
    print(n,m,a);

    /* now begin to test the result */
    Multiply ( n,  n,  m, p, t, a1 ); 
 
    
    printf("The calculated hermite form with p*a is:\n");
    print(n, m, a1);
    printf(" p is:\n");
    print(n, n, p);

    x=create1(1.1);
    evaluate_matrix(n, n, p, dcmplx_p, x);
    deter=determinant(n, dcmplx_p);
    printf("The determinant of the p is: ");
    writeln_dcmplx(deter);
    
}
Beispiel #5
0
//Display
void display (void) 
{ 
    glClearColor(rosso_sf,verde_sf,blu_sf,0.0);//rendo variabili i parametri che mi definiscono il colore 
    glClear(GL_COLOR_BUFFER_BIT); 
    int i; 

    glColor3f(0.0,0.0,1.0); 
    glPointSize(dimpunto); 
    glBegin(GL_POINTS);//per visualizzare anche i punti dove si clicca di colore blu
        for (i=1;i<=last;i++) 
            glVertex2f(Punti[i].x,Punti[i].y); 
    glEnd(); 
    glColor3f(rosso_dis,verde_dis,blu_dis); 
    glBegin(GL_LINE_STRIP); //poligono di controllo
        for (i=1;i<=last;i++) 
            glVertex2f(Punti[i].x,Punti[i].y); 
    glEnd(); 
    n=last;//setto n al numero di punti disegnato
  
	for(i=1;i<=n;i++)
		w[i]=1;//metto tutti i pesi a 1

	//scelta parametrizzazione
    if (scelta_param==0) 
    { 
        Parametrizzazione_Uniforme();    
    } 
    else if(scelta_param==1) 
    { 
        Parametrizzazione_Corde(); 
    } 
  
	//scelta della funzione
	glPointSize(2);//la curva la disegno sempre di dimensione 2
    if (metodo=='H' && last>1) 
    { 
        Hermite(); 
        Disegna_Funzioni_Base(); 
    } 
  
    if (metodo=='B' && last>1) 
    { 
        if(mod_pesi_bez==1)
			w[i_p_b]=val_peso;
		Bezier(); 
        if (subd==1) 
            Subdivision(); 
        if (d_el==1) 
            Degree_Elevation(); 
        Disegna_fBaseBernstein(); 
    } 
  
    if (metodo=='S' && last>3) 
    { 
        if(mod_pesi_spline==1)
			w[i_p_s]=val_pesos;
		Costruisci_Nodi(); 
        Funzioni_Bspline(Nodi); 
        De_Boor();   
    } 
    //glutPostRedisplay();//è per questo che le funzioni base saltellano :)...se non lo metti però quando cambi il metodo non viene cambiato immediatamente ma dopo aver spinto un altro punto 
    glFlush(); 
} 
Beispiel #6
0
    void draw() {
        if (numcp > 0) {
            //kör sugár 5m -> 0.01f
            for (int i = 0; i < numcp; i++) {
                glColor3f(1, 0, 0);
                glBegin(GL_TRIANGLE_FAN);
                glVertex2f(cp[i].x, cp[i].y);
                for (int j = 0; j < 360; j++) {
                    //cos/sin (j*pi/180)*sugár+eltolás
                    glVertex2f(cos(j * 3.14159 / 180.0) * 0.01 + cp[i].x,
                               sin(j * 3.14159 / 180.0) * 0.01 + cp[i].y);
                }
                glEnd();

                glColor3f(1, 1, 1);
                glBegin(GL_LINE_STRIP);
                for (int j = 0; j < 360; j++) {
                    //cos/sin (j*pi/180)*sugár+eltolás
                    glVertex2f(cos(j * 3.14159 / 180.0) * 0.01 + cp[i].x,
                               sin(j * 3.14159 / 180.0) * 0.01 + cp[i].y);
                }
                glVertex2f(cos(0) * 0.01 + cp[i].x, sin(0) * 0.01 + cp[i].y);
                glEnd();
            }
        }
        /*
         if (numcp > 1) {
         glColor3f(0, 0, 1);
         glBegin(GL_LINE_STRIP);
         for (int i = 0; i < numcp; i++) {
         glVertex2f(cp[i].x, cp[i].y);
         }
         glVertex2f(cp[0].x, cp[0].y);
         glEnd();
         }
         */
        if (numcp > 1) {
            glColor3f(1, 1, 1);
            glBegin(GL_LINE_STRIP);
            Vector v;
            for (int i = 0; i < numcp + 1; i++) {
                //cout<<i<<"\n"<<flush;
                for (float t = ido[i]; t < ido[i + 1]; t += 1.0f) {
                    v = Hermite(i, t);
                    if (parabola.isintersecting(v)) {	// && !intersected) {
                        intersectpoint = v;
                        intersecttime = t;
                        intersecti = i;
                        intersected = true;
                    }
                    glVertex2f(v.x, v.y);
                }
            }
            glEnd();
            if (intersected) {
                glColor3f(0, 0.7f, 0);

                //glBegin(GL_POINTS);
                //glVertex2f(intersectpoint.x, intersectpoint.y);
                //glEnd();

                glBegin(GL_LINES);
                //for (float t = (ido[intersecti] - 100);	t < ido[intersecti] + 100; t++) {
                v = Hermitederive(intersecti, intersecttime);
                v = v * (10/v.Length());
                glVertex2f(intersectpoint.x + v.x, intersectpoint.y + v.y);
                glVertex2f(intersectpoint.x - v.x, intersectpoint.y - v.y);
                //}
                glEnd();
            }
        }
    }
Beispiel #7
0
double past(int i, int interval, double t, int val)

/* finds past values (val=1) or past derivatives (val=2)*/

{   int j, jn, nq, ip;
    double t0, t1, y0, y1, dy0, dy1, res, hh;
    double *Yh;

    /* error checking */
    if ( i >= n_eq)
        error("illegal input in lagvalue - var nr too high, %i", i+1);

    /* equal to current value... */
    if ( interval == indexhist && t == histtime[interval]) {
        if (val == 1)
            res = histvar [interval * offset  + i ];
        else
            res = histdvar [interval * offset  + i ];

        /* within last interval - for now: just extrapolate last value */
    } else if ( interval == indexhist && interpolMethod == 1) {
        if (val == 1) {
            t0  = histtime[interval];
            y0  = histvar [interval * offset  + i ];
            dy0 = histdvar [interval * n_eq  + i ];
            res = y0 + dy0*(t-t0);
        }
        else
            res = histdvar [interval * n_eq  + i ];

        /* Hermite interpolation */
    }  else if (interpolMethod == 1) {
        j  = interval;
        jn = nexthist(j);

        t0  = histtime[j];
        t1  = histtime[jn];
        y0  = histvar [j * n_eq  + i ];
        y1  = histvar [jn * n_eq  + i ];
        dy0 = histdvar [j * n_eq  + i ];
        dy1 = histdvar [jn * n_eq  + i ];
        if (val == 1)
            res = Hermite (t0, t1, y0, y1, dy0, dy1, t);
        else
            res = dHermite (t0, t1, y0, y1, dy0, dy1, t);

        /* dense interpolation - livermore solvers */
    } else if (interpolMethod == 2) {
        j  = interval;
        jn = nexthist(j);

        t0  = histtime[j];
        t1  = histtime[jn];
        nq  = histord [j];
        if (nq == 0) {
            y0  = histvar [j  * offset  + i ];
            y1  = histvar [jn * offset  + i ];
            dy0 = histdvar [j  * n_eq  + i ];
            dy1 = histdvar [jn * n_eq  + i ];
            if (val == 1)
                res = Hermite (t0, t1, y0, y1, dy0, dy1, t);
            else
                res = dHermite (t0, t1, y0, y1, dy0, dy1, t);
        } else {
            Yh  = &histvar [j * offset];
            hh = histhh[j];
            res = interpolate(i+1, val-1, t0, hh, t, Yh, nq);
        }
        /* dense interpolation - radau - gets all values (i not used) */
    } else {
//   if (val == 2)
//     error("radau interpol = 2 does not work for lagderiv");
        j  = interval;
        Yh  = &histvar [j * offset];
        histsave  = &histvar [j * offset + 4*n_eq];
        ip = i+1;
        F77_CALL(contr5alone) (&ip, &n_eq, &t, Yh, &offset, histsave, &res, &val);
    }
    return(res);
}
Beispiel #8
0
 ST Cardinal(ST y0, ST y1, ST y2, ST y3, FT c, FT t)
 {
     const FT m0 = c * (y2 - y0); //Tangent for y1.
     const FT m1 = c * (y3 - y1); //Tangent for y2.
     return Hermite(m0, y1, y2, m1, t);
 }
Beispiel #9
0
Vector3 CVector3::Hermite(Vector3 value1, Vector3 tangent1, Vector3 value2, Vector3 tangent2, float amount)
{
	Vector3 result;
	Hermite(value1, tangent1, value2, tangent2, amount, result);
	return result;
}
Beispiel #10
0
main()
{
    short m;
    double abscis[N];
    double  wt[N];
    double left, right;


    printf("Table 25.8, k= %1d, n=%1d\n\n", k, N);
    Jacobi(N, FLOATk, ZERO, abscis, wt);
    for (m=0; m<N; m++) wt[m] /= (k+1);
    
    for (m=0; m<N; m++) printf("%2d %20.18g %20.18g\n", m, abscis[m], wt[m]);
    getchar();


    printf("\n\n\nTable 25.4, n=9\n\n");
    Radau_Jacobi(4, -0.5, ZERO, abscis, wt, &left);
    left *= 2;
    for (m=0; m<4; m++) abscis[m]= sqrt(abscis[m]);

    printf("%2d %20.18g %20.18g\n", 0, ZERO, left);
    for (m=0; m<4; m++) printf("%2d %20.18g %20.18g\n", m, abscis[m], wt[m]);
    getchar();


    printf("\n\n\nTable 25.9, n= %1d\n\n", N);
    Laguerre(N, ZERO, abscis, wt);

    for (m=0; m<N; m++) printf("%2d %20.18g %20.18g\n", m, abscis[m], wt[m]);
    getchar();


    printf("\n\n\nTable 25.10, n= %1d\n\n", N);
    Hermite(N, ZERO, abscis, wt);

    for (m=0; m<N; m++) wt[m] *= SqrtPI;
    for (m=0; m<N; m++) printf("%2d %20.18g %20.18g\n", m, abscis[m], wt[m]);
    getchar();


    printf("\n\n\nSame, n= %1d\n\n", 2*N);
    Even_Hermite(2*N, ZERO, abscis, wt);
    for (m=0; m<N; m++) wt[m] *= SqrtPI;
    for (m=0; m<N; m++) printf("%2d %20.18g %20.18g\n", m, abscis[m], wt[m]);
    getchar();


    printf("\n\n\nSame, n= %1d\n\n", 9);
    Odd_Hermite(9, ZERO, abscis, wt, &left);
    left *= SqrtPI;
    for (m=0; m<4; m++) wt[m] *= SqrtPI;

    printf("%2d %20.18g %20.18g\n", 0, ZERO, left);
    for (m=0; m<4; m++) printf("%2d %20.18g %20.18g\n", m, abscis[m], wt[m]);
    getchar();


    printf("\n\n\nTable 25.6, n= %1d\n\n", N+1);
    Lobatto_Jacobi(N-1, ZERO, ZERO, abscis, wt, &left, &right);

    for (m=0; m<(N-1); m++) wt[m] *= 2;
    left *= 2;  right *= 2;
    for (m=0; m<(N-1); m++) abscis[m] = (2*abscis[m] - 1);

    printf("   %20.18g %20.18g\n", -1.0, left);
    for (m=0; m<(N-1); m++)
	printf("%2d %20.18g %20.18g\n", m, abscis[m], wt[m]);
    printf("   %20.18g %20.18g\n",  1.0, right);
}