IArcProp.c
资源名称:ilib [点击查看]
上传用户:changbiao
上传日期:2007-01-13
资源大小:141k
文件大小:2k
源码类别:

图片显示

开发平台:

C/C++

  1. /*
  2.  * IArcProp.c
  3.  *
  4.  * Image library
  5.  *
  6.  * Description:
  7.  * Portable routines to manipulate raster images.
  8.  *
  9.  * History:
  10.  * 28-Nov-99 Craig Knudsen cknudsen@radix.net
  11.  * Created
  12.  *
  13.  ****************************************************************************/
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include <ctype.h>
  17. #include <memory.h>
  18. #include <math.h>
  19. #include "Ilib.h"
  20. #include "IlibP.h"
  21. #define deg2rad(a) ( ( 2.0 * PI / 360.0 ) * ( a ) )
  22. IError IArcProperties ( gc, x, y, r1, r2, a1, a2,
  23.   a1_x, a1_y, a2_x, a2_y, middle_x, middle_y )
  24. IGC gc;
  25. int x;
  26. int y;
  27. int r1;
  28. int r2;
  29. double a1; /* arc 1 (in degrees) */
  30. double a2; /* arc 2 (in degrees) */
  31. int *a1_x;
  32. int *a1_y;
  33. int *a2_x;
  34. int *a2_y;
  35. int *middle_x;
  36. int *middle_y;
  37. {
  38.   IGCP *gcp = (IGCP *)gc;
  39.   double a, adiff;
  40.   int x1, y1, x2, y2, mx, my;
  41.   if ( ! gcp )
  42.     return ( IInvalidGC );
  43.   if ( gcp->magic != IMAGIC_GC )
  44.     return ( IInvalidGC );
  45.   /* because our y is upside down, make all angles their negative */
  46.   a1 = 360 - a1;
  47.   a2 = 360 - a2;
  48.   adiff = fabs ( a2 - a1 );
  49.   x1 = x + (int)( r1 * cos ( deg2rad ( a1 ) ) );
  50.   if ( a1_x )
  51.     *a1_x = x1;
  52.   y1 = y + (int)( r2 * sin ( deg2rad ( a1 ) ) );
  53.   if ( a1_y )
  54.     *a1_y = y1;
  55.   x2 = x + (int)( r1 * cos ( deg2rad ( a2 ) ) );
  56.   if ( a2_x )
  57.     *a2_x = x2;
  58.   y2 = y + (int)( r2 * sin ( deg2rad ( a2 ) ) );
  59.   if ( a2_y )
  60.     *a2_y = y2;
  61.   a = ( a1 + a2 ) / 2;
  62.   mx = x + (int)( r1 * cos ( deg2rad ( a ) ) );
  63.   my = y + (int)( r2 * sin ( deg2rad ( a ) ) );
  64.   if ( middle_x )
  65.     *middle_x = mx;
  66.   if ( middle_y )
  67.     *middle_y = my;
  68.   return ( INoError );
  69. }