exspline(3alleg4)                Allegro manual                exspline(3alleg4)

       exspline - Constructing smooth movement paths from spline curves. Allegro
       game programming library.

       #include <allegro.h>

       Example exspline

       This program demonstrates the use of spline curves to create smooth paths
       connecting a number of node points. This can be useful for constructing
       realistic motion and animations.

       The technique is to connect the series of guide points p1..p(n) with
       spline curves from p1-p2, p2-p3, etc. Each spline must pass though both
       of its guide points, so they must be used as the first and fourth of the
       spline control points. The fun bit is coming up with sensible values for
       the second and third spline control points, such that the spline segments
       will have equal gradients where they meet. I came up with the following

       For each guide point p(n), calculate the desired tangent to the curve at
       that point. I took this to be the vector p(n-1) -> p(n+1), which can
       easily be calculated with the inverse tangent function, and gives decent
       looking results. One implication of this is that two dummy guide points
       are needed at each end of the curve, which are used in the tangent
       calculations but not connected to the set of splines.

       Having got these tangents, it becomes fairly easy to calculate the spline
       control points. For a spline between guide points p(a) and p(b), the
       second control point should lie along the positive tangent from p(a), and
       the third control point should lie along the negative tangent from p(b).
       How far they are placed along these tangents controls the shape of the
       curve: I found that applying a 'curviness' scaling factor to the distance
       between p(a) and p(b) works well.

       One thing to note about splines is that the generated points are not all
       equidistant. Instead they tend to bunch up nearer to the ends of the
       spline, which means you will need to apply some fudges to get an object
       to move at a constant speed. On the other hand, in situations where the
       curve has a noticeable change of direction at each guide point, the
       effect can be quite nice because it makes the object slow down for the

       END_OF_MAIN(3alleg4), SCREEN_W(3alleg4), acquire_screen(3alleg4),
       alert(3alleg4), allegro_error(3alleg4), allegro_init(3alleg4),
       allegro_message(3alleg4), calc_spline(3alleg4), circlefill(3alleg4),
       clear_keybuf(3alleg4), clear_to_color(3alleg4), desktop_palette(3alleg4),
       fixatan2(3alleg4), fixcos(3alleg4), fixed(3alleg4), fixmul(3alleg4),
       fixsin(3alleg4), fixsqrt(3alleg4), fixtof(3alleg4), fixtoi(3alleg4),
       font(3alleg4), ftofix(3alleg4), install_keyboard(3alleg4),
       install_mouse(3alleg4), install_timer(3alleg4), itofix(3alleg4),
       key(3alleg4), keypressed(3alleg4), line(3alleg4), makecol(3alleg4),
       mouse_b(3alleg4), mouse_x(3alleg4), mouse_y(3alleg4),
       palette_color(3alleg4), poll_mouse(3alleg4), readkey(3alleg4),
       release_screen(3alleg4), screen(3alleg4), set_gfx_mode(3alleg4),
       set_palette(3alleg4), show_mouse(3alleg4), spline(3alleg4),
       textout_centre_ex(3alleg4), textprintf_centre_ex(3alleg4),
       textprintf_ex(3alleg4), vsync(3alleg4), xor_mode(3alleg4)

Allegro                           version 4.4.3                exspline(3alleg4)