home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1998 #6 / amigaacscoverdisc1998-061998.iso / games / descent / source / 2d / circle.c < prev    next >
Text File  |  1998-06-08  |  3KB  |  132 lines

  1. /*
  2. THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  3. SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
  4. END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  5. ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  6. IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  7. SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  8. FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  9. CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
  10. AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
  11. COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
  12. */
  13. /*
  14.  * $Source: f:/miner/source/2d/rcs/circle.c $
  15.  * $Revision: 1.3 $
  16.  * $Author: john $
  17.  * $Date: 1994/11/18 22:51:01 $
  18.  * 
  19.  * .
  20.  * 
  21.  * $Log: circle.c $
  22.  * Revision 1.3  1994/11/18  22:51:01  john
  23.  * Changed a bunch of shorts to ints in calls.
  24.  * 
  25.  * Revision 1.2  1994/05/12  17:33:18  john
  26.  * Added circle code.
  27.  * 
  28.  * Revision 1.1  1994/05/12  17:21:49  john
  29.  * Initial revision
  30.  * 
  31.  * 
  32.  */
  33.  
  34.  
  35. #pragma off (unreferenced)
  36. static char rcsid[] = "$Id: circle.c 1.3 1994/11/18 22:51:01 john Exp $";
  37. #pragma on (unreferenced)
  38.  
  39. #include "mem.h"
  40.  
  41. #include "gr.h"
  42. #include "grdef.h"
  43.  
  44. int gr_circle(fix xc1,fix yc1,fix r1)
  45. {
  46.     int p,x, y, xc, yc, r;
  47.  
  48.     r = f2i(r1);
  49.     xc = f2i(xc1);
  50.     yc = f2i(yc1);
  51.     p=3-(r*2);
  52.     x=0;
  53.     y=r;
  54.  
  55.     // Big clip
  56.     if ( (xc+r) < 0 ) return 1;
  57.     if ( (xc-r) > WIDTH ) return 1;
  58.     if ( (yc+r) < 0 ) return 1;
  59.     if ( (yc-r) > HEIGHT ) return 1;
  60.  
  61.     while(x<y)
  62.     {
  63.         // Draw the first octant
  64.         gr_pixel( xc-y, yc-x );
  65.         gr_pixel( xc+y, yc-x );
  66.         gr_pixel( xc-y, yc+x );
  67.         gr_pixel( xc+y, yc+x );
  68.  
  69.         if (p<0) 
  70.             p=p+(x<<2)+6;
  71.         else    {
  72.             // Draw the second octant
  73.             gr_pixel( xc-x, yc-y );
  74.             gr_pixel( xc+x, yc-y );
  75.             gr_pixel( xc-x, yc+y );
  76.             gr_pixel( xc+x, yc+y );
  77.             p=p+((x-y)<<2)+10;
  78.             y--;
  79.         }
  80.         x++;
  81.     }
  82.     if(x==y)    {
  83.         gr_pixel( xc-x, yc-y );
  84.         gr_pixel( xc+x, yc-y );
  85.         gr_pixel( xc-x, yc+y );
  86.         gr_pixel( xc+x, yc+y );
  87.     }
  88.     return 0;
  89. }
  90.  
  91. int gr_ucircle(fix xc1,fix yc1,fix r1)
  92. {
  93.     int p,x, y, xc, yc, r;
  94.  
  95.     r = f2i(r1);
  96.     xc = f2i(xc1);
  97.     yc = f2i(yc1);
  98.     p=3-(r*2);
  99.     x=0;
  100.     y=r;
  101.  
  102.     while(x<y)
  103.     {
  104.         // Draw the first octant
  105.         gr_upixel( xc-y, yc-x );
  106.         gr_upixel( xc+y, yc-x );
  107.         gr_upixel( xc-y, yc+x );
  108.         gr_upixel( xc+y, yc+x );
  109.  
  110.         if (p<0) 
  111.             p=p+(x<<2)+6;
  112.         else    {
  113.             // Draw the second octant
  114.             gr_upixel( xc-x, yc-y );
  115.             gr_upixel( xc+x, yc-y );
  116.             gr_upixel( xc-x, yc+y );
  117.             gr_upixel( xc+x, yc+y );
  118.             p=p+((x-y)<<2)+10;
  119.             y--;
  120.         }
  121.         x++;
  122.     }
  123.     if(x==y)    {
  124.         gr_upixel( xc-x, yc-y );
  125.         gr_upixel( xc+x, yc-y );
  126.         gr_upixel( xc-x, yc+y );
  127.         gr_upixel( xc+x, yc+y );
  128.     }
  129.     return 0;
  130. }
  131. 
  132.