Animation durch Bézierkurve
-
Heyho!
Ich beschäftige mich derzeit mit der Animation, die durch eine kubische Bézierkurve dargestellt wird. Die vier Wertepaare (P0, P1, P2, P3) sind mir natürlich bekannt, wobei die x-Achse die Zeit darstellt und die y-Achse den Wert. Da es natürlich schwachsinnig ist, dass zu einem Zeitpunkt zwei verschiedene Werte vorhanden sein können, darf ich wohl in diesem "Spezialfall" davon ausgehen, dass man die Bézierkurve als eine Funktion auffassen kann.
Nun suche ich eine entsprechende Funktion f(x), die mit zu gegebener Zeit den passenden Wert liefert.Ich kenne die Parameterdarstellung:
Pt = (-P0 + 3P1 - 3P2 + P3) t3 + (3P0 - 6P1 + 3P2) t2 + (-3P0 + 3P1) t + P0Die Möglichkeit, die mir einfällt, ist die, dass ich diesen Term getrennt für die Zeiten- und Werteberechnung benutze. Die Funktion für die Zeit forme ich nach t um und setze sie in die Werte-Funktion ein. Doch erscheint mir dies relativ kompliziert ungeachtet dessen, dass die allgemeine Lösungsformel für eine kubische Gleichung ja nicht so einfach ist.
Kann mir da einer weiterhelfen? Wie wird die Animation über Bézierkurven sonst implementiert. Wie errechnet denn 3DS Max die Transformationen basierend auf den Informationen?
Vielen Dank
-
Hi,
trenne Dich davon, dass dein Parameter für die Zeit 'x' sein soll. Bézierkurven sind in deiner Darstellung über 't' parametrisiert. Wenn du Werte für dein 't' einsetzt (meist [0,1]) kannst Du dir die Punkte ausrechen. Falls Du nur 1-dimensionale Ergebnisse (deine y-Achse) brauchst, dann sollte die Dimension der P_i 1 sein.
Falls Du Dich mit Kamerafahrten beschäftigst, solltest einen Blick auf Catmull-Rom Splines werfen, die produzieren "glatte" C^1 - Kurven.
-
Ich danke dir vielmals für die Antwort.
Da mir ein Graph angezeigt wird, bei der die x-Achse die Zeit darstellt, dachte ich, das wäre so auch in der Berechnung der Bézierkurve, aber ich habe die Zeit nun mal über den Parameter t einfließen lassen, so wie du es mir angeraten hast und es ergab die korrekte Animation.
Also wird wohl die x-Achse die Zeit als t darstellen. Das ergibt auf jeden Fall Sinn.