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 regu-
     larly 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 perpendicular 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 dis-
     tance (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	 exactly   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 radi-
       ans

     * 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+15.1.quarterly>

home | help