]> icculus.org git repositories - btb/d2x.git/blob - 2d/circle.c
remove rcs tags
[btb/d2x.git] / 2d / circle.c
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 #ifdef HAVE_CONFIG_H
15 #include <conf.h>
16 #endif
17
18 #include "u_mem.h"
19
20 #include "gr.h"
21 #include "grdef.h"
22
23 #ifndef OGL
24
25 int gr_circle(fix xc1,fix yc1,fix r1)
26 {
27         int p,x, y, xc, yc, r;
28
29         r = f2i(r1);
30         xc = f2i(xc1);
31         yc = f2i(yc1);
32         p=3-(r*2);
33         x=0;
34         y=r;
35
36         // Big clip
37         if ( (xc+r) < 0 ) return 1;
38         if ( (xc-r) > GWIDTH ) return 1;
39         if ( (yc+r) < 0 ) return 1;
40         if ( (yc-r) > GHEIGHT ) return 1;
41
42         while(x<y)
43         {
44                 // Draw the first octant
45                 gr_pixel( xc-y, yc-x );
46                 gr_pixel( xc+y, yc-x );
47                 gr_pixel( xc-y, yc+x );
48                 gr_pixel( xc+y, yc+x );
49
50                 if (p<0)
51                         p=p+(x<<2)+6;
52                 else {
53                         // Draw the second octant
54                         gr_pixel( xc-x, yc-y );
55                         gr_pixel( xc+x, yc-y );
56                         gr_pixel( xc-x, yc+y );
57                         gr_pixel( xc+x, yc+y );
58                         p=p+((x-y)<<2)+10;
59                         y--;
60                 }
61                 x++;
62         }
63         if(x==y) {
64                 gr_pixel( xc-x, yc-y );
65                 gr_pixel( xc+x, yc-y );
66                 gr_pixel( xc-x, yc+y );
67                 gr_pixel( xc+x, yc+y );
68         }
69         return 0;
70 }
71
72 int gr_ucircle(fix xc1,fix yc1,fix r1)
73 {
74         int p,x, y, xc, yc, r;
75
76         r = f2i(r1);
77         xc = f2i(xc1);
78         yc = f2i(yc1);
79         p=3-(r*2);
80         x=0;
81         y=r;
82
83         while(x<y)
84         {
85                 // Draw the first octant
86                 gr_upixel( xc-y, yc-x );
87                 gr_upixel( xc+y, yc-x );
88                 gr_upixel( xc-y, yc+x );
89                 gr_upixel( xc+y, yc+x );
90
91                 if (p<0)
92                         p=p+(x<<2)+6;
93                 else {
94                         // Draw the second octant
95                         gr_upixel( xc-x, yc-y );
96                         gr_upixel( xc+x, yc-y );
97                         gr_upixel( xc-x, yc+y );
98                         gr_upixel( xc+x, yc+y );
99                         p=p+((x-y)<<2)+10;
100                         y--;
101                 }
102                 x++;
103         }
104         if(x==y) {
105                 gr_upixel( xc-x, yc-y );
106                 gr_upixel( xc+x, yc-y );
107                 gr_upixel( xc-x, yc+y );
108                 gr_upixel( xc+x, yc+y );
109         }
110         return 0;
111 }
112
113 #endif //!OGL