Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung | Blog
Aufgabe 4: Keyframe-Animation
Schreiben Sie ein Java-Programm mit grafischer Ausgabe, das zweidimensionale
Keyframe-Animation der Position demonstriert.
Jeder Keyframe ist durch x- und y-Koordinate x = (x,y) sowie
Zeitpunkt t bestimmt. Ihr Programm soll von einer beliebigen, aber fest
einkompilierten Folge von Keyframes mit aufsteigenden Zeitpunkten ausgehen.
Es soll eine wenige Pixel große Kreisscheibe entsprechend dieser
Folge an Keyframes und der enthaltenen Zeitangaben in Echtzeit auf dem
Bildschirm bewegen.
Um zwischen den Keyframes weich zu interpolieren, benutzen Sie Hermite-Kurven
(vergangenes Semester!), keine B-Splines, denn die würden die Keyframe-Positionen
im Allgemeinen nicht exakt treffen. Zwischen je zwei aufeinanderfolgenden
Keyframes (x0, t0) und (x1,
t1) sitzt eine Hermite-Kurve:
x0 * (1-3(t-t0)2/(t1-t0)2+2(t-t0)3/(t1-t0)3)
+ v0 * (t-t0)(t1-t)2/(t1-t0)2
- v1 * (t-t0)2(t1-t)/(t1-t0)2
+ x1 * (3(t-t0)2/(t1-t0)2-2(t-t0)3/(t1-t0)3)
Um diese festzulegen, benötigen Sie noch die Geschwindigkeitsvektoren
v0
und v1 der Bahnkurve an den Keyframes. Diese berechnen
Sie so:
-
Gibt es nur zwei Keyframes, benutzen Sie zwei gleiche Geschwindigkeitsvektoren:
den Differenzvektor der beiden Punkte geteilt durch die Zeitdifferenz.
Es ergibt sich eine lineare Bewegung. (Das ginge auch ohne Hermite.)
-
Gibt es mehr als zwei Keyframes, unterscheiden Sie zwischen den beiden
"äußeren" Keyframes (=Anfang und Ende) und den übrigen,
"inneren" Keyframes.
-
Die Geschwindigkeitsvektoren für die inneren Keyframes berechnen Sie
so: Betrachten Sie den Keyframe vor und nach dem jeweiligen Keyframe. Bestimmen
Sie den Geschwindigkeitsvektor einer linearen Verbindung zwischen dem Keyframe
davor und danach. Benutzen Sie diesen als Geschwindigkeitsvektor der Hermite-Kurve
für den Keyframe in der Mitte.
-
Die Geschwindigkeitsvektoren für den ersten Keyframes berechnen Sie
so: Bestimmen Sie den Geschwindigkeitsvektor einer linearen Verbindung
zwischen dem ersten Keyframe und dem zweiten Keyframe. Verdoppeln Sie den
und ziehen Sie davon den bereits bestimmten Geschwindigkeitsvektor des
zweiten Keyframes ab. (Hintergedanke dieser Konstruktion: Die Kurve hat
dann zwischen diesen beiden Keyframes eine konstante Beschleunigung.)
-
Entsprechend entsteht der Geschwindigkeitsvektor für den letzten Keyframe.
Zur Wiedergabe des Bewegungsablaufs in Echtzeit können Sie zum Beispiel
ein Timer-Objekt oder die Methode System.currentTimeMillis verwenden.
Beispiele für funktionale Ergänzungen, um vier Punkte für
das Programm zu erreichen:
-
Sehen Sie für die Positionen und Zeitpunkte der Keyframes Einstellmöglichkeiten
wie in gängiger Animationssoftware vor.
-
Benutzen Sie ein komplexeres Objekt und animieren Sie auch dessen Größe
und Drehwinkel.