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

FreeBSD Manual Pages

  
 
  

home | help
al_calculate_arc(3)	   Library Functions Manual	   al_calculate_arc(3)

NAME
       al_calculate_arc	- Allegro 5 API

SYNOPSIS
	      #include <allegro5/allegro_primitives.h>

	      void al_calculate_arc(float* dest, int stride, float cx, float cy,
		 float rx, float ry, float start_theta,	float delta_theta, float thickness,
		 int num_points)

DESCRIPTION
       When thickness <= 0 this	function computes positions of num_points reg-
       ularly  spaced  points  on  an elliptical arc.  When thickness >	0 this
       function	computes two sets of points, obtained as  follows:  the	 first
       set  is	obtained  by  taking the points	computed in the	thickness <= 0
       case and	shifting them by thickness / 2 outward,	in a direction perpen-
       dicular to the arc curve.  The second set  is  the  same,  but  shifted
       thickness  /  2 inward relative to the arc.  The	two sets of points are
       interleaved in the destination buffer (i.e. the first  pair  of	points
       will be collinear with the arc center, the first	point of the pair will
       be  farther  from  the center than the second point; the	next pair will
       also be collinear, but at a different angle and so on).

       The destination buffer dest is interpreted as a set of regularly	spaced
       pairs of	floats,	each pair holding the coordinates of the corresponding
       point on	the arc.  The two floats in the	pair  are  adjacent,  and  the
       distance	 (in  bytes)  between  the addresses of	the first float	in two
       successive pairs	is stride.  For	example, if you	have a tightly	packed
       array  of  floats with no spaces	between	pairs, then stride will	be ex-
       actly 2 * sizeof(float).

       Example with thickness <= 0:

	      const int	num_points = 4;
	      float points[num_points][2];
	      al_calculate_arc(&points[0][0], 2	* sizeof(float), 0, 0, 10, 10, 0, ALLEGRO_PI / 2, 0, num_points);

	      assert((int)points[0][0] == 10);
	      assert((int)points[0][1] == 0);

	      assert((int)points[num_points - 1][0] == 0);
	      assert((int)points[num_points - 1][1] == 10);

       Example with thickness >	0:

	      const int	num_points = 4;
	      float points[num_points *	2][2];
	      al_calculate_arc(&points[0][0], 2	* sizeof(float), 0, 0, 10, 10, 0, ALLEGRO_PI / 2, 2, num_points);

	      assert((int)points[0][0] == 11);
	      assert((int)points[0][1] == 0);
	      assert((int)points[1][0] == 9);
	      assert((int)points[1][1] == 0);

	      assert((int)points[(num_points - 1) * 2][0] == 0);
	      assert((int)points[(num_points - 1) * 2][1] == 11);
	      assert((int)points[(num_points - 1) * 2 +	1][0] == 0);
	      assert((int)points[(num_points - 1) * 2 +	1][1] == 9);

       Parameters:

        dest -	The destination	buffer

        stride	- Distance (in bytes) between starts of	 successive  pairs  of
	 points

        cx, cy	- Center of the	arc

        rx, ry	- Radii	of the arc

        start_theta  -	 The initial angle from	which the arc is calculated in
	 radians

        delta_theta - Angular span of the arc in  radians  (pass  a  negative
	 number	to switch direction)

        thickness - Thickness of the arc

        num_points - The number of points to calculate

SEE ALSO
       al_draw_arc(3), al_calculate_spline(3), al_calculate_ribbon(3)

Allegro	reference manual				   al_calculate_arc(3)

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

home | help