xref: /inferno-os/libmemdraw/icossin.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include	"lib9.h"
2*37da2899SCharles.Forsyth #include	"draw.h"
3*37da2899SCharles.Forsyth 
4*37da2899SCharles.Forsyth /*
5*37da2899SCharles.Forsyth  * Integer sine and cosine for integral degree argument.
6*37da2899SCharles.Forsyth  * Tables computed by (sin,cos)(PI*d/180).
7*37da2899SCharles.Forsyth  */
8*37da2899SCharles.Forsyth static short sinus[91] = {
9*37da2899SCharles.Forsyth 	0,	/* 0 */
10*37da2899SCharles.Forsyth 	18,	/* 1 */
11*37da2899SCharles.Forsyth 	36,	/* 2 */
12*37da2899SCharles.Forsyth 	54,	/* 3 */
13*37da2899SCharles.Forsyth 	71,	/* 4 */
14*37da2899SCharles.Forsyth 	89,	/* 5 */
15*37da2899SCharles.Forsyth 	107,	/* 6 */
16*37da2899SCharles.Forsyth 	125,	/* 7 */
17*37da2899SCharles.Forsyth 	143,	/* 8 */
18*37da2899SCharles.Forsyth 	160,	/* 9 */
19*37da2899SCharles.Forsyth 	178,	/* 10 */
20*37da2899SCharles.Forsyth 	195,	/* 11 */
21*37da2899SCharles.Forsyth 	213,	/* 12 */
22*37da2899SCharles.Forsyth 	230,	/* 13 */
23*37da2899SCharles.Forsyth 	248,	/* 14 */
24*37da2899SCharles.Forsyth 	265,	/* 15 */
25*37da2899SCharles.Forsyth 	282,	/* 16 */
26*37da2899SCharles.Forsyth 	299,	/* 17 */
27*37da2899SCharles.Forsyth 	316,	/* 18 */
28*37da2899SCharles.Forsyth 	333,	/* 19 */
29*37da2899SCharles.Forsyth 	350,	/* 20 */
30*37da2899SCharles.Forsyth 	367,	/* 21 */
31*37da2899SCharles.Forsyth 	384,	/* 22 */
32*37da2899SCharles.Forsyth 	400,	/* 23 */
33*37da2899SCharles.Forsyth 	416,	/* 24 */
34*37da2899SCharles.Forsyth 	433,	/* 25 */
35*37da2899SCharles.Forsyth 	449,	/* 26 */
36*37da2899SCharles.Forsyth 	465,	/* 27 */
37*37da2899SCharles.Forsyth 	481,	/* 28 */
38*37da2899SCharles.Forsyth 	496,	/* 29 */
39*37da2899SCharles.Forsyth 	512,	/* 30 */
40*37da2899SCharles.Forsyth 	527,	/* 31 */
41*37da2899SCharles.Forsyth 	543,	/* 32 */
42*37da2899SCharles.Forsyth 	558,	/* 33 */
43*37da2899SCharles.Forsyth 	573,	/* 34 */
44*37da2899SCharles.Forsyth 	587,	/* 35 */
45*37da2899SCharles.Forsyth 	602,	/* 36 */
46*37da2899SCharles.Forsyth 	616,	/* 37 */
47*37da2899SCharles.Forsyth 	630,	/* 38 */
48*37da2899SCharles.Forsyth 	644,	/* 39 */
49*37da2899SCharles.Forsyth 	658,	/* 40 */
50*37da2899SCharles.Forsyth 	672,	/* 41 */
51*37da2899SCharles.Forsyth 	685,	/* 42 */
52*37da2899SCharles.Forsyth 	698,	/* 43 */
53*37da2899SCharles.Forsyth 	711,	/* 44 */
54*37da2899SCharles.Forsyth 	724,	/* 45 */
55*37da2899SCharles.Forsyth 	737,	/* 46 */
56*37da2899SCharles.Forsyth 	749,	/* 47 */
57*37da2899SCharles.Forsyth 	761,	/* 48 */
58*37da2899SCharles.Forsyth 	773,	/* 49 */
59*37da2899SCharles.Forsyth 	784,	/* 50 */
60*37da2899SCharles.Forsyth 	796,	/* 51 */
61*37da2899SCharles.Forsyth 	807,	/* 52 */
62*37da2899SCharles.Forsyth 	818,	/* 53 */
63*37da2899SCharles.Forsyth 	828,	/* 54 */
64*37da2899SCharles.Forsyth 	839,	/* 55 */
65*37da2899SCharles.Forsyth 	849,	/* 56 */
66*37da2899SCharles.Forsyth 	859,	/* 57 */
67*37da2899SCharles.Forsyth 	868,	/* 58 */
68*37da2899SCharles.Forsyth 	878,	/* 59 */
69*37da2899SCharles.Forsyth 	887,	/* 60 */
70*37da2899SCharles.Forsyth 	896,	/* 61 */
71*37da2899SCharles.Forsyth 	904,	/* 62 */
72*37da2899SCharles.Forsyth 	912,	/* 63 */
73*37da2899SCharles.Forsyth 	920,	/* 64 */
74*37da2899SCharles.Forsyth 	928,	/* 65 */
75*37da2899SCharles.Forsyth 	935,	/* 66 */
76*37da2899SCharles.Forsyth 	943,	/* 67 */
77*37da2899SCharles.Forsyth 	949,	/* 68 */
78*37da2899SCharles.Forsyth 	956,	/* 69 */
79*37da2899SCharles.Forsyth 	962,	/* 70 */
80*37da2899SCharles.Forsyth 	968,	/* 71 */
81*37da2899SCharles.Forsyth 	974,	/* 72 */
82*37da2899SCharles.Forsyth 	979,	/* 73 */
83*37da2899SCharles.Forsyth 	984,	/* 74 */
84*37da2899SCharles.Forsyth 	989,	/* 75 */
85*37da2899SCharles.Forsyth 	994,	/* 76 */
86*37da2899SCharles.Forsyth 	998,	/* 77 */
87*37da2899SCharles.Forsyth 	1002,	/* 78 */
88*37da2899SCharles.Forsyth 	1005,	/* 79 */
89*37da2899SCharles.Forsyth 	1008,	/* 80 */
90*37da2899SCharles.Forsyth 	1011,	/* 81 */
91*37da2899SCharles.Forsyth 	1014,	/* 82 */
92*37da2899SCharles.Forsyth 	1016,	/* 83 */
93*37da2899SCharles.Forsyth 	1018,	/* 84 */
94*37da2899SCharles.Forsyth 	1020,	/* 85 */
95*37da2899SCharles.Forsyth 	1022,	/* 86 */
96*37da2899SCharles.Forsyth 	1023,	/* 87 */
97*37da2899SCharles.Forsyth 	1023,	/* 88 */
98*37da2899SCharles.Forsyth 	1024,	/* 89 */
99*37da2899SCharles.Forsyth 	1024,	/* 90 */
100*37da2899SCharles.Forsyth };
101*37da2899SCharles.Forsyth 
102*37da2899SCharles.Forsyth void
icossin(int deg,int * cosp,int * sinp)103*37da2899SCharles.Forsyth icossin(int deg, int *cosp, int *sinp)
104*37da2899SCharles.Forsyth {
105*37da2899SCharles.Forsyth 	int sinsign, cossign;
106*37da2899SCharles.Forsyth 	short *stp, *ctp;
107*37da2899SCharles.Forsyth 
108*37da2899SCharles.Forsyth 	deg %= 360;
109*37da2899SCharles.Forsyth 	if(deg < 0)
110*37da2899SCharles.Forsyth 		deg += 360;
111*37da2899SCharles.Forsyth 	sinsign = 1;
112*37da2899SCharles.Forsyth 	cossign = 1;
113*37da2899SCharles.Forsyth 	stp = 0;
114*37da2899SCharles.Forsyth 	ctp = 0;
115*37da2899SCharles.Forsyth 	switch(deg/90){
116*37da2899SCharles.Forsyth 	case 2:
117*37da2899SCharles.Forsyth 		sinsign = -1;
118*37da2899SCharles.Forsyth 		cossign = -1;
119*37da2899SCharles.Forsyth 		deg -= 180;
120*37da2899SCharles.Forsyth 		/* fall through */
121*37da2899SCharles.Forsyth 	case 0:
122*37da2899SCharles.Forsyth 		stp = &sinus[deg];
123*37da2899SCharles.Forsyth 		ctp = &sinus[90-deg];
124*37da2899SCharles.Forsyth 		break;
125*37da2899SCharles.Forsyth 	case 3:
126*37da2899SCharles.Forsyth 		sinsign = -1;
127*37da2899SCharles.Forsyth 		cossign = -1;
128*37da2899SCharles.Forsyth 		deg -= 180;
129*37da2899SCharles.Forsyth 		/* fall through */
130*37da2899SCharles.Forsyth 	case 1:
131*37da2899SCharles.Forsyth 		deg = 180-deg;
132*37da2899SCharles.Forsyth 		cossign = -cossign;
133*37da2899SCharles.Forsyth 		stp = &sinus[deg];
134*37da2899SCharles.Forsyth 		ctp = &sinus[90-deg];
135*37da2899SCharles.Forsyth 		break;
136*37da2899SCharles.Forsyth 	}
137*37da2899SCharles.Forsyth 	*sinp = sinsign*stp[0];
138*37da2899SCharles.Forsyth 	*cosp = cossign*ctp[0];
139*37da2899SCharles.Forsyth }
140