1exspline(3)                     Allegro manual                     exspline(3)
2
3
4

NAME

6       exspline - Constructing smooth movement paths from spline curves. Alle‐
7       gro game programming library.
8

SYNOPSIS

10       #include <allegro.h>
11
12
13       Example exspline
14

DESCRIPTION

16       This program demonstrates the use of spline  curves  to  create  smooth
17       paths  connecting  a number of node points. This can be useful for con‐
18       structing realistic motion and animations.
19
20       The technique is to connect the series of guide  points  p1..p(n)  with
21       spline curves from p1-p2, p2-p3, etc. Each spline must pass though both
22       of its guide points, so they must be used as the first  and  fourth  of
23       the  spline control points. The fun bit is coming up with sensible val‐
24       ues for the second and third  spline  control  points,  such  that  the
25       spline  segments  will  have equal gradients where they meet. I came up
26       with the following solution:
27
28       For each guide point p(n), calculate the desired tangent to  the  curve
29       at that point. I took this to be the vector p(n-1) -> p(n+1), which can
30       easily be calculated with  the  inverse  tangent  function,  and  gives
31       decent looking results. One implication of this is that two dummy guide
32       points are needed at each end of the curve, which are used in the  tan‐
33       gent calculations but not connected to the set of splines.
34
35       Having  got  these  tangents,  it  becomes fairly easy to calculate the
36       spline control points. For a spline between guide points p(a) and p(b),
37       the  second  control  point  should lie along the positive tangent from
38       p(a), and the third control point should lie along the negative tangent
39       from  p(b).  How  far they are placed along these tangents controls the
40       shape of the curve: I found that applying a 'curviness' scaling  factor
41       to the distance between p(a) and p(b) works well.
42
43       One  thing  to  note about splines is that the generated points are not
44       all equidistant. Instead they tend to bunch up nearer to  the  ends  of
45       the  spline,  which  means you will need to apply some fudges to get an
46       object to move at a constant speed. On the other  hand,  in  situations
47       where  the  curve  has  a  noticeable change of direction at each guide
48       point, the effect can be quite nice because it makes  the  object  slow
49       down for the curve.
50
51

SEE ALSO

53       END_OF_MAIN(3),   SCREEN_W(3),   acquire_screen(3),   alert(3),   alle‐
54       gro_error(3), allegro_init(3), allegro_message(3), calc_spline(3), cir‐
55       clefill(3),   clear_keybuf(3),  clear_to_color(3),  desktop_palette(3),
56       fixatan2(3), fixcos(3),  fixed(3),  fixmul(3),  fixsin(3),  fixsqrt(3),
57       fixtof(3),    fixtoi(3),   font(3),   ftofix(3),   install_keyboard(3),
58       install_mouse(3), install_timer(3), itofix(3),  key(3),  keypressed(3),
59       line(3),   makecol(3),   mouse_b(3),   mouse_x(3),   mouse_y(3),   pal‐
60       ette_color(3), poll_mouse(3), readkey(3), release_screen(3), screen(3),
61       set_gfx_mode(3), set_palette(3), show_mouse(3), spline(3), textout_cen‐
62       tre_ex(3),   textprintf_centre_ex(3),    textprintf_ex(3),    vsync(3),
63       xor_mode(3)
64
65
66
67Allegro                          version 4.2.2                     exspline(3)
Impressum