Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
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 re-
     alistic 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 sec-
     ond and third spline control points, such that  the  spline  segments  will
     have  equal  gradients  where they meet. I came up with the following solu-
     tion:

     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), fix-
     cos(3), fixed(3), fixmul(3), fixsin(3), fixsqrt(3),  fixtof(3),  fixtoi(3),
     font(3),	  ftofix(3),	install_keyboard(3),	install_mouse(3),    in-
     stall_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), read-
     key(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.4.3 		     exspline(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=exspline&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help