OpenGL - Bewegung entlang einer Ellipse



  • Hallo,

    ich muss einen Projekt realisieren und zwar ein Auto muss entlang einer Ellipse endlos fahren und dabei immer in die Fahrtrichtung ausgerichtet sein.

    Nun ein PKW habe ich modelliert, eine Ellipse mit Hilfe der Parameterdarstellung auch. Hier ist der Code:

    //Ellipse mit Hilfe der Parameterdarstellung zeichnen
    void drawEllipse(GLfloat a, GLfloat b)
    {
    GLint n = 1000;
    GLfloat h = 2.0*PI/static_cast<float>(n);
    	GLfloat x;
    	GLfloat y;
    	glBegin(GL_LINE_STRIP);
    	for (int i=0; i<n; i++) {
    		x = a*cos(static_cast<float>(i*h));
    		y = b*sin(static_cast<float>(i*h));
    		glVertex2f(x, y);
    		//printf("Punkt X: %f\n", x);
    		//printf("Punkt Y: %f\n", y);
    	}
    	glEnd();
    }
    

    Nun möchte ich die Bewegung implementieren. Hierzu habe ich eine Timer-Funktion implementiert. Und in der Main-Funktion die glutTimerFunc(1, autofahrt, 0);.

    void autofahrt(int value)
    {
    	//Redisplay
    	glutPostRedisplay();
    	// Timer wieder registrieren - autofahrt wird so wieder aufgerufen
    	glutTimerFunc(1, autofahrt, value);
    }
    

    Dank der Parameterdarstellung komme ich an die Koordinaten, aber wie muss ich weitervorgehen? Ich bin für jeden Tipp im Voraus sehr dankbar.

    Viele Grüße,
    Unr3al



  • Wenn du ein rechthändiges Koordinatensystem annimmst, könnnest du so die Fahrrichtung ausrechnen

    pos = (x,y,0)
    zDir = (0,0,-1)

    Richtung = pos x zDir; //Kreuzprodukt zweier Vektoren



  • Die Richtung ist die Tangente der Ellipse und somit deren erste Ableitung, also

    dx = a*-sin(...);
    dy = b*cos(...);
    

    (dx,dy) normalisieren, rechthaendige Rotationsmatrix aufrufen, glTranslate und glRotate und fertig!

    Gruss, Gast



  • Hallo,

    vielen Dank für eure Antworten. Leider bin ich noch was Computergrafik angeht ein kompletter Anfänger, deswegen habe ich noch ein paar Fragen.

    Gast221212 schrieb:

    Die Richtung ist die Tangente der Ellipse und somit deren erste Ableitung, also

    dx = a*-sin(i*h); 
    dy = b*cos(i*h);
    

    Das Ganze muss ich wahrscheinlich innerhalb einer Schleife durchführen. Aber in welcher Funktion, autofahrt(int value)?

    Gast221212 schrieb:

    (dx,dy) normalisieren

    Wäre dxn = dx / sqrt (dx*dx); richtig? Das muss auch innerhalb der Schleife geschehen?

    Gast221212 schrieb:

    rechthaendige Rotationsmatrix aufrufen, glTranslate und glRotate und fertig!

    Könntest du diese Punkte bitte etwas genauer beschreiben. Wäre sehr nett.

    Ich danke im Voraus.
    Unr3al


Anmelden zum Antworten