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