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. Alle-
       gro 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  con-
       structing 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 val-
       ues 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 de-
       cent 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 tan-
       gent 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_er-
       ror(3),	allegro_init(3),  allegro_message(3),  calc_spline(3), circle-
       fill(3),	clear_keybuf(3), clear_to_color(3),  desktop_palette(3),  fix-
       atan2(3),   fixcos(3),	fixed(3),  fixmul(3),  fixsin(3),  fixsqrt(3),
       fixtof(3),  fixtoi(3),  font(3),	 ftofix(3),  install_keyboard(3),  in-
       stall_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.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+14.3.quarterly>

home | help