exspline(3)                     Allegro manual                     exspline(3)



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

SYNOPSIS
       #include <allegro.h>


       Example exspline

DESCRIPTION
       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 solution:

       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 curve.


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



Allegro                          version 4.2.3                     exspline(3)
