www.pudn.com > ilib > IArcProp.c
/* * IArcProp.c * * Image library * * Description: * Portable routines to manipulate raster images. * * History: * 28-Nov-99 Craig Knudsen cknudsen@radix.net * Created * ****************************************************************************/ #include#include #include #include #include #include "Ilib.h" #include "IlibP.h" #define deg2rad(a) ( ( 2.0 * PI / 360.0 ) * ( a ) ) IError IArcProperties ( gc, x, y, r1, r2, a1, a2, a1_x, a1_y, a2_x, a2_y, middle_x, middle_y ) IGC gc; int x; int y; int r1; int r2; double a1; /* arc 1 (in degrees) */ double a2; /* arc 2 (in degrees) */ int *a1_x; int *a1_y; int *a2_x; int *a2_y; int *middle_x; int *middle_y; { IGCP *gcp = (IGCP *)gc; double a, adiff; int x1, y1, x2, y2, mx, my; if ( ! gcp ) return ( IInvalidGC ); if ( gcp->magic != IMAGIC_GC ) return ( IInvalidGC ); /* because our y is upside down, make all angles their negative */ a1 = 360 - a1; a2 = 360 - a2; adiff = fabs ( a2 - a1 ); x1 = x + (int)( r1 * cos ( deg2rad ( a1 ) ) ); if ( a1_x ) *a1_x = x1; y1 = y + (int)( r2 * sin ( deg2rad ( a1 ) ) ); if ( a1_y ) *a1_y = y1; x2 = x + (int)( r1 * cos ( deg2rad ( a2 ) ) ); if ( a2_x ) *a2_x = x2; y2 = y + (int)( r2 * sin ( deg2rad ( a2 ) ) ); if ( a2_y ) *a2_y = y2; a = ( a1 + a2 ) / 2; mx = x + (int)( r1 * cos ( deg2rad ( a ) ) ); my = y + (int)( r2 * sin ( deg2rad ( a ) ) ); if ( middle_x ) *middle_x = mx; if ( middle_y ) *middle_y = my; return ( INoError ); }