8 Animation Helpers (original) (raw)

8 Animation Helpers🔗

These functions are designed to work with the slide constructors in slideshow/play.

8.1 Pict Interpolations🔗

Interpolates p1 and p2, where the result withn as 0.0 is p1, and the result withn as 1.0 is p2. For intermediate points,p1 fades out while p2 fades in as n changes from 0.0 to 1.0. At the same time, the width and height of the generated pict are intermediate betweenp1 and p2, and the relative baselines and last pict correspondingly morph within the bounding box.

The combine argument determines how p1 andp2 are aligned for morphing. For example, if p1 andp2 both contain multiple lines of text with the same line height but different number of lines, then usingctl-superimpose would keep the ascent line in a fixed location relative to the top of the resulting pict as the rest of the shape morphs around it.

Examples:

image

Similar to fade-pict, but the target is not a fixedp2, but instead a function make-p2 that takes alaundered ghost of p1 and places it into a larger scene. Also, p1 does not fade out as nincreases; instead, p1 is placed wherever its ghost appears in the result of make-p2.

For example,

> (get-current-code-font-size (λ () 20))
image

animates the wrapping of x with a (+ .... 1) form.

Pins p onto base, sliding from p-from top-to (which are picts within base) asn goes from 0.0 to 1.0. The top-left locations of p-from and p-to determine the placement of the top-left of p.

The p-from and p-to picts are typicallylaundered ghosts of p within base, but they can be any picts within base.

Examples:

image

Like slide-pict, but aligns the center of p with p-from and p-to.

Examples:

image

8.2 Merging Animations🔗

Converts a list of gen functions into a single function that uses each gen in sequence.

Converts a list of gen functions into a single function that run (sequence-animations gen ...) in reverse.

8.3 Stretching and Squashing Time🔗

Monotonically but non-uniformly maps n with fixed points at 0.0 and 1.0.

Suppose that we have the following definitions for our examples:

A normal use of the animation looks like this:

> (run-animation (λ (n) n))
image

The fast-start mapping is convex, so that

(slide-pict base p p1 p2 (fast-start n))

appears to move quickly away from p1 and then slowly as it approaches p2, assuming that n increases uniformly.

Applying it to the animation above produces this:

> (run-animation fast-start)
image

The fast-end mapping is concave, so that

(slide-pict base p p1 p2 (fast-end n))

appears to move slowly away from p1 and then quickly as it approaches p2, assuming that n increases uniformly.

> (run-animation fast-end)
image

The fast-edges mapping is convex at first and concave at the end, so that

(slide-pict base p p1 p2 (fast-edges n))

appears to move quickly away from p1, then more slowly, and then quickly again near p2, assuming that n increases uniformly.

> (run-animation fast-edges)
image

The fast-middle mapping is concave at first and convex at the end, so that

(slide-pict base p p1 p2 (fast-middle n))

> (run-animation fast-middle)
image

appears to move slowly away from p1, then more quickly, and then slowly again near p2, assuming that n increases uniformly.

Splits the progression of n from 0.0 to 1.0into a progression from (values 0.0 0.0) to (values 1.0 0.0) and then (values 1.0 0.0) to (values 1.0 1.0).

Here is an example that shows how to apply split-phase to the animation from the examples for fast-start:

image