8 Animation Helpers
These functions are designed to work with the
slide constructors in slideshow/play.
8.1 Pict Interoplations
Interpolates p1 and p2, where the result with
n as 0.0 is p1, and the result with
n 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 between
p1 and p2, and the relative baselines and last
pict correspondingly morph within the bounding box.
The combine argument determines how p1 and
p2 are aligned for morphing. For example, if p1 and
p2 both contain multiple lines of text with the same line
height but different number of lines, then using
ctl-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:
Similar to
fade-pict, but the target is not a fixed
p2, but instead a function
make-p2 that takes a
laundered
ghost of
p1 and places it into a
larger scene. Also,
p1 does not fade out as
n
increases; instead,
p1 is placed wherever its ghost appears
in the result of
make-p2.
For example,
> (get-current-code-font-size (λ () 20)) |
|
|
|
|
|
animates the wrapping of x with a (+ .... 1) form.
Pins p onto base, sliding from p-from to
p-to (which are picts within base) as
n 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 typically
laundered ghosts of p within base,
but they can be any picts within base.
Examples:
Like
slide-pict, but aligns the center of
p
with
p-from and
p-to.
Examples:
8.2 Merging Animations
Converts a list of gen functions into a single function that
uses each gen in sequence.
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)) |
|
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:
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 quicly as it
approaches p2, assuming that n increases uniformly.
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.
The fast-middle mapping is concave at first and convex at the
end, so that
(slide-pict base p p1 p2 (fast-middle n))
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.0
into 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: