|  | 
   
 |   |  |   
  
    | al_calculate_arc(3) | FreeBSD Library Functions Manual | al_calculate_arc(3) |  
al_calculate_arc - Allegro 5 API 
  
  
    #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)
 When thickness <= 0 this function
    computes positions of num_points regularly 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 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 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 bufferstride - Distance (in bytes) between starts of successive pairs of
    pointscx, cy - Center of the arcrx, ry - Radii of the arcstart_theta - The initial angle from which the arc is calculated in
      radiansdelta_theta - Angular span of the arc in radians (pass a negative number
      to switch direction)thickness - Thickness of the arcnum_points - The number of points to calculate al_draw_arc(3), al_calculate_spline(3), al_calculate_ribbon(3) 
  Visit the GSP FreeBSD Man Page Interface. Output converted with ManDoc.
 |